Skip to content

Commit 612cce4

Browse files
committed
implement an ExtendableEnum class to support unknown values
fixes K0lb3#67 , fixes K0lb3#71
1 parent 33a564d commit 612cce4

4 files changed

Lines changed: 24 additions & 34 deletions

File tree

UnityPy/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__version__ = "1.7.19"
1+
__version__ = "1.7.20"
22

33
from .environment import Environment
44

UnityPy/enums/BuildTarget.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from enum import IntEnum
1+
from .ExtendableEnum import ExtendableEnum
22

33

4-
class BuildTarget(IntEnum):
4+
class BuildTarget(ExtendableEnum):
55
UnknownPlatform = 3716
66
DashboardWidget = 1
77
StandaloneOSX = 2
@@ -38,13 +38,3 @@ class BuildTarget(IntEnum):
3838
tvOS = 37
3939
Switch = 38
4040
NoTarget = -2
41-
42-
@classmethod
43-
def _missing_(cls, value):
44-
ret = BuildTarget.UnknownPlatform
45-
ret._value = value
46-
return ret
47-
48-
@property
49-
def value(self):
50-
return getattr(self, "_value", self._value_)

UnityPy/enums/ClassIDType.py

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# https://docs.unity3d.com/Manual/ClassIDReference.html
2-
from enum import IntEnum
2+
from .ExtendableEnum import ExtendableEnum
33

44

5-
class ClassIDType(IntEnum):
5+
class ClassIDType(ExtendableEnum):
66
UnknownType = -1
77
Object = 0
88
GameObject = 1
@@ -371,22 +371,3 @@ class ClassIDType(IntEnum):
371371
VisualEffect = 2083052967
372372
LocalizationAsset = 2083778819
373373
ScriptedImporter = 2089858483
374-
375-
def __str__(self):
376-
return self.name
377-
378-
def __eq__(self, value):
379-
if isinstance(value, str):
380-
return self.name == value
381-
else:
382-
return self.value == value
383-
384-
@classmethod
385-
def _missing_(cls, value):
386-
ret = ClassIDType.UnknownType
387-
ret._value = value
388-
return ret
389-
390-
@property
391-
def value(self):
392-
return getattr(self, "_value", self._value_)

UnityPy/enums/ExtendableEnum.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
from enum import IntEnum
2+
3+
# based on https://stackoverflow.com/a/57179436
4+
5+
6+
class ExtendableEnum(IntEnum):
7+
@classmethod
8+
def _missing_(cls, value):
9+
if isinstance(value, int):
10+
pseudo_member = cls._value2member_map_.get(value, None)
11+
if pseudo_member is None:
12+
new_member = int.__new__(cls, value)
13+
# I expect a name attribute to hold a string, hence str(value)
14+
# However, new_member._name_ = value works, too
15+
new_member._name_ = f"Unknown ({value})"
16+
new_member._value_ = value
17+
pseudo_member = cls._value2member_map_.setdefault(value, new_member)
18+
return pseudo_member
19+
return None # will raise the ValueError in Enum.__new__

0 commit comments

Comments
 (0)