@@ -67,10 +67,14 @@ def __init__(
6767class Importer :
6868 def __init__ (
6969 self ,
70+ * ,
71+ blender_version : list [int ],
7072 specific_handlers : dict [type , DESERIALIZER ],
7173 getters : dict [int , GETTER ],
7274 debug_prints : bool ,
7375 ) -> None :
76+ self .blender_version = blender_version
77+
7478 self .specific_handlers = specific_handlers
7579 self .getters = getters
7680 self .debug_prints = debug_prints
@@ -498,10 +502,15 @@ def getter() -> bpy.types.ShaderNodeTree:
498502
499503
500504def _check_version (data : dict ) -> None :
501- exporter_blender_version = data [BLENDER_VERSION ]
502- importer_blender_version = bpy .app .version_string
503-
504- if exporter_blender_version != importer_blender_version :
505+ exporter_blender_version = [
506+ int (v ) for v in data [BLENDER_VERSION ].split (" " )[0 ].split ("." )
507+ ]
508+ importer_blender_version = bpy .app .version
509+
510+ if (
511+ exporter_blender_version [0 ] != importer_blender_version [0 ]
512+ or exporter_blender_version [1 ] > importer_blender_version [1 ]
513+ ):
505514 raise RuntimeError (
506515 f"Blender version mismatch. File version: { exporter_blender_version } , but running { importer_blender_version } "
507516 )
@@ -586,7 +595,7 @@ def get_external(self) -> dict[str, EXTERNAL_SERIALIZATION]:
586595
587596 def set_external (
588597 self ,
589- ids_and_references : Iterator [Tuple [int , bpy .types .ID ]],
598+ ids_and_references : Iterator [Tuple [int , bpy .types .ID | None ]],
590599 ) -> None :
591600 for external_id , external_item in ids_and_references :
592601 scene_id = self .get_external ()[str (external_id )][EXTERNAL_SCENE_ID ]
@@ -620,11 +629,18 @@ def set_external(
620629 assert int (external_id ) in self .getters
621630
622631 def start_import (self , parameters : ImportParameters ) -> None :
632+ version_cycle = self .data [BLENDER_VERSION ].split (" " )
633+ blender_version = [int (v ) for v in version_cycle [0 ].split ("." )]
623634 self .importer = Importer (
635+ blender_version = blender_version ,
624636 specific_handlers = parameters .specific_handlers ,
625637 getters = self .getters ,
626638 debug_prints = parameters .debug_prints ,
627639 )
640+ if len (version_cycle ) > 1 :
641+ self .importer .report .warnings .append (
642+ f"This was exported from a Blender { version_cycle [1 ]} version."
643+ )
628644
629645 def step (self ) -> bool :
630646 assert isinstance (self .importer , Importer )
0 commit comments