[Checkins] SVN: zope.introspector/trunk/src/zope/introspector/registry.py Make utilityfinder able to find local utilities for contexts.

Uli Fouquet uli at gnufix.de
Thu Jul 10 06:55:45 EDT 2008


Log message for revision 88163:
  Make utilityfinder able to find local utilities for contexts.

Changed:
  U   zope.introspector/trunk/src/zope/introspector/registry.py

-=-
Modified: zope.introspector/trunk/src/zope/introspector/registry.py
===================================================================
--- zope.introspector/trunk/src/zope/introspector/registry.py	2008-07-10 09:31:11 UTC (rev 88162)
+++ zope.introspector/trunk/src/zope/introspector/registry.py	2008-07-10 10:55:39 UTC (rev 88163)
@@ -1,6 +1,6 @@
 from zope.interface import implements
 from zope.introspector.interfaces import IRegistryInfo, IRegistrySearch
-from zope.component import globalregistry
+from zope.component import globalregistry, getSiteManager
 from zope.interface.adapter import AdapterRegistry
 from zope.component.registry import (AdapterRegistration, 
                                      HandlerRegistration,
@@ -13,7 +13,8 @@
         Implements the IRegistryInfo interface. 
     """
     implements(IRegistryInfo)
-    
+    context = None
+
     def getAllRegistrations(self, registry='base'):
         """ See zope.introspector.interfaces for documentation.
         """
@@ -22,15 +23,24 @@
         utils = self.getAllUtilities(registry)
         subsriptionAdapters = self.getAllSubscriptionAdapters(registry)
         return adapters + handlers + utils + subsriptionAdapters
-        
-    def getAllUtilities(self, registry='base'):
-        """ See zope.introspector.interfaces for documentation.
-        """ 
-        def f(item):
-            return registry is getattr(item.registry, '__name__')
-        
-        return filter(f, globalregistry.base.registeredUtilities())
-        
+
+    def getAllUtilities(self, registry=None, context=None):
+        contxt = context or self.context
+        smlist = [getSiteManager(context)]
+        seen = []
+        result = []
+        while smlist:
+            sm = smlist.pop()
+            if sm in seen:
+                continue
+            seen.append(sm)
+            smlist += list(sm.__bases__)
+            for u in sm.registeredUtilities():
+                if registry and not (registry == u.registry.__name__):
+                    continue
+                result.append(u)
+        return result
+
     def getAllAdapters(self, registry='base'):
         """ See zope.introspector.interfaces for documentation.
         """



More information about the Checkins mailing list