@@ -30,6 +30,7 @@ def __init_subclass__(cls, **kwargs):
30
30
return
31
31
32
32
cls ._name = getattr (cls , '__NAME__' , cls .__name__ )
33
+ cls ._cname = getattr (cls , '__COLLECTION_NAME__' , '' )
33
34
cls ._id = None
34
35
cls ._memberclass = type (f'{ cls ._name } Member' , (EnumMember , cls ), {})
35
36
@@ -40,28 +41,33 @@ def __init_subclass__(cls, **kwargs):
40
41
setattr (cls , k , cls ._memberclass (cls ._name , k , v ))
41
42
42
43
# register for lookup by name
43
- _enums_lookup [cls ._name ] = cls
44
+ _enums_lookup [cls ._cname + cls . _name ] = cls
44
45
45
46
@staticmethod
46
- def _update_enum (enums , data , convert ):
47
+ def _update_enum (cname , enums , data , convert ):
47
48
name = data ['name' ]
48
- enum = _enums_lookup .get (name )
49
+ enum = _enums_lookup .get (name , _enums_lookup .get (cname + name ))
50
+ if enum and enum ._cname and enum ._cname != cname :
51
+ raise TypeError (
52
+ f'Enum type { name } is used in more than one collection; '
53
+ 'Add __COLLECTION_NAME__ to your Enum definition to fix '
54
+ 'this error' )
49
55
cls = EnumMember if enum is None else enum ._memberclass
50
56
51
57
members = [cls (name , k , convert (v )) for k , v in data ['members' ]]
52
58
53
59
if enum is not None :
60
+ enum ._cname = cname
54
61
enum ._id = data ['enum_id' ]
55
62
for member in members :
56
63
setattr (enum , member .name , member )
57
64
58
- enums [data ['enum_id' ]] = members
65
+ enums [data ['enum_id' ]] = members , enum
59
66
60
67
@staticmethod
61
68
def _upd_enum_add (enums , data , convert ):
62
- members = enums [data ['enum_id' ]]
69
+ members , enum = enums [data ['enum_id' ]]
63
70
name = members [0 ]._enum_name
64
- enum = _enums_lookup .get (name )
65
71
cls = EnumMember if enum is None else enum ._memberclass
66
72
67
73
member = cls (name , data ['name' ], convert (data ['value' ]))
@@ -72,10 +78,8 @@ def _upd_enum_add(enums, data, convert):
72
78
73
79
@staticmethod
74
80
def _upd_enum_del (enums , data ):
75
- members = enums [data ['enum_id' ]]
76
- name = members [0 ]._enum_name
81
+ members , enum = enums [data ['enum_id' ]]
77
82
78
- enum = _enums_lookup .get (name )
79
83
if enum is not None :
80
84
member = members [data ['index' ]]
81
85
delattr (enum , member .name )
@@ -88,7 +92,7 @@ def _upd_enum_del(enums, data):
88
92
89
93
@staticmethod
90
94
def _upd_enum_def (enums , data ):
91
- members = enums [data ['enum_id' ]]
95
+ members , _ = enums [data ['enum_id' ]]
92
96
# swap index
93
97
idx = data ['index' ]
94
98
tmp = members [idx ]
@@ -97,18 +101,16 @@ def _upd_enum_def(enums, data):
97
101
98
102
@staticmethod
99
103
def _upd_enum_mod (enums , data , convert ):
100
- members = enums [data ['enum_id' ]]
104
+ members , _ = enums [data ['enum_id' ]]
101
105
name = members [0 ]._enum_name
102
106
member = members [data ['index' ]]
103
107
member ._value = convert (data ['value' ])
104
108
105
109
@staticmethod
106
110
def _upd_enum_ren (enums , data ):
107
- members = enums [data ['enum_id' ]]
108
- name = members [0 ]._enum_name
111
+ members , enum = enums [data ['enum_id' ]]
109
112
member = members [data ['index' ]]
110
113
111
- enum = _enums_lookup .get (name )
112
114
if enum is not None :
113
115
delattr (enum , member .name )
114
116
setattr (enum , data ['name' ], member )
0 commit comments