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