[Checkins]
SVN: zope.introspector/trunk/src/zope/introspector/registry.py
Copy registry introspector from Martins sandbox.
Uli Fouquet
uli at gnufix.de
Sat Jun 21 05:06:40 EDT 2008
Log message for revision 87618:
Copy registry introspector from Martins sandbox.
Changed:
A zope.introspector/trunk/src/zope/introspector/registry.py
-=-
Copied: zope.introspector/trunk/src/zope/introspector/registry.py (from rev 87617, Sandbox/mlundwall/zope.introspector/trunk/src/zope/introspector/registry.py)
===================================================================
--- zope.introspector/trunk/src/zope/introspector/registry.py (rev 0)
+++ zope.introspector/trunk/src/zope/introspector/registry.py 2008-06-21 09:06:39 UTC (rev 87618)
@@ -0,0 +1,104 @@
+from zope.interface import implements
+from zope.introspector.interfaces import IRegistryInfo, IRegistrySearch
+from zope.component import globalregistry
+from zope.interface.adapter import AdapterRegistry
+from zope.component.registry import AdapterRegistration, HandlerRegistration, UtilityRegistration
+
+
+class RegistryInfoUtility(object):
+ """ Give information about the component registry.
+ Implements the IRegistryInfo interface.
+ """
+ implements(IRegistryInfo)
+
+ def getAllRegistrations(self):
+ """ See zope.introspector.interfaces for documentation.
+ """
+ adapters = self.getAllAdapters()
+ handlers = self.getAllHandlers()
+ utils = self.getAllUtilities()
+ subsriptionAdapters = self.getAllSubscriptionAdapters()
+ return adapters + handlers + utils + subsriptionAdapters
+
+ def getAllUtilities(self):
+ """ See zope.introspector.interfaces for documentation.
+ """
+ return [x for x in globalregistry.base.registeredUtilities()]
+
+ def getAllAdapters(self):
+ """ See zope.introspector.interfaces for documentation.
+ """
+ return [x for x in globalregistry.base.registeredAdapters()]
+
+ def getAllHandlers(self):
+ """ See zope.introspector.interfaces for documentation.
+ """
+ return [x for x in globalregistry.base.registeredHandlers()]
+
+ def getAllSubscriptionAdapters(self):
+ """ See zope.introspector.interfaces for documentation.
+ """
+ return [x for x in globalregistry.base.registeredSubscriptionAdapters()]
+
+ def getRegistrationsForInterface(self, searchString='', types=['all']):
+ """ See zope.introspector.interfaces for documentation.
+ """
+ interfaces = []
+ searchInterfaces = []
+
+ if 'all' in types:
+ searchInterfaces = self.getAllRegistrations()
+ if 'adapters' in types:
+ searchInterfaces.extend(self.getAllAdapters())
+ if 'utilities' in types:
+ searchInterfaces.extend(self.getAllUtilities())
+ if 'handlers' in types:
+ searchInterfaces.extend(self.getAllHandlers())
+ if 'subscriptionAdapters' in types:
+ searchInterfaces.extend(self.getAllSubscriptionAdapters())
+
+ #Search using adapters
+ for eachRegistration in searchInterfaces:
+ if IRegistrySearch(eachRegistration).searchRegistration(searchString):
+ interfaces.append(eachRegistration)
+ return interfaces
+
+ def getAllInterfaces(self):
+ """ See zope.introspector.interfaces for documentation.
+ """
+ registrations = {}
+
+ for eachRegistration in self.getAllRegistrations():
+ reg = IRegistrySearch(eachRegistration)
+ interfacePaths = reg.getInterfaces()
+ import pprint;
+ #pprint.pprint(interfacePaths)
+
+ for eachInterface in interfacePaths:
+ registrations = self._dicter(registrations, eachInterface.split('.'), reg.getObject())
+
+ return registrations
+
+ def _dicter(self, dictionary, modPath, item):
+
+ key = modPath[0]
+
+ if key in dictionary:
+ # has key enter that dictionary and continue looking for the end
+ if len(modPath) == 1:
+ dictionary[key].append(item)
+ else:
+ self._dicter(dictionary[key], modPath[1:], item)
+ else:
+ # No key found,
+ # create a dictionary and add.
+ dictionary[key] = self._createDict(modPath[1:], item)
+
+ return dictionary
+
+ def _createDict(self, path, item):
+ if not path:
+ return [item]
+ return {path[0]:self._createDict(path[1:], item)}
+
+
\ No newline at end of file
More information about the Checkins
mailing list