@@ -41,15 +41,15 @@ def read_typetree(self):
4141 return self .deref_parse_as_dict ()
4242
4343 def deref (self , assetsfile : Optional [SerializedFile ] = None ) -> ObjectReader [T ]:
44- assetsfile = assetsfile or self .assetsfile
4544 if assetsfile is None :
4645 raise ValueError ("PPtr can't deref without an assetsfile!" )
4746
4847 if self .m_PathID == 0 :
4948 raise ValueError ("PPtr can't deref with m_PathID == 0!" )
5049
50+ assetsfile_dst = None
5151 if self .m_FileID == 0 :
52- pass
52+ assetsfile_dst = assetsfile or self . assetsfile
5353 else :
5454 # resolve file id to external name
5555 external_id = self .m_FileID - 1
@@ -61,9 +61,7 @@ def deref(self, assetsfile: Optional[SerializedFile] = None) -> ObjectReader[T]:
6161 container = assetsfile .parent
6262 if container is None :
6363 # TODO - use default fs
64- raise FileNotFoundError (
65- f"PPtr points to { external .path } but no container is set!"
66- )
64+ raise FileNotFoundError (f"PPtr points to { external .path } but no container is set!" )
6765
6866 external_clean_path = external .path
6967 if external_clean_path .startswith ("archive:/" ):
@@ -74,26 +72,25 @@ def deref(self, assetsfile: Optional[SerializedFile] = None) -> ObjectReader[T]:
7472
7573 for key , file in container .files .items ():
7674 if key .lower () == external_clean_path :
77- assetsfile = file
75+ assetsfile_dst = file
7876 break
7977 else :
8078 env = assetsfile .environment
8179 cab = env .find_file (external_clean_path )
8280 if cab :
83- assetsfile = cab
81+ assetsfile_dst = cab
8482 else :
85- raise FileNotFoundError (
86- f"Failed to resolve pointer - { external .path } not found!"
87- )
83+ raise FileNotFoundError (f"Failed to resolve pointer - { external .path } not found!" )
8884
89- return cast ("ObjectReader[T]" , assetsfile .objects [self .m_PathID ])
85+ if assetsfile_dst is None :
86+ raise FileNotFoundError (f"Failed to resolve pointer - { self .m_FileID } not found!" )
87+
88+ return cast ("ObjectReader[T]" , assetsfile_dst .objects [self .m_PathID ])
9089
9190 def deref_parse_as_object (self , assetsfile : Optional [SerializedFile ] = None ) -> T :
9291 return self .deref (assetsfile ).parse_as_object ()
9392
94- def deref_parse_as_dict (
95- self , assetsfile : Optional [SerializedFile ] = None
96- ) -> dict [str , Any ]:
93+ def deref_parse_as_dict (self , assetsfile : Optional [SerializedFile ] = None ) -> dict [str , Any ]:
9794 return self .deref (assetsfile ).parse_as_dict ()
9895
9996 def __bool__ (self ):
@@ -106,3 +103,8 @@ def __eq__(self, other: object) -> bool:
106103 if not isinstance (other , PPtr ):
107104 return False
108105 return self .m_FileID == other .m_FileID and self .m_PathID == other .m_PathID
106+
107+
108+ __all__ = [
109+ "PPtr" ,
110+ ]
0 commit comments