[Checkins] SVN: Products.GenericSetup/trunk/Products/GenericSetup/ Adapter removal.

Laurence Rowe l at lrowe.co.uk
Fri Sep 18 12:56:34 EDT 2009


Log message for revision 104356:
  Adapter removal.

Changed:
  U   Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt
  U   Products.GenericSetup/trunk/Products/GenericSetup/components.py
  U   Products.GenericSetup/trunk/Products/GenericSetup/tests/test_components.py

-=-
Modified: Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt	2009-09-18 16:27:34 UTC (rev 104355)
+++ Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt	2009-09-18 16:56:33 UTC (rev 104356)
@@ -4,6 +4,8 @@
 GenericSetup 1.5.0 (unreleased)
 -------------------------------
 
+- Adapter removal.
+
 - Fix utility removal so utility is not added when it is missing from the
   local component registry.
 

Modified: Products.GenericSetup/trunk/Products/GenericSetup/components.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/components.py	2009-09-18 16:27:34 UTC (rev 104355)
+++ Products.GenericSetup/trunk/Products/GenericSetup/components.py	2009-09-18 16:56:33 UTC (rev 104356)
@@ -137,6 +137,11 @@
             for interface in for_.split():
                 required.append(_resolveDottedName(interface))
 
+            if child.hasAttribute('remove'):
+                self.context.unregisterAdapter(factory,
+                                               required, provided, name)
+                continue
+
             self.context.registerAdapter(factory,
                                          required=required,
                                          provided=provided,

Modified: Products.GenericSetup/trunk/Products/GenericSetup/tests/test_components.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/tests/test_components.py	2009-09-18 16:27:34 UTC (rev 104355)
+++ Products.GenericSetup/trunk/Products/GenericSetup/tests/test_components.py	2009-09-18 16:56:33 UTC (rev 104356)
@@ -41,6 +41,7 @@
 from zope.component import getMultiAdapter
 from zope.component import getGlobalSiteManager
 from zope.component import getSiteManager
+from zope.component import queryAdapter
 from zope.component import queryUtility
 from zope.component.globalregistry import base
 from zope.interface import implements
@@ -87,7 +88,17 @@
     def verify(self):
         return True
 
+class DummyAdapter(object):
+    """A dummy adapter."""
 
+    implements(IDummyInterface)
+
+    def __init__(self, context):
+        pass
+
+    def verify(self):
+        return True
+
 class DummyTool(SimpleItem):
     """A dummy tool."""
     implements(IDummyInterface)
@@ -130,7 +141,15 @@
 _COMPONENTS_BODY = """\
 <?xml version="1.0"?>
 <componentregistry>
- <adapters/>
+ <adapters>
+  <adapter factory="Products.GenericSetup.tests.test_components.DummyAdapter"
+     for="zope.interface.Interface"
+     provides="Products.GenericSetup.tests.test_components.IDummyInterface"/>
+  <adapter name="foo"
+     factory="Products.GenericSetup.tests.test_components.DummyAdapter"
+     for="zope.interface.Interface"
+     provides="Products.GenericSetup.tests.test_components.IDummyInterface"/>
+ </adapters>
  <utilities>
   <utility factory="Products.GenericSetup.tests.test_components.DummyUtility"
      id="dummy_utility"
@@ -151,6 +170,11 @@
 _REMOVE_IMPORT = """\
 <?xml version="1.0"?>
 <componentregistry>
+ <adapters>
+  <adapter factory="Products.GenericSetup.tests.test_components.DummyAdapter"
+     provides="Products.GenericSetup.tests.test_components.IDummyInterface"
+     for="*" remove="True"/>
+ </adapters>
  <utilities>
   <utility id="dummy_utility"
      factory="Products.GenericSetup.tests.test_components.DummyUtility"
@@ -178,6 +202,9 @@
         return ComponentRegistryXMLAdapter
 
     def _populate(self, obj):
+        obj.registerAdapter(DummyAdapter, required=(None,))
+        obj.registerAdapter(DummyAdapter, required=(None,), name=u'foo')
+        
         util = DummyUtility()
         name = 'dummy_utility'
         util.__name__ = name
@@ -201,6 +228,14 @@
         obj.registerUtility(tool2, IDummyInterface2, name=u'dummy tool name2')
 
     def _verifyImport(self, obj):
+        adapted = queryAdapter(object(), IDummyInterface)
+        self.failUnless(IDummyInterface.providedBy(adapted))
+        self.failUnless(adapted.verify())
+
+        adapted = queryAdapter(object(), IDummyInterface, name=u'foo')
+        self.failUnless(IDummyInterface.providedBy(adapted))
+        self.failUnless(adapted.verify())
+
         util = queryUtility(IDummyInterface2, name=u'foo')
         self.failUnless(IDummyInterface.providedBy(util))
         self.failUnless(util.verify())
@@ -293,7 +328,7 @@
         util = queryUtility(IDummyInterface)
         self.failUnless(util is None)
 
-    def test_remove_utilities(self):
+    def test_remove_components(self):
         from Products.GenericSetup.components import importComponentRegistry
 
         obj = self._obj
@@ -304,6 +339,13 @@
         context._files['componentregistry.xml'] = _REMOVE_IMPORT
         importComponentRegistry(context)
 
+        adapted = queryAdapter(object(), IDummyInterface)
+        self.failUnless(adapted is None)
+
+        # This one should still exist
+        adapted = queryAdapter(object(), IDummyInterface, name=u'foo')
+        self.failIf(adapted is None)
+
         util = queryUtility(IDummyInterface2, name=u'foo')
         name = 'Products.GenericSetup.tests.test_components.IDummyInterface2-foo'
         self.failUnless(util is None)



More information about the checkins mailing list