[Checkins] SVN: Products.GenericSetup/trunk/Products/GenericSetup/ - added MarkerInterfaceHelpers mixin class

Yvo Schubbe y.2008 at wcm-solutions.de
Fri Feb 22 09:34:14 EST 2008


Log message for revision 84135:
  - added MarkerInterfaceHelpers mixin class

Changed:
  U   Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt
  U   Products.GenericSetup/trunk/Products/GenericSetup/testing.py
  U   Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py
  U   Products.GenericSetup/trunk/Products/GenericSetup/utils.py

-=-
Modified: Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt	2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/CHANGES.txt	2008-02-22 14:34:13 UTC (rev 84135)
@@ -2,6 +2,8 @@
 
   GenericSetup 1.4.0 (unreleased)
 
+    - utils: Added MarkerInterfaceHelpers.
+
     - Added default values to the registerProfile ZCML directive.
 
     - Add a ZMI interface to find and remove invalid steps from the

Modified: Products.GenericSetup/trunk/Products/GenericSetup/testing.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/testing.py	2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/testing.py	2008-02-22 14:34:13 UTC (rev 84135)
@@ -21,6 +21,7 @@
 from xml.dom.minidom import parseString
 
 import Products.Five
+from OFS.interfaces import IItem
 from Products.Five import zcml
 from zope.component import getMultiAdapter
 from zope.interface import implements
@@ -64,6 +65,11 @@
         return self._should_purge
 
 
+class IDummyMarker(IItem):
+
+    pass
+
+
 class _AdapterTestCaseBase(unittest.TestCase):
 
     def _populate(self, obj):

Modified: Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py	2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py	2008-02-22 14:34:13 UTC (rev 84135)
@@ -20,8 +20,17 @@
 
 from xml.dom.minidom import parseString
 
+from OFS.interfaces import IItem
+from OFS.SimpleItem import Item
+from Products.Five.utilities.marker import MarkerInterfacesAdapter
+from zope.component import provideAdapter
+from zope.component.interface import provideInterface
+from zope.interface import directlyProvides
+from zope.testing.cleanup import cleanUp
+
+from Products.GenericSetup.testing import DummySetupEnviron
+from Products.GenericSetup.testing import IDummyMarker
 from Products.GenericSetup.utils import PrettyDocument
-from Products.GenericSetup.testing import DummySetupEnviron
 
 
 _EMPTY_PROPERTY_EXPORT = """\
@@ -145,7 +154,14 @@
 </dummy>
 """
 
+_NORMAL_MARKER_EXPORT = """\
+<?xml version="1.0"?>
+<dummy>
+ <marker name="Products.GenericSetup.testing.IDummyMarker"/>
+</dummy>
+"""
 
+
 def _testFunc( *args, **kw ):
 
     """ This is a test.
@@ -383,6 +399,64 @@
         self.assertEquals(obj.lines3, ('Gee', 'Foo', 'Bar'))
 
 
+class MarkerInterfaceHelpersTests(unittest.TestCase):
+
+    def _getTargetClass(self):
+        from Products.GenericSetup.utils import MarkerInterfaceHelpers
+
+        return MarkerInterfaceHelpers
+
+    def _makeOne(self, *args, **kw):
+        from Products.GenericSetup.utils import NodeAdapterBase
+
+        class Foo(self._getTargetClass(), NodeAdapterBase):
+
+            pass
+
+        return Foo(*args, **kw)
+
+    def _populate(self, obj):
+        directlyProvides(obj, IDummyMarker)
+
+    def setUp(self):
+        obj = Item('obj')
+        self.helpers = self._makeOne(obj, DummySetupEnviron())
+        provideAdapter(MarkerInterfacesAdapter, (IItem,))
+        provideInterface('', IDummyMarker)
+
+    def tearDown(self):
+        cleanUp()
+
+    def test__extractMarkers(self):
+        self._populate(self.helpers.context)
+        doc = self.helpers._doc = PrettyDocument()
+        node = doc.createElement('dummy')
+        node.appendChild(self.helpers._extractMarkers())
+        doc.appendChild(node)
+
+        self.assertEqual(doc.toprettyxml(' '), _NORMAL_MARKER_EXPORT)
+
+    def test__purgeMarkers(self):
+        obj = self.helpers.context
+        self._populate(obj)
+        self.failUnless(IDummyMarker.providedBy(obj))
+
+        self.helpers._purgeMarkers()
+        self.failIf(IDummyMarker.providedBy(obj))
+
+    def test__initMarkers(self):
+        node = parseString(_NORMAL_MARKER_EXPORT).documentElement
+        self.helpers._initMarkers(node)
+        self.failUnless(IDummyMarker.providedBy(self.helpers.context))
+
+        doc = self.helpers._doc = PrettyDocument()
+        node = doc.createElement('dummy')
+        node.appendChild(self.helpers._extractMarkers())
+        doc.appendChild(node)
+
+        self.assertEqual(doc.toprettyxml(' '), _NORMAL_MARKER_EXPORT)
+
+
 class PrettyDocumentTests(unittest.TestCase):
 
     def test_attr_quoting(self):
@@ -414,6 +488,7 @@
         e = parseString(expected).documentElement
         self.assertEqual(e.childNodes[0].nodeValue, original)
 
+
 def test_suite():
     # reimport to make sure tests are run from Products
     from Products.GenericSetup.tests.test_utils import UtilsTests
@@ -421,6 +496,7 @@
     return unittest.TestSuite((
         unittest.makeSuite(UtilsTests),
         unittest.makeSuite(PropertyManagerHelpersTests),
+        unittest.makeSuite(MarkerInterfaceHelpersTests),
         unittest.makeSuite(PrettyDocumentTests),
         ))
 

Modified: Products.GenericSetup/trunk/Products/GenericSetup/utils.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/utils.py	2008-02-22 09:40:57 UTC (rev 84134)
+++ Products.GenericSetup/trunk/Products/GenericSetup/utils.py	2008-02-22 14:34:13 UTC (rev 84135)
@@ -33,8 +33,10 @@
 from Globals import InitializeClass
 from Globals import package_home
 from OFS.interfaces import IOrderedContainer
+from Products.Five.utilities.interfaces import IMarkerInterfaces
 from zope.component import queryMultiAdapter
 from zope.deprecation import deprecated
+from zope.interface import directlyProvides
 from zope.interface import implements
 from zope.interface import implementsOnly
 from zope.interface import providedBy
@@ -753,6 +755,37 @@
             obj._updateProperty(prop_id, prop_value)
 
 
+class MarkerInterfaceHelpers(object):
+
+    """Marker interface im- and export helpers.
+    """
+
+    def _extractMarkers(self):
+        fragment = self._doc.createDocumentFragment()
+        adapted = IMarkerInterfaces(self.context)
+
+        for marker_id in adapted.getDirectlyProvidedNames():
+            node = self._doc.createElement('marker')
+            node.setAttribute('name', marker_id)
+            fragment.appendChild(node)
+
+        return fragment
+
+    def _purgeMarkers(self):
+        directlyProvides(self.context)
+
+    def _initMarkers(self, node):
+        markers = []
+        adapted = IMarkerInterfaces(self.context)
+
+        for child in node.childNodes:
+            if child.nodeName != 'marker':
+                continue
+            markers.append(str(child.getAttribute('name')))
+
+        adapted.update(adapted.dottedToInterfaces(markers))
+
+
 def exportObjects(obj, parent_path, context):
     """ Export subobjects recursively.
     """



More information about the Checkins mailing list