vregistry.py
changeset 4490 d45cde54d464
parent 4436 294e084f1263
child 4491 a0f48c31b58a
--- a/vregistry.py	Sat Feb 06 08:45:14 2010 +0100
+++ b/vregistry.py	Mon Feb 08 11:08:55 2010 +0100
@@ -84,6 +84,11 @@
         except KeyError:
             raise ObjectNotFound(name), None, sys.exc_info()[-1]
 
+    def initialization_completed(self):
+        for appobjects in self.itervalues():
+            for appobjectcls in appobjects:
+                appobjectcls.__registered__(self)
+
     def register(self, obj, oid=None, clear=False):
         """base method to add an object in the registry"""
         assert not '__abstract__' in obj.__dict__
@@ -93,11 +98,9 @@
             appobjects = self[oid] =  []
         else:
             appobjects = self.setdefault(oid, [])
-        appobject = obj.__registered__(self)
-        assert not appobject in appobjects, \
-               'object %s is already registered' % appobject
-        assert callable(appobject.__select__), appobject
-        appobjects.append(appobject)
+        assert not obj in appobjects, \
+               'object %s is already registered' % obj
+        appobjects.append(obj)
 
     def register_and_replace(self, obj, replaced):
         # XXXFIXME this is a duplication of unregister()
@@ -356,8 +359,15 @@
         for filepath, modname in filemods:
             if self.load_file(filepath, modname, force_reload):
                 change = True
+        if change:
+            self.initialization_completed()
         return change
 
+    def initialization_completed(self):
+        for regname, reg in self.iteritems():
+            self.debug('available in registry %s: %s', regname, sorted(reg))
+            reg.initialization_completed()
+
     def load_file(self, filepath, modname, force_reload=False):
         """load app objects from a python file"""
         from logilab.common.modutils import load_module_from_name