235 objects = self[registry][cid] |
235 objects = self[registry][cid] |
236 assert len(objects) == 1, objects |
236 assert len(objects) == 1, objects |
237 return objects[0].selected(*args, **kwargs) |
237 return objects[0].selected(*args, **kwargs) |
238 |
238 |
239 # methods for explicit (un)registration ################################### |
239 # methods for explicit (un)registration ################################### |
240 |
240 |
241 def register(self, obj, registryname=None, oid=None): |
241 # def clear(self, key): |
|
242 # regname, oid = key.split('.') |
|
243 # self[regname].pop(oid, None) |
|
244 |
|
245 def register(self, obj, registryname=None, oid=None, clear=False): |
242 """base method to add an object in the registry""" |
246 """base method to add an object in the registry""" |
243 registryname = registryname or obj.__registry__ |
247 registryname = registryname or obj.__registry__ |
244 oid = oid or obj.id |
248 oid = oid or obj.id |
245 registry = self._registries.setdefault(registryname, {}) |
249 registry = self._registries.setdefault(registryname, {}) |
246 vobjects = registry.setdefault(oid, []) |
250 if clear: |
|
251 vobjects = registry[oid] = [] |
|
252 else: |
|
253 vobjects = registry.setdefault(oid, []) |
247 # registered() is technically a classmethod but is not declared |
254 # registered() is technically a classmethod but is not declared |
248 # as such because we need to compose registered in some cases |
255 # as such because we need to compose registered in some cases |
249 vobject = obj.registered.im_func(cls, self) |
256 vobject = obj.registered.im_func(cls, self) |
250 assert not vobject in vobjects |
257 assert not vobject in vobjects |
251 vobjects.append(vobject) |
258 vobjects.append(vobject) |
424 _lastmodifs[filepath] = modified_on |
431 _lastmodifs[filepath] = modified_on |
425 return True |
432 return True |
426 |
433 |
427 def load_module(self, module): |
434 def load_module(self, module): |
428 self._registered = {} |
435 self._registered = {} |
429 if hasattr(module, 'cw_register_objects'): |
436 if hasattr(module, 'registration_callback'): |
430 module.cw_register_objects(self) |
437 module.registration_callback(self) |
431 else: |
438 else: |
432 self.info('loading %s', module) |
439 self.info('loading %s', module) |
433 for objname, obj in vars(module).items(): |
440 for objname, obj in vars(module).items(): |
434 if objname.startswith('_'): |
441 if objname.startswith('_'): |
435 continue |
442 continue |