vregistry.py
branchstable
changeset 2065 f9f4bc048ec5
parent 2035 946ed7349e1a
child 2077 50beca829273
equal deleted inserted replaced
2064:a5cd3a92314a 2065:f9f4bc048ec5
   230 
   230 
   231     def unregister(self, obj, registryname=None):
   231     def unregister(self, obj, registryname=None):
   232         registryname = registryname or obj.__registry__
   232         registryname = registryname or obj.__registry__
   233         registry = self.registry(registryname)
   233         registry = self.registry(registryname)
   234         removed_id = obj.classid()
   234         removed_id = obj.classid()
   235         for registered in registry[obj.id]:
   235         for registered in registry.get(obj.id, ()):
   236             # use classid() to compare classes because vreg will probably
   236             # use classid() to compare classes because vreg will probably
   237             # have its own version of the class, loaded through execfile
   237             # have its own version of the class, loaded through execfile
   238             if registered.classid() == removed_id:
   238             if registered.classid() == removed_id:
   239                 # XXX automatic reloading management
   239                 # XXX automatic reloading management
   240                 try:
   240                 registry[obj.id].remove(registered)
   241                     registry[obj.id].remove(registered)
       
   242                 except KeyError:
       
   243                     self.warning('can\'t remove %s, no id %s in the %s registry',
       
   244                                  removed_id, obj.id, registryname)
       
   245                 except ValueError:
       
   246                     self.warning('can\'t remove %s, not in the %s registry with id %s',
       
   247                                  removed_id, registryname, obj.id)
       
   248 #                 else:
       
   249 #                     # if objects is empty, remove oid from registry
       
   250 #                     if not registry[obj.id]:
       
   251 #                         del regcontent[oid]
       
   252                 break
   241                 break
       
   242         else:
       
   243             self.warning('can\'t remove %s, no id %s in the %s registry',
       
   244                          removed_id, obj.id, registryname)
   253 
   245 
   254     def register_and_replace(self, obj, replaced, registryname=None):
   246     def register_and_replace(self, obj, replaced, registryname=None):
   255         if hasattr(replaced, 'classid'):
   247         if hasattr(replaced, 'classid'):
   256             replaced = replaced.classid()
   248             replaced = replaced.classid()
   257         registryname = registryname or obj.__registry__
   249         registryname = registryname or obj.__registry__