@@ -42,14 +42,16 @@ def read_typetree(self):
4242
4343 def deref (self , assetsfile : Optional [SerializedFile ] = None ) -> ObjectReader [T ]:
4444 assetsfile = assetsfile or self .assetsfile
45+
4546 if assetsfile is None :
4647 raise ValueError ("PPtr can't deref without an assetsfile!" )
4748
4849 if self .m_PathID == 0 :
4950 raise ValueError ("PPtr can't deref with m_PathID == 0!" )
5051
52+ assetsfile_dst = None
5153 if self .m_FileID == 0 :
52- pass
54+ assetsfile_dst = assetsfile or self . assetsfile
5355 else :
5456 # resolve file id to external name
5557 external_id = self .m_FileID - 1
@@ -61,9 +63,7 @@ def deref(self, assetsfile: Optional[SerializedFile] = None) -> ObjectReader[T]:
6163 container = assetsfile .parent
6264 if container is None :
6365 # TODO - use default fs
64- raise FileNotFoundError (
65- f"PPtr points to { external .path } but no container is set!"
66- )
66+ raise FileNotFoundError (f"PPtr points to { external .path } but no container is set!" )
6767
6868 external_clean_path = external .path
6969 if external_clean_path .startswith ("archive:/" ):
@@ -74,26 +74,25 @@ def deref(self, assetsfile: Optional[SerializedFile] = None) -> ObjectReader[T]:
7474
7575 for key , file in container .files .items ():
7676 if key .lower () == external_clean_path :
77- assetsfile = file
77+ assetsfile_dst = file
7878 break
7979 else :
8080 env = assetsfile .environment
8181 cab = env .find_file (external_clean_path )
8282 if cab :
83- assetsfile = cab
83+ assetsfile_dst = cab
8484 else :
85- raise FileNotFoundError (
86- f"Failed to resolve pointer - { external .path } not found!"
87- )
85+ raise FileNotFoundError (f"Failed to resolve pointer - { external .path } not found!" )
86+
87+ if assetsfile_dst is None :
88+ raise FileNotFoundError (f"Failed to resolve pointer - { self .m_FileID } not found!" )
8889
89- return cast ("ObjectReader[T]" , assetsfile .objects [self .m_PathID ])
90+ return cast ("ObjectReader[T]" , assetsfile_dst .objects [self .m_PathID ])
9091
9192 def deref_parse_as_object (self , assetsfile : Optional [SerializedFile ] = None ) -> T :
9293 return self .deref (assetsfile ).parse_as_object ()
9394
94- def deref_parse_as_dict (
95- self , assetsfile : Optional [SerializedFile ] = None
96- ) -> dict [str , Any ]:
95+ def deref_parse_as_dict (self , assetsfile : Optional [SerializedFile ] = None ) -> dict [str , Any ]:
9796 return self .deref (assetsfile ).parse_as_dict ()
9897
9998 def __bool__ (self ):
@@ -106,3 +105,8 @@ def __eq__(self, other: object) -> bool:
106105 if not isinstance (other , PPtr ):
107106 return False
108107 return self .m_FileID == other .m_FileID and self .m_PathID == other .m_PathID
108+
109+
110+ __all__ = [
111+ "PPtr" ,
112+ ]
0 commit comments