diff -r 306fe72bfd07 -r 054a8805da52 vregistry.py --- a/vregistry.py Thu Aug 13 13:06:10 2009 +0200 +++ b/vregistry.py Thu Aug 13 13:07:21 2009 +0200 @@ -58,6 +58,16 @@ """returns a unique identifier for an appobject class""" return '%s.%s' % (cls.__module__, cls.__name__) +def class_regid(cls): + """returns a unique identifier for an appobject class""" + if 'id' in cls.__dict__: + warn('%s: id is deprecated, use __id__') + cls.__id__ = cls.id + if hasattr(cls, 'id'): + return cls.id + return cls.__id__ + + class Registry(dict): def __init__(self, config): @@ -76,7 +86,7 @@ def register(self, obj, oid=None, clear=False): """base method to add an object in the registry""" assert not '__abstract__' in obj.__dict__ - oid = oid or obj.id + oid = oid or class_regid(obj) assert oid if clear: appobjects = self[oid] = [] @@ -94,7 +104,7 @@ # or simplify by calling unregister then register here if not isinstance(replaced, basestring): replaced = classid(replaced) - registered_objs = self.get(obj.id, ()) + registered_objs = self.get(class_regid(obj), ()) for index, registered in enumerate(registered_objs): if classid(registered) == replaced: del registered_objs[index] @@ -105,17 +115,18 @@ self.register(obj) def unregister(self, obj): - oid = classid(obj) - for registered in self.get(obj.id, ()): + clsid = classid(obj) + oid = class_regid(obj) + for registered in self.get(oid, ()): # use classid() to compare classes because vreg will probably # have its own version of the class, loaded through execfile - if classid(registered) == oid: + if classid(registered) == clsid: # XXX automatic reloading management - self[obj.id].remove(registered) + self[oid].remove(registered) break else: self.warning('can\'t remove %s, no id %s in the registry', - oid, obj.id) + clsid, oid) def all_objects(self): """return a list containing all objects in this registry. @@ -286,7 +297,7 @@ try: if obj.__module__ != modname or obj in butclasses: continue - oid = obj.id + oid = class_regid(obj) except AttributeError: continue if oid and not '__abstract__' in obj.__dict__: @@ -420,10 +431,10 @@ to a non empty string to be registered. """ if (cls.__dict__.get('__abstract__') or cls.__name__[0] == '_' - or not cls.__registry__ or not cls.id): + or not cls.__registry__ or not class_regid(cls)): return regname = cls.__registry__ - if '%s.%s' % (regname, cls.id) in self.config['disable-appobjects']: + if '%s.%s' % (regname, class_regid(cls)) in self.config['disable-appobjects']: return self.register(cls)