24
24
from __future__ import annotations
25
25
26
26
import random
27
+ import sys
27
28
import typing as t
28
29
from enum import Enum
30
+ from enum import EnumMeta
29
31
30
32
T = t .TypeVar ("T" , bound = "BaseEnum" )
31
33
40
42
)
41
43
42
44
43
- class BaseEnum (Enum ):
45
+ class MetaEnum (EnumMeta ):
46
+ def __getitem__ (cls : MetaEnum , name : str ) -> t .Any :
47
+ try :
48
+ return super ().__getitem__ (name )
49
+ except KeyError :
50
+ print (
51
+ f"{ name !r} is not a valid { cls .__name__ } variant. "
52
+ "Please report this issue on github at https://github.com/Jonxslays/wom.py/issues/new" ,
53
+ file = sys .stderr ,
54
+ )
55
+ return cls .__getitem__ ("Unknown" )
56
+
57
+
58
+ class BaseEnum (Enum , metaclass = MetaEnum ):
44
59
"""The base enum all library enums inherit from."""
45
60
46
61
def __str__ (self ) -> str :
@@ -77,6 +92,9 @@ class Period(BaseEnum):
77
92
Month = "month"
78
93
Year = "year"
79
94
95
+ # Unknown metric
96
+ Unknown = "unknown"
97
+
80
98
81
99
class Metric (BaseEnum ):
82
100
"""Represents all metrics including skills, bosses, activities, and
@@ -198,6 +216,9 @@ class Metric(BaseEnum):
198
216
Ehp = "ehp"
199
217
Ehb = "ehb"
200
218
219
+ # Unknown Metric
220
+ Unknown = "unknown"
221
+
201
222
202
223
ComputedMetrics : t .FrozenSet [Metric ] = frozenset ({Metric .Ehp , Metric .Ehb })
203
224
"""Set containing all the types of computed metrics."""
@@ -228,6 +249,7 @@ class Metric(BaseEnum):
228
249
Metric .Runecrafting ,
229
250
Metric .Hunter ,
230
251
Metric .Construction ,
252
+ Metric .Unknown ,
231
253
}
232
254
)
233
255
"""Set containing skills."""
@@ -250,6 +272,7 @@ class Metric(BaseEnum):
250
272
Metric .PvpArena ,
251
273
Metric .SoulWarsZeal ,
252
274
Metric .GuardiansOfTheRift ,
275
+ Metric .Unknown ,
253
276
}
254
277
)
255
278
"""Set containing activities."""
@@ -321,6 +344,7 @@ class Metric(BaseEnum):
321
344
Metric .Wintertodt ,
322
345
Metric .Zalcano ,
323
346
Metric .Zulrah ,
347
+ Metric .Unknown ,
324
348
}
325
349
)
326
350
"""Set containing bosses."""
0 commit comments