Skip to content

Commit dc5332a

Browse files
committed
chore(ruff): apply and enforce EFBI ruff lint styles
1 parent 30ce590 commit dc5332a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+466
-798
lines changed

.editorconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ quote_type = double
1010
insert_final_newline = true
1111
tab_width = 4
1212
trim_trailing_whitespace = true
13+
max_line_length = 120
1314

1415
[*.py]
1516
spaces_around_brackets = none

.github/workflows/test.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,13 @@ jobs:
2525
- name: Install
2626
run: pip install .[tests]
2727

28+
- uses: astral-sh/ruff-action@v3
29+
30+
- name: Check code (ruff check)
31+
run: ruff check
32+
33+
- name: Check code style (ruff format)
34+
run: ruff format --check
35+
2836
- name: Run tests
2937
run: python -m pytest -vs ./tests

UnityPy/UnityPyBoost.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Any, List, Optional, Union
3+
from typing import TYPE_CHECKING, Any, List, Literal, Optional, Union
44

55
if TYPE_CHECKING:
66
from .classes import Object
@@ -19,7 +19,7 @@ def unpack_vertexdata(
1919
def read_typetree(
2020
data: Union[bytes, bytearray],
2121
node: TypeTreeNode,
22-
endian: Union["<", ">"],
22+
endian: Literal["<", ">"],
2323
as_dict: bool,
2424
assetsfile: SerializedFile,
2525
classes: dict,

UnityPy/classes/Object.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ def save(self) -> None:
3131
raise ValueError("ObjectReader not set")
3232

3333
self.object_reader.save_typetree(self)
34+
35+
36+
__all__ = [
37+
"Object",
38+
]

UnityPy/classes/PPtr.py

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
]

UnityPy/classes/UnknownObject.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class UnknownObject(Object):
99

1010
__node__: Optional[TypeTreeNode]
1111

12-
def __init__(self, __node__: TypeTreeNode = None, **kwargs):
12+
def __init__(self, __node__: Optional[TypeTreeNode] = None, **kwargs):
1313
self.__node__ = __node__
1414
self.__dict__.update(**kwargs)
1515

@@ -23,10 +23,11 @@ def format_value(v):
2323
return vstr[:97] + "..."
2424
return vstr
2525

26-
inner_str = ", ".join(
27-
f"{k}={format_value(v)}"
28-
for k, v in self.__dict__.items()
29-
if k != "__node__"
30-
)
26+
inner_str = ", ".join(f"{k}={format_value(v)}" for k, v in self.__dict__.items() if k != "__node__")
3127

3228
return f"<UnknownObject<{self.get_type()}> {inner_str}>"
29+
30+
31+
__all__ = [
32+
"UnknownObject",
33+
]

UnityPy/classes/__init__.py

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,28 @@
1-
from .generated import *
2-
from .legacy_patch import *
1+
from .generated import * # noqa: F403
2+
from .legacy_patch import (
3+
AudioClip as AudioClip,
4+
)
5+
from .legacy_patch import (
6+
GameObject as GameObject,
7+
)
8+
from .legacy_patch import (
9+
Mesh as Mesh,
10+
)
11+
from .legacy_patch import (
12+
Renderer as Renderer,
13+
)
14+
from .legacy_patch import (
15+
Shader as Shader,
16+
)
17+
from .legacy_patch import (
18+
Sprite as Sprite,
19+
)
20+
from .legacy_patch import (
21+
Texture2D as Texture2D,
22+
)
23+
from .legacy_patch import (
24+
Texture2DArray as Texture2DArray,
25+
)
326
from .Object import Object as Object
427
from .PPtr import PPtr as PPtr
528
from .UnknownObject import UnknownObject as UnknownObject

UnityPy/classes/legacy_patch/GameObject.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,11 @@ def _GameObject_GetComponent(self, type: ClassIDType) -> Union[PPtr[Component],
2323

2424

2525
GameObject.m_Components = property(_GameObject_Components)
26-
GameObject.m_Animator = property(
27-
lambda self: _GameObject_GetComponent(self, ClassIDType.Animator)
28-
)
29-
GameObject.m_Animation = property(
30-
lambda self: _GameObject_GetComponent(self, ClassIDType.Animation)
31-
)
32-
GameObject.m_Transform = property(
33-
lambda self: _GameObject_GetComponent(self, ClassIDType.Transform)
34-
)
35-
GameObject.m_MeshRenderer = property(
36-
lambda self: _GameObject_GetComponent(self, ClassIDType.MeshRenderer)
37-
)
26+
GameObject.m_Animator = property(lambda self: _GameObject_GetComponent(self, ClassIDType.Animator))
27+
GameObject.m_Animation = property(lambda self: _GameObject_GetComponent(self, ClassIDType.Animation))
28+
GameObject.m_Transform = property(lambda self: _GameObject_GetComponent(self, ClassIDType.Transform))
29+
GameObject.m_MeshRenderer = property(lambda self: _GameObject_GetComponent(self, ClassIDType.MeshRenderer))
3830
GameObject.m_SkinnedMeshRenderer = property(
3931
lambda self: _GameObject_GetComponent(self, ClassIDType.SkinnedMeshRenderer)
4032
)
41-
GameObject.m_MeshFilter = property(
42-
lambda self: _GameObject_GetComponent(self, ClassIDType.MeshFilter)
43-
)
33+
GameObject.m_MeshFilter = property(lambda self: _GameObject_GetComponent(self, ClassIDType.MeshFilter))

UnityPy/classes/legacy_patch/Texture2D.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ def _Texture2d_set_image(
2626
img = Image.open(img)
2727

2828
platform = self.object_reader.platform if self.object_reader is not None else 0
29-
img_data, tex_format = Texture2DConverter.image_to_texture2d(
30-
img, target_format, platform, self.m_PlatformBlob
31-
)
29+
img_data, tex_format = Texture2DConverter.image_to_texture2d(img, target_format, platform, self.m_PlatformBlob)
3230
self.m_Width = img.width
3331
self.m_Height = img.height
3432

@@ -42,7 +40,7 @@ def _Texture2d_set_image(
4240
if width < 4 or height < 4:
4341
mipmap_count = i + 1
4442
break
45-
re_img = re_img.resize((width, height), Image.BICUBIC)
43+
re_img = re_img.resize((width, height), Image.Resampling.BICUBIC)
4644
img_data += Texture2DConverter.image_to_texture2d(re_img, target_format)[0]
4745

4846
# disable mipmaps as we don't store them ourselves by default
@@ -53,9 +51,7 @@ def _Texture2d_set_image(
5351

5452
self.image_data = img_data
5553
# width * height * channel count
56-
self.m_CompleteImageSize = len(
57-
img_data
58-
) # img.width * img.height * len(img.getbands())
54+
self.m_CompleteImageSize = len(img_data) # img.width * img.height * len(img.getbands())
5955
self.m_TextureFormat = tex_format
6056

6157
if self.m_StreamData is not None:

UnityPy/classes/legacy_patch/Texture2DArray.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from __future__ import annotations
2+
23
from typing import TYPE_CHECKING, List
34

45
from ...enums.GraphicsFormat import GRAPHICS_TO_TEXTURE_MAP, GraphicsFormat

0 commit comments

Comments
 (0)