vregistry.py
branchtls-sprint
changeset 668 61b2328f9ed9
parent 665 1305da1ce3f9
child 673 64c50cb17d70
equal deleted inserted replaced
667:15fe1d3694d1 668:61b2328f9ed9
   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