[Checkins] SVN: zope.component/trunk/ Optimized un/registerUtility via storing an optimized data structure for

Hanno Schlichting plone at hannosch.info
Thu Nov 1 07:31:31 EDT 2007


Log message for revision 81348:
  Optimized un/registerUtility via storing an optimized data structure for
  efficient retrieval of already registered utilities. This avoids looping over
  all utilities when registering a new one.
  

Changed:
  U   zope.component/trunk/README.txt
  U   zope.component/trunk/src/zope/component/persistentregistry.py
  U   zope.component/trunk/src/zope/component/registry.py

-=-
Modified: zope.component/trunk/README.txt
===================================================================
--- zope.component/trunk/README.txt	2007-11-01 09:32:18 UTC (rev 81347)
+++ zope.component/trunk/README.txt	2007-11-01 11:31:31 UTC (rev 81348)
@@ -14,7 +14,9 @@
 3.4.1 (unreleased)
 ==================
 
-...
+Optimized un/registerUtility via storing an optimized data structure for
+efficient retrieval of already registered utilities. This avoids looping over
+all utilities when registering a new one.
 
 3.4.0 (2007-09-29)
 ==================

Modified: zope.component/trunk/src/zope/component/persistentregistry.py
===================================================================
--- zope.component/trunk/src/zope/component/persistentregistry.py	2007-11-01 09:32:18 UTC (rev 81347)
+++ zope.component/trunk/src/zope/component/persistentregistry.py	2007-11-01 11:31:31 UTC (rev 81348)
@@ -51,6 +51,7 @@
 
     def _init_registrations(self):
         self._utility_registrations = persistent.mapping.PersistentMapping()
+        self._utility_subscribers = persistent.mapping.PersistentMapping()
         self._adapter_registrations = persistent.mapping.PersistentMapping()
         self._subscription_registrations = persistent.list.PersistentList()
         self._handler_registrations = persistent.list.PersistentList()

Modified: zope.component/trunk/src/zope/component/registry.py
===================================================================
--- zope.component/trunk/src/zope/component/registry.py	2007-11-01 09:32:18 UTC (rev 81347)
+++ zope.component/trunk/src/zope/component/registry.py	2007-11-01 11:31:31 UTC (rev 81348)
@@ -44,6 +44,7 @@
 
     def _init_registrations(self):
         self._utility_registrations = {}
+        self._utility_subscribers = {}
         self._adapter_registrations = {}
         self._subscription_registrations = []
         self._handler_registrations = []
@@ -75,13 +76,9 @@
             # already registered
             return
 
-        subscribed = False
-        for ((p, _), (c,_)) in self._utility_registrations.iteritems():
-            if p == provided and c == component:
-                subscribed = True
-                break
-
+        subscribed = self._utility_subscribers.get((provided, component), False)
         self._utility_registrations[(provided, name)] = component, info
+        self._utility_subscribers[(provided, component)] = True
         self.utilities.register((), provided, name, component)
 
         if not subscribed:
@@ -108,12 +105,8 @@
         del self._utility_registrations[(provided, name)]
         self.utilities.unregister((), provided, name)
 
-        subscribed = False
-        for ((p, _), (c,_)) in self._utility_registrations.iteritems():
-            if p == provided and c == component:
-                subscribed = True
-                break
-
+        subscribed = self._utility_subscribers.get((provided, component), False)
+        del self._utility_subscribers[(provided, component)]
         if not subscribed:
             self.utilities.unsubscribe((), provided, component)
 



More information about the Checkins mailing list