Skip to content

Commit 83fb5f9

Browse files
author
Jeroen van der Heijden
committed
Added optional __COLLECTION_NAME__ argument and attach enum to collection
1 parent 6e7d3c7 commit 83fb5f9

File tree

4 files changed

+25
-23
lines changed

4 files changed

+25
-23
lines changed

thingsdb/model/collection.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,10 @@ def _upd_type_ren(self, data):
165165
self._types[type_id] = tuple(t)
166166

167167
def _update_enum(self, data):
168-
Enum._update_enum(self._enums, data, convert=self._conv_any)
168+
Enum._update_enum(self._name, self._enums, data, self._conv_any)
169169

170170
def _upd_enum_add(self, data):
171-
Enum._upd_enum_add(self._enums, data, convert=self._conv_any)
171+
Enum._upd_enum_add(self._enums, data, self._conv_any)
172172

173173
def _upd_enum_def(self, data):
174174
Enum._upd_enum_def(self._enums, data)
@@ -177,11 +177,11 @@ def _upd_enum_del(self, data):
177177
Enum._upd_enum_del(self._enums, data)
178178

179179
def _upd_enum_mod(self, data):
180-
Enum._upd_enum_mod(self._enums, data, convert=self._conv_any)
180+
Enum._upd_enum_mod(self._enums, data, self._conv_any)
181181

182182
def _upd_enum_ren(self, data):
183183
Enum._upd_enum_ren(self._enums, data)
184184

185185
def _get_enum_member(self, enum_id, idx):
186-
enum = self._enums[enum_id]
187-
return enum[idx]
186+
members, _ = self._enums[enum_id]
187+
return members[idx]

thingsdb/model/emitter.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class Emitter(Events):
88

99
_ev_handlers = dict()
1010

11-
def __init__(self, client: Client, emitter: str, scope=None):
11+
def __init__(self, client: Client, emitter: str = '', scope: str = None):
1212
super().__init__()
1313
self._event_id = 0
1414
self._client = client
@@ -41,7 +41,7 @@ def on_node_status(self, _status):
4141
def on_warning(self, warn):
4242
logging.warning(f'{warn["warn_msg"]} ({warn["warn_code"]})')
4343

44-
def on_watch_init(self, data):
44+
def on_watch_init(self, _data):
4545
pass
4646

4747
def on_event(self, ev, *args):
@@ -57,7 +57,7 @@ def on_watch_update(self, data):
5757
if thing_id != self._thing_id:
5858
return
5959

60-
event_id, jobs = data['event'], data.pop('jobs')
60+
event_id, jobs = data['event'], data['jobs']
6161

6262
if self._event_id > event_id:
6363
logging.warning(

thingsdb/model/enum.py

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def __init_subclass__(cls, **kwargs):
3030
return
3131

3232
cls._name = getattr(cls, '__NAME__', cls.__name__)
33+
cls._cname = getattr(cls, '__COLLECTION_NAME__', '')
3334
cls._id = None
3435
cls._memberclass = type(f'{cls._name}Member', (EnumMember, cls), {})
3536

@@ -40,28 +41,33 @@ def __init_subclass__(cls, **kwargs):
4041
setattr(cls, k, cls._memberclass(cls._name, k, v))
4142

4243
# register for lookup by name
43-
_enums_lookup[cls._name] = cls
44+
_enums_lookup[cls._cname + cls._name] = cls
4445

4546
@staticmethod
46-
def _update_enum(enums, data, convert):
47+
def _update_enum(cname, enums, data, convert):
4748
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')
4955
cls = EnumMember if enum is None else enum._memberclass
5056

5157
members = [cls(name, k, convert(v)) for k, v in data['members']]
5258

5359
if enum is not None:
60+
enum._cname = cname
5461
enum._id = data['enum_id']
5562
for member in members:
5663
setattr(enum, member.name, member)
5764

58-
enums[data['enum_id']] = members
65+
enums[data['enum_id']] = members, enum
5966

6067
@staticmethod
6168
def _upd_enum_add(enums, data, convert):
62-
members = enums[data['enum_id']]
69+
members, enum = enums[data['enum_id']]
6370
name = members[0]._enum_name
64-
enum = _enums_lookup.get(name)
6571
cls = EnumMember if enum is None else enum._memberclass
6672

6773
member = cls(name, data['name'], convert(data['value']))
@@ -72,10 +78,8 @@ def _upd_enum_add(enums, data, convert):
7278

7379
@staticmethod
7480
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']]
7782

78-
enum = _enums_lookup.get(name)
7983
if enum is not None:
8084
member = members[data['index']]
8185
delattr(enum, member.name)
@@ -88,7 +92,7 @@ def _upd_enum_del(enums, data):
8892

8993
@staticmethod
9094
def _upd_enum_def(enums, data):
91-
members = enums[data['enum_id']]
95+
members, _ = enums[data['enum_id']]
9296
# swap index
9397
idx = data['index']
9498
tmp = members[idx]
@@ -97,18 +101,16 @@ def _upd_enum_def(enums, data):
97101

98102
@staticmethod
99103
def _upd_enum_mod(enums, data, convert):
100-
members = enums[data['enum_id']]
104+
members, _ = enums[data['enum_id']]
101105
name = members[0]._enum_name
102106
member = members[data['index']]
103107
member._value = convert(data['value'])
104108

105109
@staticmethod
106110
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']]
109112
member = members[data['index']]
110113

111-
enum = _enums_lookup.get(name)
112114
if enum is not None:
113115
delattr(enum, member.name)
114116
setattr(enum, data['name'], member)

thingsdb/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '0.6.8'
1+
__version__ = '0.6.9'

0 commit comments

Comments
 (0)