Author: jmorliaguet
Date: Sat Jun 10 17:11:26 2006
New Revision: 3387

Modified:
   cpsskins/branches/paris-sprint-2006/doc/utils.txt
   cpsskins/branches/paris-sprint-2006/elements/display.py
   cpsskins/branches/paris-sprint-2006/elements/format.py
   cpsskins/branches/paris-sprint-2006/storage/storage.py
   cpsskins/branches/paris-sprint-2006/tests/setup.py
   cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py
   cpsskins/branches/paris-sprint-2006/utils.py

Log:

- added a cloneObject() method



Modified: cpsskins/branches/paris-sprint-2006/doc/utils.txt
==============================================================================
--- cpsskins/branches/paris-sprint-2006/doc/utils.txt   (original)
+++ cpsskins/branches/paris-sprint-2006/doc/utils.txt   Sat Jun 10 17:11:26 2006
@@ -103,3 +103,22 @@
 
     >>> restoreInteraction()
 
+
+cloneObject
+-----------
+
+    >>> from cpsskins.utils import cloneObject
+    >>> from cpsskins.tests.setup import Marker
+
+    >>> obj = Marker(42)
+    >>> obj.marker
+    42
+
+    >>> clone = cloneObject(obj)
+    >>> clone.marker
+    42
+
+    >>> from zope.component import providedBy
+    >>> list(providedBy(obj)) == list(providedBy(clone))
+    True
+

Modified: cpsskins/branches/paris-sprint-2006/elements/display.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/elements/display.py     (original)
+++ cpsskins/branches/paris-sprint-2006/elements/display.py     Sat Jun 10 
17:11:26 2006
@@ -17,11 +17,9 @@
 """
 __docformat__ = "reStructuredText"
 
-from zope.location.pickling import locationCopy
 from zope.traversing.interfaces import IPathAdapter
 from zope.component import getUtility, queryUtility
 from zope.interface import implements
-from zope.security.proxy import removeSecurityProxy
 
 from cpsskins import configuration
 from cpsskins.elements.element import Element
@@ -31,7 +29,7 @@
 from cpsskins.ontology import hasDisplay, hasDisplayFromPerspective
 from cpsskins.setup.interfaces import IType
 from cpsskins.storage.displays import IDisplayStorage
-from cpsskins.utils import getThemeManager, getRelationStorage
+from cpsskins.utils import getThemeManager, getRelationStorage, cloneObject
 
 USE_CURRENT_PERSPECTIVE = 1
 IGNORE_PERSPECTIVES = 2
@@ -121,7 +119,7 @@
     def cloneDisplay(self, display):
         """Clone an existing display.
         """
-        new_display = locationCopy(removeSecurityProxy(display))
+        new_display = cloneObject(display)
         return self.storeDisplay(new_display)
 
     def getEffectiveDisplay(self, perspective=None):

Modified: cpsskins/branches/paris-sprint-2006/elements/format.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/elements/format.py      (original)
+++ cpsskins/branches/paris-sprint-2006/elements/format.py      Sat Jun 10 
17:11:26 2006
@@ -19,7 +19,6 @@
 
 from zope.component import queryUtility, getUtility, createObject
 from zope.interface import implements
-from zope.location.pickling import locationCopy
 from zope.traversing.interfaces import IPathAdapter, ITraversable
 from zope.security.proxy import removeSecurityProxy
 
@@ -30,7 +29,7 @@
 from cpsskins.setup.interfaces import IResource, IPreset, IType
 from cpsskins.setup.interfaces import IResourceManager
 from cpsskins.setup.utils import getTypeNameFromURI
-from cpsskins.utils import getThemeManager, getRelationStorage
+from cpsskins.utils import getThemeManager, getRelationStorage, cloneObject
 
 class Format(Element):
 
@@ -169,7 +168,7 @@
     def cloneFormat(self, format):
         """Clone the format
         """
-        new_format = locationCopy(removeSecurityProxy(format))
+        new_format = cloneObject(format)
         return self.storeFormat(new_format)
 
     def guessPredicate(self, name=u''):

Modified: cpsskins/branches/paris-sprint-2006/storage/storage.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/storage/storage.py      (original)
+++ cpsskins/branches/paris-sprint-2006/storage/storage.py      Sat Jun 10 
17:11:26 2006
@@ -25,12 +25,12 @@
 from zope.event import notify
 from zope.interface import implements
 from zope.lifecycleevent import ObjectCopiedEvent
-from zope.location.pickling import locationCopy
 from zope.traversing.api import getName
 
 from cpsskins.elements.interfaces import IElement
 from cpsskins.setup.interfaces import IType
 from cpsskins.storage.interfaces import IStorage
+from cpsskins.utils import cloneObject
 
 class Storage(BTreeContainer, Contained):
     """A base storage class.
@@ -69,7 +69,7 @@
         if name not in self:
             raise KeyError("%s not in the storage." % object)
 
-        copy = locationCopy(object)
+        copy = cloneObject(object)
         notify(ObjectCopiedEvent(copy, object))
 
         new_name = INameChooser(self).chooseName(name, copy)

Modified: cpsskins/branches/paris-sprint-2006/tests/setup.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/tests/setup.py  (original)
+++ cpsskins/branches/paris-sprint-2006/tests/setup.py  Sat Jun 10 17:11:26 2006
@@ -19,9 +19,10 @@
 
 from zope.app.container.interfaces import IObjectAddedEvent, 
IObjectRemovedEvent
 from zope.app.container.interfaces import INameChooser, IWriteContainer
-from zope.app.container.contained import NameChooser
+from zope.app.container.contained import NameChooser, Contained
 from zope.app.testing import setup
 from zope.component import getGlobalSiteManager
+from zope.interface import implements, Interface
 from zope.lifecycleevent.interfaces import IObjectCreatedEvent
 from zope.lifecycleevent.interfaces import IObjectModifiedEvent
 from zope.traversing.interfaces import IPathAdapter
@@ -94,3 +95,11 @@
     theme[u'page'][u'block'][u'cell'] = elements.cell.Cell('A cell')
     return theme
 
+
+class IMarker(Interface):
+    """A marker interface"""
+
+class Marker(object):
+    implements(IMarker)
+    def __init__(self, marker=None):
+        self.marker = marker

Modified: cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py       
(original)
+++ cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py       
Sat Jun 10 17:11:26 2006
@@ -19,8 +19,6 @@
 
 from zope.formlib import form
 from zope.component import getMultiAdapter, getUtility
-from zope.location.pickling import locationCopy
-from zope.security.proxy import removeSecurityProxy
 from zope.traversing.api import getParent
 
 from cpsskins.browser.negotiation.interfaces import INegotiation
@@ -31,7 +29,7 @@
 from cpsskins.setup.interfaces import IType, IIdentifiable
 from cpsskins.setup.interfaces import IResourceManager, IResource, IPreset
 from cpsskins.storage.interfaces import IStorage
-from cpsskins.utils import getThemeManager
+from cpsskins.utils import getThemeManager, cloneObject
 
 class ElementEditor(object):
 
@@ -177,7 +175,7 @@
         if not IStorage.providedBy(container):
             raise TypeError("The element is not located in a storage.")
 
-        resource = locationCopy(removeSecurityProxy(element))
+        resource = cloneObject(element)
         getThemeManager(context).registerElement(resource)
         preset = resources.register(name=name, resource=resource,
                                     context=context)

Modified: cpsskins/branches/paris-sprint-2006/utils.py
==============================================================================
--- cpsskins/branches/paris-sprint-2006/utils.py        (original)
+++ cpsskins/branches/paris-sprint-2006/utils.py        Sat Jun 10 17:11:26 2006
@@ -20,17 +20,18 @@
 import re
 
 from zope.component import getSiteManager, getGlobalSiteManager
+from zope.location.pickling import locationCopy
 from zope.publisher.interfaces import IRequest
-from zope.traversing.api import getParent
 from zope.security.management import getInteraction
-
-from cpsskins.thememanager import IThemeManagementFolder
+from zope.security.proxy import removeSecurityProxy
+from zope.traversing.api import getParent
 
 startTag = re.compile('<.*?>')
 classAttr = re.compile(' class="(.*?)"')
 lineBreaks = re.compile('(\n|\r)')
 
 def getThemeManager(context=None, name=u''):
+    from cpsskins.thememanager import IThemeManagementFolder
     # global utility
     if context is None:
         gsm = getGlobalSiteManager()
@@ -66,6 +67,11 @@
             return p
         raise RuntimeError("No IRequest in interaction")
 
+def cloneObject(obj):
+    """Clone an object. the security proxy is removed
+    """
+    return locationCopy(removeSecurityProxy(obj))
+
 def addThemeSkeleton(context):
     # for testing purposes
     from cpsskins.elements.interfaces import IDisplayable, IFormattable
-- 
http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins

Reply via email to