@@ -42,14 +42,16 @@ def read_typetree(self):
42
42
43
43
def deref (self , assetsfile : Optional [SerializedFile ] = None ) -> ObjectReader [T ]:
44
44
assetsfile = assetsfile or self .assetsfile
45
+
45
46
if assetsfile is None :
46
47
raise ValueError ("PPtr can't deref without an assetsfile!" )
47
48
48
49
if self .m_PathID == 0 :
49
50
raise ValueError ("PPtr can't deref with m_PathID == 0!" )
50
51
52
+ assetsfile_dst = None
51
53
if self .m_FileID == 0 :
52
- pass
54
+ assetsfile_dst = assetsfile or self . assetsfile
53
55
else :
54
56
# resolve file id to external name
55
57
external_id = self .m_FileID - 1
@@ -61,9 +63,7 @@ def deref(self, assetsfile: Optional[SerializedFile] = None) -> ObjectReader[T]:
61
63
container = assetsfile .parent
62
64
if container is None :
63
65
# 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!" )
67
67
68
68
external_clean_path = external .path
69
69
if external_clean_path .startswith ("archive:/" ):
@@ -74,26 +74,25 @@ def deref(self, assetsfile: Optional[SerializedFile] = None) -> ObjectReader[T]:
74
74
75
75
for key , file in container .files .items ():
76
76
if key .lower () == external_clean_path :
77
- assetsfile = file
77
+ assetsfile_dst = file
78
78
break
79
79
else :
80
80
env = assetsfile .environment
81
81
cab = env .find_file (external_clean_path )
82
82
if cab :
83
- assetsfile = cab
83
+ assetsfile_dst = cab
84
84
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!" )
88
89
89
- return cast ("ObjectReader[T]" , assetsfile .objects [self .m_PathID ])
90
+ return cast ("ObjectReader[T]" , assetsfile_dst .objects [self .m_PathID ])
90
91
91
92
def deref_parse_as_object (self , assetsfile : Optional [SerializedFile ] = None ) -> T :
92
93
return self .deref (assetsfile ).parse_as_object ()
93
94
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 ]:
97
96
return self .deref (assetsfile ).parse_as_dict ()
98
97
99
98
def __bool__ (self ):
@@ -106,3 +105,8 @@ def __eq__(self, other: object) -> bool:
106
105
if not isinstance (other , PPtr ):
107
106
return False
108
107
return self .m_FileID == other .m_FileID and self .m_PathID == other .m_PathID
108
+
109
+
110
+ __all__ = [
111
+ "PPtr" ,
112
+ ]
0 commit comments