13
13
from ..pyutils .enum import Enum as PyEnum
14
14
15
15
16
+ def eq_enum (self , other ):
17
+ if isinstance (other , self .__class__ ):
18
+ return self is other
19
+ return self .value is other
20
+
21
+
16
22
class EnumTypeMeta (type ):
17
23
18
24
def __new__ (cls , name , bases , attrs ):
@@ -28,6 +34,7 @@ def __new__(cls, name, bases, attrs):
28
34
enum = None ,
29
35
)
30
36
if not options .enum :
37
+ attrs ['__eq__' ] = eq_enum
31
38
options .enum = PyEnum (cls .__name__ , attrs )
32
39
33
40
new_attrs = OrderedDict (attrs , _meta = options , ** options .enum .__members__ )
@@ -36,11 +43,18 @@ def __new__(cls, name, bases, attrs):
36
43
def __prepare__ (name , bases , ** kwargs ): # noqa: N805
37
44
return OrderedDict ()
38
45
46
+ def get (cls , value ):
47
+ return cls ._meta .enum (value )
48
+
49
+ def __getitem__ (cls , value ):
50
+ return cls ._meta .enum [value ]
51
+
39
52
def __call__ (cls , * args , ** kwargs ): # noqa: N805
40
53
if cls is Enum :
41
54
description = kwargs .pop ('description' , None )
42
55
return cls .from_enum (PyEnum (* args , ** kwargs ), description = description )
43
56
return super (EnumTypeMeta , cls ).__call__ (* args , ** kwargs )
57
+ # return cls._meta.enum(*args, **kwargs)
44
58
45
59
def from_enum (cls , enum , description = None ): # noqa: N805
46
60
meta_class = type ('Meta' , (object ,), {'enum' : enum , 'description' : description })
0 commit comments