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__ |