[KSS-checkins] r49380 - kukit/kss.demo/branch/1.2/kss/demo

reebalazs at codespeak.net reebalazs at codespeak.net
Wed Dec 5 14:00:16 CET 2007


Author: reebalazs
Date: Wed Dec  5 14:00:16 2007
New Revision: 49380

Modified:
   kukit/kss.demo/branch/1.2/kss/demo/events.py
   kukit/kss.demo/branch/1.2/kss/demo/interfaces.py
   kukit/kss.demo/branch/1.2/kss/demo/registry.py
Log:
Port back critical bugfix -r47443 from trunk: demo plugins are not loaded (empty screen) depending on zcml loading order.

Modified: kukit/kss.demo/branch/1.2/kss/demo/events.py
==============================================================================
--- kukit/kss.demo/branch/1.2/kss/demo/events.py	(original)
+++ kukit/kss.demo/branch/1.2/kss/demo/events.py	Wed Dec  5 14:00:16 2007
@@ -8,13 +8,19 @@
     IKSSDemoResource,
     IKSSSeleniumTestResource,
     IKSSDemoRegistrationEvent,
+    IKSSDemoRegistryEvent,
+    IKSSDemoRegistry
     )
 from zope.interface import implements
 
 class KSSDemoRegistrationEvent(object):
-    """Redispatch of registration for demo utilities"""
+    """Redispatch of registration for demo resource utilities"""
     implements(IKSSDemoRegistrationEvent)
 
+class KSSDemoRegistryEvent(object):
+    """Redispatch of registration for demo registry utilities"""
+    implements(IKSSDemoRegistryEvent)
+
 @zope.component.adapter(IUtilityRegistration, IRegistrationEvent)
 def dispatchRegistration(registration, event):
     """When a demo utility is registered, add it to the registry.
@@ -24,9 +30,14 @@
     """
     component = registration.component
     # Only dispatch registration of the interesting utilities.
-    new_event = KSSDemoRegistrationEvent()
     if IKSSDemoResource.providedBy(component) or \
             IKSSSeleniumTestResource.providedBy(component):
+        new_event = KSSDemoRegistrationEvent()
+        handlers = zope.component.subscribers((component, registration, event, new_event), None)
+        for handler in handlers:
+            pass # getting them does the work
+    if IKSSDemoRegistry.providedBy(component):
+        new_event = KSSDemoRegistryEvent()
         handlers = zope.component.subscribers((component, registration, event, new_event), None)
         for handler in handlers:
             pass # getting them does the work

Modified: kukit/kss.demo/branch/1.2/kss/demo/interfaces.py
==============================================================================
--- kukit/kss.demo/branch/1.2/kss/demo/interfaces.py	(original)
+++ kukit/kss.demo/branch/1.2/kss/demo/interfaces.py	Wed Dec  5 14:00:16 2007
@@ -140,6 +140,11 @@
 # --
 
 class IKSSDemoRegistrationEvent(Interface):
-    """Redispatched evend for registration of
-    IKSSPDemoRegistry utilities.
+    """Redispatched event for registration of
+    IKSSDemoRegistration utilities (resources).
+    """
+
+class IKSSDemoRegistryEvent(Interface):
+    """Redispatched event for registration of
+    IKSSDemoRegistry utilities.
     """

Modified: kukit/kss.demo/branch/1.2/kss/demo/registry.py
==============================================================================
--- kukit/kss.demo/branch/1.2/kss/demo/registry.py	(original)
+++ kukit/kss.demo/branch/1.2/kss/demo/registry.py	Wed Dec  5 14:00:16 2007
@@ -9,6 +9,7 @@
     IKSSDemoResource,
     IKSSSeleniumTestResource,
     IKSSDemoRegistrationEvent,
+    IKSSDemoRegistryEvent,
     )
 from zope.component.interfaces import (
     IUtilityRegistration,
@@ -55,10 +56,26 @@
         self.demos_are_sorted = False
         site.registerHandler(self.registerDemosFromPlugin)
         site.registerHandler(self.unregisterDemosFromPlugin)
+        site.registerHandler(self.registerEarlierDemos)
         # registry for selenium tests
         self.selenium_tests = []
         site.registerHandler(self.registerSeleniumTestsFromPlugin)
         site.registerHandler(self.unregisterSeleniumTestsFromPlugin)
+        # ... the rest of setup will be done from registerEarlierDemos
+
+    @adapter(IKSSDemoRegistry, IUtilityRegistration, IRegistered, IKSSDemoRegistryEvent)
+    def registerEarlierDemos(self, registry, registration=None, event=None, new_event=None):
+        """Make sure that the resources registered earlier, are added
+         (so this is a listener to the registration of myself
+         which is needed because CA is not ready at time of the __init__)
+        """
+        if registry != self:
+            # The utility only register on itself.
+            return
+        site = getSiteManager()
+        for name, plugin in site.getUtilitiesFor(IKSSDemoResource):
+            for demo in plugin.demos:
+                self.registerDemo(demo)
 
     @adapter(IKSSDemoResource, IUtilityRegistration, IRegistered, IKSSDemoRegistrationEvent)
     def registerDemosFromPlugin(self, plugin, registration=None, event=None, new_event=None):


More information about the Kukit-checkins mailing list