Skip to content

Commit da1a5ac

Browse files
committed
fix(files): overall type hint corrections
1 parent f3bf912 commit da1a5ac

File tree

5 files changed

+33
-24
lines changed

5 files changed

+33
-24
lines changed

UnityPy/files/BundleFile.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# TODO: implement encryption for saving files
22
from collections import namedtuple
33
import re
4-
from typing import Tuple, Union
4+
from typing import Optional, Tuple, Union
55

66
from . import File
77
from ..enums import ArchiveFlags, ArchiveFlagsOld, CompressionFlags
@@ -21,12 +21,12 @@ class BundleFile(File.File):
2121
signature: str
2222
version_engine: str
2323
version_player: str
24-
dataflags: Tuple[ArchiveFlags, ArchiveFlagsOld]
25-
decryptor: ArchiveStorageManager.ArchiveStorageDecryptor = None
24+
dataflags: Union[ArchiveFlags, ArchiveFlagsOld]
25+
decryptor: Optional[ArchiveStorageManager.ArchiveStorageDecryptor] = None
2626
_uses_block_alignment: bool = False
2727

2828
def __init__(
29-
self, reader: EndianBinaryReader, parent: File, name: str = None, **kwargs
29+
self, reader: EndianBinaryReader, parent: File, name: Optional[str] = None, **kwargs
3030
):
3131
super().__init__(parent=parent, name=name, **kwargs)
3232
signature = self.signature = reader.read_string_to_null()
@@ -92,7 +92,7 @@ def read_fs(self, reader: EndianBinaryReader):
9292
# header
9393
compressedSize = reader.read_u_int()
9494
uncompressedSize = reader.read_u_int()
95-
self.dataflags = reader.read_u_int()
95+
dataflagsValue = reader.read_u_int()
9696

9797
version = self.get_version_tuple()
9898
# https://issuetracker.unity3d.com/issues/files-within-assetbundles-do-not-start-on-aligned-boundaries-breaking-patching-on-nintendo-switch
@@ -105,9 +105,9 @@ def read_fs(self, reader: EndianBinaryReader):
105105
or (version[0] == 2021 and version < (2021, 3, 2))
106106
or (version[0] == 2022 and version < (2022, 1, 1))
107107
):
108-
self.dataflags = ArchiveFlagsOld(self.dataflags)
108+
self.dataflags = ArchiveFlagsOld(dataflagsValue)
109109
else:
110-
self.dataflags = ArchiveFlags(self.dataflags)
110+
self.dataflags = ArchiveFlags(dataflagsValue)
111111

112112
if self.dataflags & self.dataflags.UsesAssetBundleEncryption:
113113
self.decryptor = ArchiveStorageManager.ArchiveStorageDecryptor(reader)
@@ -523,6 +523,14 @@ def decompress_data(
523523
def get_version_tuple(self) -> Tuple[int, int, int]:
524524
"""Returns the version as a tuple."""
525525
version = self.version_engine
526-
if not version or version == "0.0.0":
527-
version = config.get_fallback_version()
528-
return tuple(map(int, reVersion.match(version).groups()))
526+
match = None
527+
if version and version != "0.0.0":
528+
match = reVersion.match(version)
529+
if not match or len(match.groups()) < 3:
530+
match = None
531+
if not match:
532+
match = reVersion.match(config.get_fallback_version())
533+
if not match or len(match.groups()) < 3:
534+
raise ValueError("Illegal fallback version format")
535+
map_ = map(int, match.groups())
536+
return (next(map_), next(map_), next(map_))

UnityPy/files/File.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def read_files(self, reader: EndianBinaryReader, files: list):
9595
f.flags = getattr(node, "flags", 0)
9696
self.files[name] = f
9797

98-
def get_writeable_cab(self, name: str = None):
98+
def get_writeable_cab(self, name: Optional[str] = None):
9999
"""
100100
Creates a new cab file in the bundle that contains the given data.
101101
This is useful for asset types that use resource files.

UnityPy/files/ObjectReader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ def save_typetree(
256256
self,
257257
tree: dict,
258258
nodes: Optional[Union[TypeTreeNode, List[dict[str, Union[str, int]]]]] = None,
259-
writer: EndianBinaryWriter = None,
259+
writer: Optional[EndianBinaryWriter] = None,
260260
):
261261
node = self._get_typetree_node(nodes)
262262
if not writer:

UnityPy/files/SerializedFile.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
from __future__ import annotations
1+
from __future__ import annotations
22

33
import re
44
from ntpath import basename
5-
from typing import TYPE_CHECKING, Dict, Generator, List, Optional, Tuple, Union
5+
from typing import TYPE_CHECKING, Dict, Generator, Iterator, List, Optional, Tuple
66

77
from attrs import define
88

@@ -24,7 +24,7 @@ class SerializedFileHeader:
2424
file_size: int
2525
version: int
2626
data_offset: int
27-
endian: bytes
27+
endian: str
2828
reserved: bytes
2929

3030
def __init__(self, reader: EndianBinaryReader):
@@ -115,7 +115,7 @@ def IsPatch(self):
115115
class SerializedType:
116116
class_id: int
117117
is_stripped_type: Optional[bool] = None
118-
script_type_index: Optional[int] = -1
118+
script_type_index: int = -1
119119
script_id: Optional[bytes] = None # Hash128
120120
old_type_hash: Optional[bytes] = None # Hash128
121121
node: Optional[TypeTreeNode] = None
@@ -124,7 +124,7 @@ class SerializedType:
124124
m_NameSpace: Optional[str] = None
125125
m_AssemblyName: Optional[str] = None
126126
# 21+
127-
type_dependencies: Optional[List[int]] = None
127+
type_dependencies: Optional[Tuple[int, ...]] = None
128128

129129
def __init__(
130130
self,
@@ -215,7 +215,7 @@ def write(
215215
writer.write_int_array(self.type_dependencies, True)
216216

217217
@property
218-
def nodes(self) -> Union[TypeTreeNode, None]:
218+
def nodes(self) -> Optional[TypeTreeNode]:
219219
# for compatibility with old versions
220220
return self.node
221221

@@ -236,8 +236,7 @@ class SerializedFile(File.File):
236236
_m_target_platform: int
237237
big_id_enabled: int
238238
userInformation: Optional[str]
239-
assetbundle: AssetBundle
240-
container: ContainerHelper
239+
assetbundle: Optional[AssetBundle]
241240
_cache: Dict[str, Object]
242241

243242
@property
@@ -414,7 +413,7 @@ class FileIdentifierFake:
414413

415414
return cab
416415

417-
def save(self, packer: str = None) -> bytes:
416+
def save(self, packer: Optional[str] = None) -> bytes:
418417
# 1. header -> has to be delayed until the very end
419418
# 2. data -> types, objects, scripts, ...
420419

@@ -567,7 +566,7 @@ def __setitem__(self, key, value) -> None:
567566
def __delitem__(self, key) -> None:
568567
raise NotImplementedError("Deleting from the container is not allowed!")
569568

570-
def __iter__(self) -> Generator[str, None, None]:
569+
def __iter__(self) -> Iterator[str]:
571570
return iter(self.keys())
572571

573572
def __len__(self) -> int:

UnityPy/files/WebFile.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from . import File
1+
from typing import Optional
2+
3+
from . import File
24
from ..helpers import CompressionHelper
35
from ..streams import EndianBinaryReader, EndianBinaryWriter
46

@@ -55,7 +57,7 @@ def __init__(self, reader: EndianBinaryReader, parent: File, name=None, **kwargs
5557

5658
def save(
5759
self,
58-
files: dict = None,
60+
files: Optional[dict] = None,
5961
packer: str = "none",
6062
signature: str = "UnityWebData1.0",
6163
) -> bytes:

0 commit comments

Comments
 (0)