r971 - in /zope-cmf1.6/trunk: ./ CMFActionIcons/ CMFCalendar/ CMFCalendar/tests/ CMFCore/ CMFCore/dtml/ CMFCore/exportimport/ CMFCore/interfaces/ CMFCore/tests/ CMFDefault/ CMFDefault/profiles/sample_content/ CMFDefault/skins/control/ CMFDefault/skins/zpt_control/ CMFDefault/tests/ CMFSetup/ CMFTopic/ CMFTopic/tests/ CMFUid/ DCWorkflow/ DCWorkflow/tests/ GenericSetup/ GenericSetup/OFSP/ GenericSetup/ZCatalog/ GenericSetup/ZCatalog/tests/ GenericSetup/doc/SampleSite/ GenericSetup/tests/ GenericSetup/www/ debian/
bzed-guest at users.alioth.debian.org
bzed-guest at users.alioth.debian.org
Mon Aug 6 21:16:42 UTC 2007
Author: bzed-guest
Date: Mon Aug 6 21:16:42 2007
New Revision: 971
URL: http://svn.debian.org/wsvn/pkg-zope/?sc=1&rev=971
Log:
new upstream version
Added:
zope-cmf1.6/trunk/CMFDefault/profiles/sample_content/
- copied from r970, zope-cmf1.6/branches/upstream/current/CMFDefault/profiles/sample_content/
zope-cmf1.6/trunk/GenericSetup/doc/SampleSite/
- copied from r970, zope-cmf1.6/branches/upstream/current/GenericSetup/doc/SampleSite/
Removed:
zope-cmf1.6/trunk/DCWorkflow/CHANGES.txt
Modified:
zope-cmf1.6/trunk/CHANGES.txt
zope-cmf1.6/trunk/CMFActionIcons/version.txt
zope-cmf1.6/trunk/CMFCalendar/Event.py
zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py
zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py
zope-cmf1.6/trunk/CMFCalendar/version.txt
zope-cmf1.6/trunk/CMFCore/CatalogTool.py
zope-cmf1.6/trunk/CMFCore/DynamicType.py
zope-cmf1.6/trunk/CMFCore/MembershipTool.py
zope-cmf1.6/trunk/CMFCore/RegistrationTool.py
zope-cmf1.6/trunk/CMFCore/SkinsTool.py
zope-cmf1.6/trunk/CMFCore/WorkflowTool.py
zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml
zope-cmf1.6/trunk/CMFCore/exportimport/properties.py
zope-cmf1.6/trunk/CMFCore/interfaces/_content.py
zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py
zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py
zope-cmf1.6/trunk/CMFCore/utils.py
zope-cmf1.6/trunk/CMFCore/version.txt
zope-cmf1.6/trunk/CMFDefault/Document.py
zope-cmf1.6/trunk/CMFDefault/DublinCore.py
zope-cmf1.6/trunk/CMFDefault/File.py
zope-cmf1.6/trunk/CMFDefault/Image.py
zope-cmf1.6/trunk/CMFDefault/Link.py
zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py
zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py
zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py
zope-cmf1.6/trunk/CMFDefault/skins/control/register.py
zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py
zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py
zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py
zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py
zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py
zope-cmf1.6/trunk/CMFDefault/version.txt
zope-cmf1.6/trunk/CMFSetup/version.txt
zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py
zope-cmf1.6/trunk/CMFTopic/version.txt
zope-cmf1.6/trunk/CMFUid/version.txt
zope-cmf1.6/trunk/DCWorkflow/States.py
zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py
zope-cmf1.6/trunk/DCWorkflow/exportimport.py
zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py
zope-cmf1.6/trunk/DCWorkflow/version.txt
zope-cmf1.6/trunk/EXTERNALS.txt
zope-cmf1.6/trunk/GenericSetup/CHANGES.txt
zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py
zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py
zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py
zope-cmf1.6/trunk/GenericSetup/content.py
zope-cmf1.6/trunk/GenericSetup/context.py
zope-cmf1.6/trunk/GenericSetup/interfaces.py
zope-cmf1.6/trunk/GenericSetup/tests/common.py
zope-cmf1.6/trunk/GenericSetup/tests/test_content.py
zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py
zope-cmf1.6/trunk/GenericSetup/tool.py
zope-cmf1.6/trunk/GenericSetup/utils.py
zope-cmf1.6/trunk/GenericSetup/version.txt
zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt
zope-cmf1.6/trunk/debian/changelog
zope-cmf1.6/trunk/debian/control
zope-cmf1.6/trunk/debian/watch
zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct
zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct
Modified: zope-cmf1.6/trunk/CHANGES.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CHANGES.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CHANGES.txt (original)
+++ zope-cmf1.6/trunk/CHANGES.txt Mon Aug 6 21:16:42 2007
@@ -1,3 +1,57 @@
+CMF 1.6.4 (2007/05/15):
+
+ (No changes since 1.6.4-beta)
+
+CMF 1.6.4-beta (2007/04/24):
+
+ Other Changes
+
+ - Switch to using GenericSetup 1.2 final release (From 1.2beta).
+
+ Bug Fixes
+
+ - Fixed test breakage / spew when running on Zope 2.8.
+
+ - Use the property API to get the member specific skin, because
+ direct attribute access won't work with PAS based membership.
+ (http://dev.plone.org/plone/ticket/5904)
+
+ - Add POST-only protections to security critical methods (see
+ http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-0240).
+
+ - Fixed DST-driven test breakage in CMFCalendar by adding an optional
+ 'zone' argument to the DublineCore methods which return string
+ rednitions of date metadata.
+ (http://www.zope.org/Collectors/CMF/476)
+
+CMF 1.6.3 (2007/02/02)
+
+ Bug Fixes
+
+ - Fixed broken PUT handling for CMFCalendar Events
+ (http://www.zope.org/Collectors/CMF/458)
+
+CMF 1.6.3-beta (2007/01/17)
+
+ Bug Fixes
+
+ - CMFCalendar: Refactored test setup to fix test breakage for Zope 2.9.
+
+ - CMFDefault: The "Sample CMF Content" GenericSetup profile was
+ registered but missing all of its files and necessary interface
+ declarations in the CMFDefault content classes.
+ (http://www.zope.org/Collectors/CMF/453)
+
+ - DCWorkflow: Fixed errors and site breakage on GenericSetup import
+ of transitions with variable expressions set. They were previously
+ being imported as text rather tha Expressions.
+
+ - CMFCore.DynamicType: Fixed behaviour regarding default view.
+ DynamicType was making it impossible to use a Zope3-style
+ default view for CMF content types.
+ (http://www.zope.org/Collectors/CMF/459)
+
+
CMF 1.6.2 (2006/08/15)
Bug Fixes
Modified: zope-cmf1.6/trunk/CMFActionIcons/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFActionIcons/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFActionIcons/version.txt (original)
+++ zope-cmf1.6/trunk/CMFActionIcons/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/CMFCalendar/Event.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/Event.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/Event.py (original)
+++ zope-cmf1.6/trunk/CMFCalendar/Event.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Event: A CMF-enabled Event object.
-$Id: Event.py 36890 2005-04-05 10:48:10Z yuppie $
+$Id: Event.py 72179 2007-01-22 18:29:43Z jens $
"""
from AccessControl import ClassSecurityInfo
@@ -360,7 +360,6 @@
headers[key] = value
self._editMetadata(title=headers['Title'],
subject=headers['Subject'],
- description=headers['Description'],
contributors=headers['Contributors'],
effective_date=headers['Effective_date'],
expiration_date=headers['Expiration_date'],
@@ -372,14 +371,16 @@
security.declarePublic( 'getMetadataHeaders' )
def getMetadataHeaders(self):
"""Return RFC-822-style header spec."""
- hdrlist = DefaultDublinCoreImpl.getMetadataHeaders(self)
- hdrlist.append( ('StartDate', self.start().strftime("%Y-%m-%d %H:%M:%S") ) )
- hdrlist.append( ('EndDate', self.end().strftime("%Y-%m-%d %H:%M:%S") ) )
- hdrlist.append( ('Location', self.location) )
- hdrlist.append( ('ContactName', self.contact_name) )
- hdrlist.append( ('ContactEmail', self.contact_email) )
- hdrlist.append( ('ContactPhone', self.contact_phone) )
- hdrlist.append( ('EventURL', self.event_url) )
+ fmt = '%Y-%m-%d %H:%M:%S'
+ hdrlist = [x for x in DefaultDublinCoreImpl.getMetadataHeaders(self)
+ if x[0] != 'Description']
+ hdrlist.append(('Startdate', self.start().strftime(fmt)))
+ hdrlist.append(('Enddate', self.end().strftime(fmt)))
+ hdrlist.append(('Location', self.location))
+ hdrlist.append(('Contactname', self.contact_name))
+ hdrlist.append(('Contactemail', self.contact_email))
+ hdrlist.append(('Contactphone', self.contact_phone))
+ hdrlist.append(('Eventurl', self.event_url))
return hdrlist
@@ -400,13 +401,14 @@
try:
headers, body, format = self.handleText(text=body)
self.setMetadata(headers)
- self.setStartDate(headers['StartDate'])
- self.setEndDate(headers['EndDate'])
+ self.setStartDate(headers['Startdate'])
+ self.setEndDate(headers['Enddate'])
self.edit( location=headers['Location']
- , contact_name=headers['ContactName']
- , contact_email=headers['ContactEmail']
- , contact_phone=headers['ContactPhone']
- , event_url=headers['EventURL']
+ , contact_name=headers['Contactname']
+ , contact_email=headers['Contactemail']
+ , contact_phone=headers['Contactphone']
+ , event_url=headers['Eventurl']
+ , description=body
)
except ResourceLockedError, msg:
Modified: zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py (original)
+++ zope-cmf1.6/trunk/CMFCalendar/tests/test_Calendar.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Unit tests for CalendarTool module.
-$Id: test_Calendar.py 66245 2006-03-28 17:02:36Z jens $
+$Id: test_Calendar.py 70893 2006-10-23 18:26:54Z jens $
"""
import unittest
@@ -30,7 +30,8 @@
from AccessControl.SecurityManagement import noSecurityManager
from AccessControl.User import UnrestrictedUser
from DateTime import DateTime
-from Products.ExternalMethod.ExternalMethod import manage_addExternalMethod
+import Products
+from Products.Five import zcml
from Products.TemporaryFolder.TemporaryFolder import MountedTemporaryFolder
from Products.Transience.Transience import TransientObjectContainer
from Products.CMFCore.tests.base.testcase import WarningInterceptor
@@ -43,6 +44,14 @@
from Products.CMFCore.utils import transaction
from Products.CMFCore import Skinnable
+try:
+ from zope.testing.cleanup import cleanUp
+except:
+ # BBB: for Zope 2.8
+ from zope.testing.cleanup import CleanUp
+ cleanup_ob = CleanUp()
+ cleanUp = cleanup_ob.cleanUp
+
class CalendarTests(unittest.TestCase):
@@ -88,6 +97,12 @@
def setUp(self):
self._trap_warning_output()
+ zcml.load_config('meta.zcml', Products.Five)
+ zcml.load_config('configure.zcml', Products.Five)
+ zcml.load_config('configure.zcml', Products.GenericSetup)
+ zcml.load_config('configure.zcml', Products.CMFCore)
+ zcml.load_config('configure.zcml', Products.CMFDefault)
+ zcml.load_config('configure.zcml', Products.DCWorkflow)
self._oldSkindata = Skinnable.SKINDATA.copy()
transaction.begin()
@@ -96,23 +111,13 @@
newSecurityManager(None,
UnrestrictedUser('god', 'god', ['Manager'], '') )
- #app.manage_addProduct['CMFDefault'].manage_addCMFSite('CalendarTest')
- addConfiguredSite(app, 'CalendarTest', 'CMFDefault:default')
+ factory = app.manage_addProduct['CMFDefault'].addConfiguredSite
+ factory('CalendarTest', 'CMFDefault:default', snapshot=False,
+ extension_ids=('CMFCalendar:default',))
self.Site = app.CalendarTest
- manage_addExternalMethod(app.CalendarTest,
- id='install_events',
- title="Install Events",
- module="CMFCalendar.Install",
- function="install")
-
- ExMethod = app.restrictedTraverse('/CalendarTest/install_events')
- ExMethod()
self.Tool = app.CalendarTest.portal_calendar
-
- self.Site.clearCurrentSkin()
- self.Site.setupCurrentSkin(app.REQUEST)
# sessioning setup
if getattr(app, 'temp_folder', None) is None:
@@ -131,6 +136,7 @@
self.app._p_jar.close()
Skinnable.SKINDATA = self._oldSkindata
self._free_warning_output()
+ cleanUp()
def _testURL(self,url,params=None):
Site = self.Site
Modified: zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py (original)
+++ zope-cmf1.6/trunk/CMFCalendar/tests/test_Event.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Unit tests for Event module.
-$Id: test_Event.py 38418 2005-09-09 08:40:13Z yuppie $
+$Id: test_Event.py 74056 2007-04-09 19:37:51Z tseaver $
"""
from unittest import TestCase, TestSuite, makeSuite, main
@@ -121,6 +121,25 @@
, startAMPM="AM"
)
+EVENT_TXT = """\
+Title: Test Event
+Subject: Foosubject
+Contributors: Jim
+Effective_date: 2002-01-01T00:00:00Z
+Expiration_date: 2009-12-31T00:00:00Z
+StartDate: 2006/02/23 18:00
+EndDate: 2006/02/23 23:00
+Location: Spuds and Suds, River Street, Anytown
+Language: French
+Rights: Anytown Gazetteer
+ContactName: Jim
+ContactEmail: jim at example.com
+ContactPhone: (888) 555-1212
+EventURL: http://www.example.com
+Creator: Jim
+
+Fundraiser for disabled goldfish
+"""
class EventPUTTests(RequestTest):
@@ -140,10 +159,40 @@
self.assertEqual( d.Description(), '' )
self.assertEqual( d.Subject(), () )
self.assertEqual( d.Contributors(), () )
- self.assertEqual( d.EffectiveDate(), 'None' )
- self.assertEqual( d.ExpirationDate(), 'None' )
+ self.assertEqual( d.EffectiveDate('UTC'), 'None' )
+ self.assertEqual( d.ExpirationDate('UTC'), 'None' )
self.assertEqual( d.Language(), '' )
self.assertEqual( d.Rights(), '' )
+ self.assertEqual( d.location, '' )
+ self.assertEqual( d.contact_name, '' )
+ self.assertEqual( d.contact_email, '' )
+ self.assertEqual( d.contact_phone, '' )
+ self.assertEqual( d.event_url, '' )
+
+ def test_PutWithMetadata(self):
+ self.REQUEST['BODY'] = EVENT_TXT
+ self.REQUEST.environ['CONTENT_TYPE'] = 'text/html'
+ d = self._makeOne('foo')
+ d.PUT(self.REQUEST, self.RESPONSE)
+
+ self.assertEqual( d.Title(), 'Test Event' )
+ self.assertEqual( d.Format(), 'text/html' )
+ self.assertEqual( d.Description().strip()
+ , 'Fundraiser for disabled goldfish'
+ )
+ self.assertEqual( d.Subject(), ('Foosubject',) )
+ self.assertEqual( d.Contributors(), ('Jim',) )
+ self.assertEqual( d.EffectiveDate('UTC'), '2002-01-01 00:00:00' )
+ self.assertEqual( d.ExpirationDate('UTC'), '2009-12-31 00:00:00' )
+ self.assertEqual( d.Language(), 'French' )
+ self.assertEqual( d.Rights(), 'Anytown Gazetteer' )
+ self.assertEqual( d.location, 'Spuds and Suds, River Street, Anytown' )
+ self.assertEqual( d.contact_name, 'Jim' )
+ self.assertEqual( d.contact_email, 'jim at example.com' )
+ self.assertEqual( d.contact_phone, '(888) 555-1212' )
+ self.assertEqual( d.event_url, 'http://www.example.com' )
+ self.assertEqual( d.start(), DateTime('2006/02/23 18:00') )
+ self.assertEqual( d.end(), DateTime('2006/02/23 23:00') )
def test_suite():
Modified: zope-cmf1.6/trunk/CMFCalendar/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCalendar/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCalendar/version.txt (original)
+++ zope-cmf1.6/trunk/CMFCalendar/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/CMFCore/CatalogTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/CatalogTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/CatalogTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/CatalogTool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Basic portal catalog.
-$Id: CatalogTool.py 69316 2006-07-31 16:54:39Z shh $
+$Id: CatalogTool.py 74720 2007-04-24 20:19:37Z tseaver $
"""
from warnings import warn
@@ -134,10 +134,7 @@
def __init__(self):
ZCatalog.__init__(self, self.getId())
- warn('CatalogTool._initIndexes is deprecated and will be removed in '
- 'CMF 2.0.',
- DeprecationWarning)
- self._initIndexes()
+ self._initIndexes(internal_cmf_16=True)
#
# Subclass extension interface
@@ -216,7 +213,11 @@
, 'portal_type'
)
- def _initIndexes(self):
+ def _initIndexes(self, internal_cmf_16=False):
+ if not internal_cmf_16:
+ warn('CatalogTool._initIndexes is deprecated and will be '
+ 'removed in CMF 2.0.', DeprecationWarning)
+
# ZCTextIndex lexicons
for id, splitter, normalizer, sw_remover in self.enumerateLexicons():
lexicon = PLexicon(id, '', splitter, normalizer, sw_remover)
Modified: zope-cmf1.6/trunk/CMFCore/DynamicType.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/DynamicType.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/DynamicType.py (original)
+++ zope-cmf1.6/trunk/CMFCore/DynamicType.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" DynamicType: Mixin for dynamic properties.
-$Id: DynamicType.py 38612 2005-09-25 13:02:39Z jens $
+$Id: DynamicType.py 71508 2006-12-09 15:02:06Z philikon $
"""
from urllib import quote
@@ -23,6 +23,14 @@
from interfaces.Dynamic import DynamicType as IDynamicType
from utils import getToolByName
+try:
+ from zope.app.publisher.browser import queryDefaultViewName
+ from zope.component import queryMultiAdapter
+ def queryView(obj, name, request):
+ return queryMultiAdapter((obj, request), name=name)
+except ImportError:
+ # BBB for Zope 2.8
+ from zope.component import queryDefaultViewName, queryView
class DynamicType:
"""
@@ -117,6 +125,18 @@
stack = REQUEST['TraversalRequestNameStack']
key = stack and stack[-1] or '(Default)'
+
+ # if there's a Zope3-style default view name set and the
+ # corresponding view exists, take that in favour of the FTI's
+ # default view
+ if key == '(Default)':
+ viewname = queryDefaultViewName(self, REQUEST)
+ if (viewname and
+ queryView(self, viewname, REQUEST) is not None):
+ stack.append(viewname)
+ REQUEST._hacked_path = 1
+ return
+
ti = self.getTypeInfo()
method_id = ti and ti.queryMethodID(key, context=self)
if method_id:
Modified: zope-cmf1.6/trunk/CMFCore/MembershipTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/MembershipTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/MembershipTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/MembershipTool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Basic membership tool.
-$Id: MembershipTool.py 68523 2006-06-08 16:23:41Z efge $
+$Id: MembershipTool.py 74141 2007-04-15 04:39:02Z alecm $
"""
import logging
@@ -45,6 +45,7 @@
from utils import _getAuthenticatedUser
from utils import getToolByName
from utils import UniqueObject
+from utils import postonly
logger = logging.getLogger('CMFCore.MembershipTool')
@@ -89,7 +90,7 @@
manage_mapRoles = DTMLFile('membershipRolemapping', _dtmldir )
security.declareProtected(SetOwnPassword, 'setPassword')
- def setPassword(self, password, domains=None):
+ def setPassword(self, password, domains=None, REQUEST=None):
'''Allows the authenticated member to set his/her own password.
'''
registration = getToolByName(self, 'portal_registration', None)
@@ -102,6 +103,7 @@
member.setSecurityProfile(password=password, domains=domains)
else:
raise BadRequest('Not logged in.')
+ setPassword = postonly(setPassword)
security.declarePublic('getAuthenticatedMember')
def getAuthenticatedMember(self):
@@ -166,7 +168,7 @@
return roles
security.declareProtected(ManagePortal, 'setRoleMapping')
- def setRoleMapping(self, portal_role, userfolder_role):
+ def setRoleMapping(self, portal_role, userfolder_role, REQUEST=None):
"""
set the mapping of roles between roles understood by
the portal and roles coming from outside user sources
@@ -182,6 +184,7 @@
title ='Mapping updated',
message='The Role mappings have been updated',
action ='manage_mapRoles')
+ setRoleMapping = postonly(setRoleMapping)
security.declareProtected(ManagePortal, 'getMappedRole')
def getMappedRole(self, portal_role):
@@ -282,7 +285,7 @@
createMemberarea = createMemberArea
security.declareProtected(ManageUsers, 'deleteMemberArea')
- def deleteMemberArea(self, member_id):
+ def deleteMemberArea(self, member_id, REQUEST=None):
""" Delete member area of member specified by member_id.
"""
members = self.getMembersFolder()
@@ -293,6 +296,7 @@
return 1
else:
return 0
+ deleteMemberArea = postonly(deleteMemberArea)
security.declarePublic('isAnonymousUser')
def isAnonymousUser(self):
@@ -413,7 +417,8 @@
return tuple(local_roles)
security.declareProtected(View, 'setLocalRoles')
- def setLocalRoles(self, obj, member_ids, member_role, reindex=1):
+ def setLocalRoles(self, obj, member_ids, member_role, reindex=1,
+ REQUEST=None):
""" Add local roles on an item.
"""
if ( _checkPermission(ChangeLocalRoles, obj)
@@ -430,9 +435,11 @@
# reindexObjectSecurity, which is in CMFCatalogAware and
# thus PortalContent and PortalFolder.
obj.reindexObjectSecurity()
+ setLocalRoles = postonly(setLocalRoles)
security.declareProtected(View, 'deleteLocalRoles')
- def deleteLocalRoles(self, obj, member_ids, reindex=1, recursive=0):
+ def deleteLocalRoles(self, obj, member_ids, reindex=1, recursive=0,
+ REQUEST=None):
""" Delete local roles of specified members.
"""
if _checkPermission(ChangeLocalRoles, obj):
@@ -448,6 +455,7 @@
if reindex:
# reindexObjectSecurity is always recursive
obj.reindexObjectSecurity()
+ deleteLocalRoles = postonly(deleteLocalRoles)
security.declarePrivate('addMember')
def addMember(self, id, password, roles, domains, properties=None):
@@ -471,7 +479,7 @@
security.declareProtected(ManageUsers, 'deleteMembers')
def deleteMembers(self, member_ids, delete_memberareas=1,
- delete_localroles=1):
+ delete_localroles=1, REQUEST=None):
""" Delete members specified by member_ids.
"""
@@ -511,6 +519,7 @@
reindex=1, recursive=1 )
return tuple(member_ids)
+ deleteMembers = postonly(deleteMembers)
security.declarePublic('getHomeFolder')
def getHomeFolder(self, id=None, verifyPermission=0):
Modified: zope-cmf1.6/trunk/CMFCore/RegistrationTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/RegistrationTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/RegistrationTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/RegistrationTool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Basic user registration tool.
-$Id: RegistrationTool.py 36633 2004-10-29 14:37:36Z jens $
+$Id: RegistrationTool.py 73957 2007-03-31 18:25:46Z alecm $
"""
import re
@@ -32,6 +32,7 @@
from utils import _limitGrantedRoles
from utils import getToolByName
from utils import _dtmldir
+from utils import postonly
from interfaces.portal_registration \
import portal_registration as IRegistrationTool
@@ -128,7 +129,7 @@
security.declareProtected(AddPortalMember, 'addMember')
def addMember(self, id, password, roles=('Member',), domains='',
- properties=None):
+ properties=None, REQUEST=None):
'''Creates a PortalMember and returns it. The properties argument
can be a mapping with additional member properties. Raises an
exception if the given id already exists, the password does not
@@ -160,6 +161,7 @@
member = membership.getMemberById(id)
self.afterAdd(member, id, password, properties)
return member
+ addMember = postonly(addMember)
security.declareProtected(AddPortalMember, 'isMemberIdAllowed')
def isMemberIdAllowed(self, id):
Modified: zope-cmf1.6/trunk/CMFCore/SkinsTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/SkinsTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/SkinsTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/SkinsTool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
"""Portal skins tool.
-$Id: SkinsTool.py 36910 2005-04-07 16:37:47Z yuppie $
+$Id: SkinsTool.py 74143 2007-04-15 05:06:19Z alecm $
"""
from AccessControl import ClassSecurityInfo
@@ -306,8 +306,8 @@
mtool = getToolByName(self, 'portal_membership')
utool = getToolByName(self, 'portal_url')
member = mtool.getAuthenticatedMember()
- if hasattr(aq_base(member), 'portal_skin'):
- mskin = member.portal_skin
+ if hasattr(aq_base(member), 'getProperty'):
+ mskin = member.getProperty('portal_skin', None)
if mskin:
req = self.REQUEST
cookie = req.cookies.get(self.request_varname, None)
Modified: zope-cmf1.6/trunk/CMFCore/WorkflowTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/WorkflowTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/WorkflowTool.py (original)
+++ zope-cmf1.6/trunk/CMFCore/WorkflowTool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Basic workflow tool.
-$Id: WorkflowTool.py 40346 2005-11-23 17:15:03Z yuppie $
+$Id: WorkflowTool.py 73954 2007-03-31 13:53:30Z alecm $
"""
import sys
@@ -33,6 +33,7 @@
from utils import _dtmldir
from utils import getToolByName
from utils import UniqueObject
+from utils import postonly
from WorkflowCore import ObjectDeleted
from WorkflowCore import ObjectMoved
from WorkflowCore import WorkflowException
@@ -188,6 +189,7 @@
if REQUEST is not None:
return self.manage_selectWorkflows(REQUEST,
manage_tabs_message='Changed.')
+ manage_changeWorkflows = postonly(manage_changeWorkflows)
#
# portal_workflow implementation.
@@ -437,7 +439,7 @@
# Administration methods
#
security.declareProtected( ManagePortal, 'setDefaultChain')
- def setDefaultChain(self, default_chain):
+ def setDefaultChain(self, default_chain, REQUEST=None):
""" Set the default chain for this tool
"""
@@ -450,9 +452,11 @@
ids.append(wf_id)
self._default_chain = tuple(ids)
+ setDefaultChain = postonly(setDefaultChain)
security.declareProtected( ManagePortal, 'setChainForPortalTypes')
- def setChainForPortalTypes(self, pt_names, chain, verify=True):
+ def setChainForPortalTypes(self, pt_names, chain, verify=True,
+ REQUEST=None):
""" Set a chain for a specific portal type.
"""
cbt = self._chains_by_type
@@ -468,6 +472,7 @@
if verify and not (type_id in ti_ids):
continue
cbt[type_id] = tuple(chain)
+ setChainForPortalTypes = postonly(setChainForPortalTypes)
security.declareProtected( ManagePortal, 'updateRoleMappings')
def updateRoleMappings(self, REQUEST=None):
@@ -486,6 +491,7 @@
'%d object(s) updated.' % count)
else:
return count
+ updateRoleMappings = postonly(updateRoleMappings)
security.declarePrivate('getWorkflowById')
def getWorkflowById(self, wf_id):
Modified: zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml (original)
+++ zope-cmf1.6/trunk/CMFCore/dtml/selectWorkflows.dtml Mon Aug 6 21:16:42 2007
@@ -50,7 +50,7 @@
Click the button below to update the security settings of all
workflow-aware objects in this portal.
-<form action="updateRoleMappings" method="GET">
+<form action="updateRoleMappings" method="POST">
<input type="submit" name="submit" value="Update security settings" />
</form>
</p>
Modified: zope-cmf1.6/trunk/CMFCore/exportimport/properties.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/exportimport/properties.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/exportimport/properties.py (original)
+++ zope-cmf1.6/trunk/CMFCore/exportimport/properties.py Mon Aug 6 21:16:42 2007
@@ -68,7 +68,7 @@
importer = zapi.queryMultiAdapter((site, context), IBody)
if importer is None:
- logger.warning('Import adapter misssing.')
+ logger.warning('Import adapter missing.')
return
importer.body = body
@@ -81,7 +81,7 @@
exporter = zapi.queryMultiAdapter((site, context), IBody)
if exporter is None:
- logger.warning('Export adapter misssing.')
+ logger.warning('Export adapter missing.')
return
context.writeDataFile(_FILENAME, exporter.body, exporter.mime_type)
Modified: zope-cmf1.6/trunk/CMFCore/interfaces/_content.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/interfaces/_content.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/interfaces/_content.py (original)
+++ zope-cmf1.6/trunk/CMFCore/interfaces/_content.py Mon Aug 6 21:16:42 2007
@@ -256,44 +256,59 @@
o 'initial caps' names are reserved for strings.
"""
- def Date():
+ def Date(zone=None):
""" Return the DCMI Date element (default resource date).
o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ'.
- o Permission: View
- """
-
- def CreationDate():
+ o If 'zone' is 'None', return the time in the system default
+ timezone.
+
+ o Permission: View
+ """
+
+ def CreationDate(zone=None):
""" Return the DCMI Date element (date resource created).
o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ'.
- o Permission: View
- """
-
- def EffectiveDate():
+ o If 'zone' is 'None', return the time in the system default
+ timezone.
+
+ o Permission: View
+ """
+
+ def EffectiveDate(zone=None):
""" Return the DCMI Date element (date resource becomes effective).
o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ', or
None.
- o Permission: View
- """
-
- def ExpirationDate():
+ o If 'zone' is 'None', return the time in the system default
+ timezone.
+
+ o Permission: View
+ """
+
+ def ExpirationDate(zone=None):
""" Return the DCMI Date element (date resource expires).
o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ', or
None.
- o Permission: View
- """
-
- def ModificationDate():
+ o If 'zone' is 'None', return the time in the system default
+ timezone.
+
+ o Permission: View
+ """
+
+ def ModificationDate(zone=None):
""" DCMI Date element - date resource last modified.
o Result is a string, formatted 'YYYY-MM-DD H24:MN:SS TZ'.
+
+ o If 'zone' is 'None', return the time in the system default
+ timezone.
o Permission: View
"""
Modified: zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py (original)
+++ zope-cmf1.6/trunk/CMFCore/tests/test_DynamicType.py Mon Aug 6 21:16:42 2007
@@ -12,19 +12,18 @@
##############################################################################
""" Unit tests for DynamicType module.
-$Id: test_DynamicType.py 38612 2005-09-25 13:02:39Z jens $
+$Id: test_DynamicType.py 71509 2006-12-09 15:05:30Z philikon $
"""
from unittest import TestCase, TestSuite, makeSuite, main
import Testing
-try:
- import Zope2
-except ImportError: # BBB: for Zope 2.7
- import Zope as Zope2
+import Zope2
Zope2.startup()
+from StringIO import StringIO
+
from Acquisition import Implicit
-from ZPublisher.BaseRequest import BaseRequest
+from ZPublisher.HTTPRequest import HTTPRequest
from ZPublisher.HTTPResponse import HTTPResponse
from Products.CMFCore.DynamicType import DynamicType
@@ -36,56 +35,145 @@
from Products.CMFCore.TypesTool import FactoryTypeInformation as FTI
from Products.CMFCore.TypesTool import TypesTool
-
-class DummyContent(DynamicType, Implicit):
+import zope.component
+from zope.interface import Interface, implements
+from zope.component.tests.placelesssetup import PlacelessSetup
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.app.publisher.interfaces.browser import IBrowserView
+
+from Products.Five.traversable import FiveTraversable
+from Products.Five.traversable import Traversable
+from Products.Five.browser import BrowserView
+from zope.app.traversing.adapters import Traverser
+from zope.app.traversing.interfaces import ITraverser, ITraversable
+
+def defineDefaultViewName(name, for_=None):
+ try:
+ from zope.component.interfaces import IDefaultViewName
+ zope.component.provideAdapter(name, (for_, IBrowserRequest),
+ IDefaultViewName, '')
+ except ImportError:
+ # BBB for Zope 2.8
+ pres = zope.component.getService(zope.component.Presentation)
+ pres.setDefaultViewName(for_, IBrowserRequest, name)
+
+class IDummyContent(Interface):
+ pass
+
+class DummyContent(Traversable, DynamicType, Implicit):
""" Basic dynamic content class.
"""
-
+ implements(IDummyContent)
portal_type = 'Dummy Content 15'
+class DummyView(BrowserView):
+ """This is a view"""
+
+
class DynamicTypeTests(TestCase):
+ def test_z2interfaces(self):
+ from Interface.Verify import verifyClass
+ from Products.CMFCore.interfaces.Dynamic \
+ import DynamicType as IDynamicType
+
+ verifyClass(IDynamicType, DynamicType)
+
+ def test_z3interfaces(self):
+ from zope.interface.verify import verifyClass
+ from Products.CMFCore.interfaces import IDynamicType
+ verifyClass(IDynamicType, DynamicType)
+
+class DynamicTypeDefaultTraversalTests(PlacelessSetup, TestCase):
+
def setUp(self):
+ super(DynamicTypeDefaultTraversalTests, self).setUp()
+
self.site = DummySite('site')
self.site._setObject( 'portal_types', TypesTool() )
fti = FTIDATA_CMF15[0].copy()
self.site.portal_types._setObject( 'Dummy Content 15', FTI(**fti) )
self.site._setObject( 'foo', DummyContent() )
-
- def test_z2interfaces(self):
- from Interface.Verify import verifyClass
- from Products.CMFCore.interfaces.Dynamic \
- import DynamicType as IDynamicType
-
- verifyClass(IDynamicType, DynamicType)
-
- def test_z3interfaces(self):
+ dummy_view = self.site._setObject( 'dummy_view', DummyObject() )
+
try:
- from zope.interface.verify import verifyClass
- from Products.CMFCore.interfaces import IDynamicType
+ from zope.component import provideAdapter
+ provideAdapter(FiveTraversable, (None,), ITraversable)
+ provideAdapter(Traverser, (None,), ITraverser)
except ImportError:
- # BBB: for Zope 2.7
- return
-
- verifyClass(IDynamicType, DynamicType)
-
- def test___before_publishing_traverse__(self):
- dummy_view = self.site._setObject( 'dummy_view', DummyObject() )
+ # BBB for Zope 2.8
+ from zope.app.tests import ztapi
+ ztapi.provideAdapter(None, ITraversable, FiveTraversable)
+ ztapi.provideAdapter(None, ITraverser, Traverser)
+
+ def test_default_view_from_fti(self):
response = HTTPResponse()
environment = { 'URL': '',
'PARENTS': [self.site],
'REQUEST_METHOD': 'GET',
+ 'SERVER_NAME': 'localhost',
+ 'SERVER_PORT': '80',
+ 'REQUEST_METHOD': 'GET',
'steps': [],
- '_hacked_path': 0,
- 'response': response }
- r = BaseRequest(environment)
+ '_hacked_path': 0}
+ r = HTTPRequest(StringIO(), environment, response)
+ r.other.update(environment)
r.traverse('foo')
self.assertEqual( r.URL, '/foo/dummy_view' )
self.assertEqual( r.response.base, '/foo/',
'CMF Collector issue #192 (wrong base): %s'
% (r.response.base or 'empty',) )
+
+ def test_default_viewname_but_no_view_doesnt_override_fti(self):
+ response = HTTPResponse()
+ environment = { 'URL': '',
+ 'PARENTS': [self.site],
+ 'REQUEST_METHOD': 'GET',
+ 'SERVER_NAME': 'localhost',
+ 'SERVER_PORT': '80',
+ 'REQUEST_METHOD': 'GET',
+ 'steps': [],
+ '_hacked_path': 0 }
+ r = HTTPRequest(StringIO(), environment, response)
+ r.other.update(environment)
+
+ # we define a Zope3-style default view name, but no
+ # corresponding view, no change in behaviour expected
+ defineDefaultViewName('index.html', IDummyContent)
+ r.traverse('foo')
+ self.assertEqual( r.URL, '/foo/dummy_view' )
+ self.assertEqual( r.response.base, '/foo/' )
+
+ def test_default_viewname_overrides_fti(self):
+ response = HTTPResponse()
+ environment = { 'URL': '',
+ 'PARENTS': [self.site],
+ 'REQUEST_METHOD': 'GET',
+ 'SERVER_PORT': '80',
+ 'REQUEST_METHOD': 'GET',
+ 'steps': [],
+ 'SERVER_NAME': 'localhost',
+ '_hacked_path': 0 }
+ r = HTTPRequest(StringIO(), environment, response)
+ r.other.update(environment)
+
+ # we define a Zope3-style default view name for which a view
+ # actually exists
+ defineDefaultViewName('index.html', IDummyContent)
+ try:
+ from zope.component import provideAdapter
+ provideAdapter(DummyView, (DummyContent, IBrowserRequest),
+ IBrowserView, 'index.html')
+ except ImportError:
+ # BBB for Zope 2.8
+ from zope.app.tests import ztapi
+ ztapi.browserView(IDummyContent, 'index.html', DummyView)
+
+ r.traverse('foo')
+ self.assertEqual( r.URL, '/foo/index.html' )
+ self.assertEqual( r.response.base, '/foo/' )
class DynamicTypeSecurityTests(SecurityRequestTest):
@@ -122,6 +210,7 @@
def test_suite():
return TestSuite((
makeSuite(DynamicTypeTests),
+ makeSuite(DynamicTypeDefaultTraversalTests),
makeSuite(DynamicTypeSecurityTests),
))
Modified: zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py (original)
+++ zope-cmf1.6/trunk/CMFCore/tests/test_PortalContent.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Unit tests for PortalContent module.
-$Id: test_PortalContent.py 69189 2006-07-18 18:48:28Z tseaver $
+$Id: test_PortalContent.py 74719 2007-04-24 20:13:48Z tseaver $
"""
from unittest import TestCase, TestSuite, makeSuite, main
@@ -36,12 +36,13 @@
from Products.CMFCore.tests.base.dummy import DummySite
from Products.CMFCore.tests.base.dummy import DummyUserFolder
from Products.CMFCore.tests.base.testcase import SecurityRequestTest
+from Products.CMFCore.tests.base.testcase import WarningInterceptor
from Products.CMFCore.tests.base.dummy import DummyTool
from Products.CMFCore.tests.base.dummy import DummyContent
from Products.CMFCore.tests.base.dummy import DummyObject
from OFS.Folder import Folder
-class PortalContentTests(TestCase):
+class PortalContentTests(TestCase, WarningInterceptor):
def test_z2interfaces(self):
from Interface.Verify import verifyClass
@@ -88,6 +89,7 @@
# in unfixed version fail here with AttributeError
# can end up with this arrangement using _getAliases though
# in fixed version, falls through to _getViewFor, which is BBB
+ self._trap_warning_output()
self.assertEqual( ob(), 'dummy' )
def test_BlankDefaultAlias(self):
@@ -96,6 +98,7 @@
)
ob = self._setupCallTests(test_aliases)
# blank default is BBB
+ self._trap_warning_output()
self.assertEqual( ob(), 'dummy' )
def test_SpecificAlias(self):
Modified: zope-cmf1.6/trunk/CMFCore/utils.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/utils.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/utils.py (original)
+++ zope-cmf1.6/trunk/CMFCore/utils.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Utility functions.
-$Id: utils.py 41663 2006-02-18 13:57:52Z jens $
+$Id: utils.py 73951 2007-03-31 09:50:35Z alecm $
"""
from os import path as os_path
@@ -862,3 +862,14 @@
def __init__(self, **kw):
self.__dict__.update(kw)
+
+# postonly decorator is only available in Zope 2.8.9, 2.9.7, 2.10.3 and 2.11,
+# or in Hotfix_20070320.
+try:
+ from AccessControl.requestmethod import postonly
+except ImportError:
+ try:
+ from Products.Hotfix_20070320 import postonly
+ except ImportError:
+ def postonly(callable):
+ return callable
Modified: zope-cmf1.6/trunk/CMFCore/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFCore/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFCore/version.txt (original)
+++ zope-cmf1.6/trunk/CMFCore/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/CMFDefault/Document.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/Document.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/Document.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/Document.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Basic textual content object, supporting HTML, STX and plain text.
-$Id: Document.py 40364 2005-11-24 18:23:00Z yuppie $
+$Id: Document.py 70021 2006-09-07 10:16:08Z jens $
"""
from AccessControl import ClassSecurityInfo
@@ -31,12 +31,17 @@
from Products.CMFCore.PortalContent import PortalContent
from Products.CMFCore.utils import contributorsplitter
from Products.CMFCore.utils import keywordsplitter
-
+from zope.interface import implements
+
+from Products.GenericSetup.interfaces import IDAVAware
from DublinCore import DefaultDublinCoreImpl
from exceptions import EditingConflict
from exceptions import ResourceLockedError
-from interfaces.Document import IDocument
-from interfaces.Document import IMutableDocument
+from interfaces.Document import IDocument as z2IDocument
+from interfaces.Document import IMutableDocument as z2IMutableDocument
+from interfaces import IDocument
+from interfaces import IMutableDocument
+
from permissions import ModifyPortalContent
from permissions import View
from utils import _dtmldir
@@ -90,7 +95,8 @@
class Document(PortalContent, DefaultDublinCoreImpl):
""" A Document - Handles both StructuredText and HTML """
- __implements__ = (IDocument, IMutableDocument,
+ implements(IDocument, IMutableDocument, IDAVAware)
+ __implements__ = (z2IDocument, z2IMutableDocument,
PortalContent.__implements__,
DefaultDublinCoreImpl.__implements__)
Modified: zope-cmf1.6/trunk/CMFDefault/DublinCore.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/DublinCore.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/DublinCore.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/DublinCore.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Dublin Core support for content types.
-$Id: DublinCore.py 36913 2005-04-09 23:00:10Z slinkp $
+$Id: DublinCore.py 74056 2007-04-09 19:37:51Z tseaver $
"""
from AccessControl import ClassSecurityInfo
@@ -177,44 +177,54 @@
return self.listContributors()
security.declareProtected(View, 'Date')
- def Date( self ):
+ def Date( self, zone=None ):
""" Dublin Core Date element - default date.
"""
+ if zone is None:
+ zone = _zone
# Return effective_date if set, modification date otherwise
date = getattr(self, 'effective_date', None )
if date is None:
date = self.modified()
- return date.toZone(_zone).ISO()
+ return date.toZone(zone).ISO()
security.declareProtected(View, 'CreationDate')
- def CreationDate( self ):
+ def CreationDate( self, zone=None ):
""" Dublin Core Date element - date resource created.
"""
+ if zone is None:
+ zone = _zone
# return unknown if never set properly
if self.creation_date:
- return self.creation_date.toZone(_zone).ISO()
+ return self.creation_date.toZone(zone).ISO()
else:
return 'Unknown'
security.declareProtected(View, 'EffectiveDate')
- def EffectiveDate( self ):
+ def EffectiveDate( self, zone=None ):
""" Dublin Core Date element - date resource becomes effective.
"""
+ if zone is None:
+ zone = _zone
ed = getattr( self, 'effective_date', None )
- return ed and ed.toZone(_zone).ISO() or 'None'
+ return ed and ed.toZone(zone).ISO() or 'None'
security.declareProtected(View, 'ExpirationDate')
- def ExpirationDate( self ):
+ def ExpirationDate( self, zone=None ):
""" Dublin Core Date element - date resource expires.
"""
+ if zone is None:
+ zone = _zone
ed = getattr( self, 'expiration_date', None )
- return ed and ed.toZone(_zone).ISO() or 'None'
+ return ed and ed.toZone(zone).ISO() or 'None'
security.declareProtected(View, 'ModificationDate')
- def ModificationDate( self ):
+ def ModificationDate( self, zone=None ):
""" Dublin Core Date element - date resource last modified.
"""
- return self.modified().toZone(_zone).ISO()
+ if zone is None:
+ zone = _zone
+ return self.modified().toZone(zone).ISO()
security.declareProtected(View, 'Type')
def Type( self ):
Modified: zope-cmf1.6/trunk/CMFDefault/File.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/File.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/File.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/File.py Mon Aug 6 21:16:42 2007
@@ -14,7 +14,7 @@
Zope's built-in File object, but modifies the behaviour slightly to
make it more Portal-friendly.
-$Id: File.py 40401 2005-11-29 07:45:24Z rafrombrc $
+$Id: File.py 70021 2006-09-07 10:16:08Z jens $
"""
from Globals import InitializeClass
@@ -26,6 +26,8 @@
from permissions import View
from permissions import ModifyPortalContent
+from zope.interface import implements
+from Products.GenericSetup.interfaces import IDAVAware
factory_type_information = (
{ 'id' : 'File'
@@ -110,6 +112,7 @@
A Portal-managed File
"""
+ implements(IDAVAware)
__implements__ = ( PortalContent.__implements__
, DefaultDublinCoreImpl.__implements__
)
Modified: zope-cmf1.6/trunk/CMFDefault/Image.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/Image.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/Image.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/Image.py Mon Aug 6 21:16:42 2007
@@ -13,7 +13,7 @@
""" This module implements a portal-managed Image class. It is based on
Zope's built-in Image object.
-$Id: Image.py 40401 2005-11-29 07:45:24Z rafrombrc $
+$Id: Image.py 70021 2006-09-07 10:16:08Z jens $
"""
from Globals import InitializeClass
@@ -24,6 +24,9 @@
from DublinCore import DefaultDublinCoreImpl
from permissions import View
from permissions import ModifyPortalContent
+
+from zope.interface import implements
+from Products.GenericSetup.interfaces import IDAVAware
factory_type_information = (
{ 'id' : 'Image'
@@ -102,6 +105,7 @@
A Portal-managed Image
"""
+ implements(IDAVAware)
__implements__ = ( PortalContent.__implements__
, DefaultDublinCoreImpl.__implements__
)
Modified: zope-cmf1.6/trunk/CMFDefault/Link.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/Link.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/Link.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/Link.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Link instances represent explicit links-as-content.
-$Id: Link.py 40364 2005-11-24 18:23:00Z yuppie $
+$Id: Link.py 70021 2006-09-07 10:16:08Z jens $
"""
import urlparse
@@ -37,6 +37,9 @@
from utils import _dtmldir
from utils import formatRFC822Headers
from utils import parseHeadersBody
+
+from zope.interface import implements
+from Products.GenericSetup.interfaces import IDAVAware
factory_type_information = (
{ 'id' : 'Link'
@@ -90,6 +93,7 @@
A Link
"""
+ implements(IDAVAware)
__implements__ = ( PortalContent.__implements__
, DefaultDublinCoreImpl.__implements__
)
Modified: zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/RegistrationTool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" CMFDefault portal_registration tool.
-$Id: RegistrationTool.py 41665 2006-02-18 14:34:20Z jens $
+$Id: RegistrationTool.py 73953 2007-03-31 13:47:07Z alecm $
"""
import re
@@ -21,6 +21,7 @@
from Products.CMFCore.utils import _checkPermission
from Products.CMFCore.utils import getToolByName
+from Products.CMFCore.utils import postonly
from Products.CMFCore.ActionInformation import ActionInformation
from Products.CMFCore.Expression import Expression
from Products.CMFCore.ActionProviderBase import ActionProviderBase
@@ -199,6 +200,7 @@
, password=None
, roles=None
, domains=None
+ , REQUEST = None
):
""" Edit a user's properties and security settings
@@ -212,6 +214,7 @@
member.setSecurityProfile(password,roles,domains)
return member
+ editMember = postonly(editMember)
InitializeClass(RegistrationTool)
Modified: zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/control/change_password.py Mon Aug 6 21:16:42 2007
@@ -9,7 +9,7 @@
context.REQUEST,
error=failMessage)
member = mt.getAuthenticatedMember()
-mt.setPassword(password, domains)
+mt.setPassword(password, domains, REQUEST=context.REQUEST)
mt.credentialsChanged(password)
return context.personalize_form(context,
context.REQUEST,
Modified: zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/control/folder_localrole_edit.py Mon Aug 6 21:16:42 2007
@@ -8,10 +8,12 @@
pm.setLocalRoles( obj=context
, member_ids=context.REQUEST.get('member_ids', ())
, member_role=context.REQUEST.get('member_role', '')
+ , REQUEST=context.REQUEST
)
else:
pm.deleteLocalRoles( obj=context
, member_ids=context.REQUEST.get('member_ids', ())
+ , REQUEST=context.REQUEST
)
qst='?portal_status_message=Local+Roles+changed.'
Modified: zope-cmf1.6/trunk/CMFDefault/skins/control/register.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/control/register.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/control/register.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/control/register.py Mon Aug 6 21:16:42 2007
@@ -18,7 +18,7 @@
return context.join_form( context, REQUEST, error=failMessage )
else:
password=REQUEST.get('password') or portal_registration.generatePassword()
- portal_registration.addMember(REQUEST['username'], password, properties=REQUEST)
+ portal_registration.addMember(REQUEST['username'], password, properties=REQUEST, REQUEST=REQUEST)
if portal_properties.validate_email or REQUEST.get('mail_me', 0):
portal_registration.registeredNotify(REQUEST['username'])
Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/change_password.py Mon Aug 6 21:16:42 2007
@@ -9,7 +9,7 @@
context.REQUEST,
error=failMessage)
member = mt.getAuthenticatedMember()
-mt.setPassword(password, domains)
+mt.setPassword(password, domains, REQUEST=context.REQUEST)
mt.credentialsChanged(password)
return context.personalize_form(context,
context.REQUEST,
Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/folder_localrole_edit.py Mon Aug 6 21:16:42 2007
@@ -7,10 +7,12 @@
pm.setLocalRoles( obj=context
, member_ids=context.REQUEST.get('member_ids', ())
, member_role=context.REQUEST.get('member_role', '')
+ , REQUEST=context.REQUEST
)
else:
pm.deleteLocalRoles( obj=context
, member_ids=context.REQUEST.get('member_ids', ())
+ , REQUEST=context.REQUEST
)
qst='?portal_status_message=Local+Roles+changed.'
Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_add_control.py Mon Aug 6 21:16:42 2007
@@ -11,7 +11,8 @@
try:
rtool.addMember( id=member_id, password=password,
properties={'username': member_id,
- 'email': member_email} )
+ 'email': member_email},
+ REQUEST=context.REQUEST)
except ValueError, errmsg:
return context.setStatus(False, errmsg)
else:
Modified: zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/skins/zpt_control/members_delete_control.py Mon Aug 6 21:16:42 2007
@@ -5,7 +5,7 @@
mtool = getToolByName(script, 'portal_membership')
-mtool.deleteMembers(ids)
+mtool.deleteMembers(ids,REQUEST=context.REQUEST)
return context.setStatus( True, 'Selected member%s deleted.' %
( len(ids) != 1 and 's' or '' ) )
Modified: zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py (original)
+++ zope-cmf1.6/trunk/CMFDefault/tests/test_DublinCore.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Unit tests for DublinCore module.
-$Id: test_DublinCore.py 38418 2005-09-09 08:40:13Z yuppie $
+$Id: test_DublinCore.py 74056 2007-04-09 19:37:51Z tseaver $
"""
from unittest import TestSuite, makeSuite, main
@@ -207,6 +207,35 @@
new_DC = getattr(item, dc_methodname)()
self.assertEqual(orig_DC, new_DC)
+ def test_Date_with_explicit_timezone(self):
+ item = self._makeDummyContent('item')
+ item.effective_date = DateTime('2007-01-01T12:00:00Z')
+ self.assertEqual(item.Date('US/Eastern'),
+ '2007-01-01 07:00:00')
+
+ def test_CreationDate_with_explicit_timezone(self):
+ item = self._makeDummyContent('item')
+ item.creation_date = DateTime('2007-01-01T12:00:00Z')
+ self.assertEqual(item.CreationDate('US/Eastern'),
+ '2007-01-01 07:00:00')
+
+ def test_ModificationDate_with_explicit_timezone(self):
+ item = self._makeDummyContent('item')
+ item.modification_date = DateTime('2007-01-01T12:00:00Z')
+ self.assertEqual(item.ModificationDate('US/Eastern'),
+ '2007-01-01 07:00:00')
+
+ def test_EffectiveDate_with_explicit_timezone(self):
+ item = self._makeDummyContent('item')
+ item.effective_date = DateTime('2007-01-01T12:00:00Z')
+ self.assertEqual(item.EffectiveDate('US/Eastern'),
+ '2007-01-01 07:00:00')
+
+ def test_ExpirationDate_with_explicit_timezone(self):
+ item = self._makeDummyContent('item')
+ item.expiration_date = DateTime('2007-01-01T12:00:00Z')
+ self.assertEqual(item.ExpirationDate('US/Eastern'),
+ '2007-01-01 07:00:00')
def test_suite():
return TestSuite((
Modified: zope-cmf1.6/trunk/CMFDefault/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFDefault/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFDefault/version.txt (original)
+++ zope-cmf1.6/trunk/CMFDefault/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/CMFSetup/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFSetup/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFSetup/version.txt (original)
+++ zope-cmf1.6/trunk/CMFSetup/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py (original)
+++ zope-cmf1.6/trunk/CMFTopic/tests/test_DateC.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Unit tests for DateCriteria module.
-$Id: test_DateC.py 40346 2005-11-23 17:15:03Z yuppie $
+$Id: test_DateC.py 74721 2007-04-24 20:25:01Z tseaver $
"""
import unittest
@@ -190,6 +190,10 @@
dummy_ob = getattr(self.site, dummy_id)
dummy_ob.modified_date = self.now + i
dummy_ob.reindexObject()
+
+ def tearDown(self):
+ RequestTest.tearDown(self)
+ PlacelessSetup.tearDown(self)
def test_Harness(self):
Modified: zope-cmf1.6/trunk/CMFTopic/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFTopic/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFTopic/version.txt (original)
+++ zope-cmf1.6/trunk/CMFTopic/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/CMFUid/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/CMFUid/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/CMFUid/version.txt (original)
+++ zope-cmf1.6/trunk/CMFUid/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/DCWorkflow/States.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/States.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/States.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/States.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" States in a web-configurable workflow.
-$Id: States.py 36910 2005-04-07 16:37:47Z yuppie $
+$Id: States.py 73952 2007-03-31 13:45:25Z alecm $
"""
from AccessControl import ClassSecurityInfo
@@ -27,6 +27,7 @@
from ContainerTab import ContainerTab
from permissions import ManagePortal
from utils import _dtmldir
+from Products.CMFCore.utils import postonly
class StateDefinition(SimpleItem):
@@ -213,8 +214,9 @@
roles = tuple(roles)
pr[p] = roles
return self.manage_permissions(REQUEST, 'Permissions changed.')
-
- def setPermission(self, permission, acquired, roles):
+ setPermissions = postonly(setPermissions)
+
+ def setPermission(self, permission, acquired, roles, REQUEST=None):
"""Set a permission for this State."""
pr = self.permission_roles
if pr is None:
@@ -224,6 +226,7 @@
else:
roles = tuple(roles)
pr[permission] = roles
+ setPermission = postonly(setPermission)
manage_groups = PageTemplateFile('state_groups.pt', _dtmldir)
@@ -247,6 +250,7 @@
RESPONSE.redirect(
"%s/manage_groups?manage_tabs_message=Groups+changed."
% self.absolute_url())
+ setGroups = postonly(setGroups)
InitializeClass(StateDefinition)
Modified: zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/WorkflowUIMixin.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Web-configurable workflow UI.
-$Id: WorkflowUIMixin.py 36457 2004-08-12 15:07:44Z jens $
+$Id: WorkflowUIMixin.py 73952 2007-03-31 13:45:25Z alecm $
"""
import os
@@ -27,6 +27,7 @@
from permissions import ManagePortal
from Guard import Guard
from utils import _dtmldir
+from Products.CMFCore.utils import postonly
try:
#
@@ -66,6 +67,7 @@
if REQUEST is not None:
return self.manage_properties(
REQUEST, manage_tabs_message='Properties changed.')
+ setProperties = postonly(setProperties)
_permissions_form = DTMLFile('workflow_permissions', _dtmldir)
@@ -90,6 +92,7 @@
if REQUEST is not None:
return self.manage_permissions(
REQUEST, manage_tabs_message='Permission added.')
+ addManagedPermission = postonly(addManagedPermission)
security.declareProtected(ManagePortal, 'delManagedPermissions')
def delManagedPermissions(self, ps, REQUEST=None):
@@ -103,6 +106,7 @@
if REQUEST is not None:
return self.manage_permissions(
REQUEST, manage_tabs_message='Permission(s) removed.')
+ delManagedPermissions = postonly(delManagedPermissions)
security.declareProtected(ManagePortal, 'getPossiblePermissions')
def getPossiblePermissions(self):
@@ -132,7 +136,7 @@
return [g['id'] for g in groups]
security.declareProtected(ManagePortal, 'addGroup')
- def addGroup(self, group, RESPONSE=None):
+ def addGroup(self, group, RESPONSE=None, REQUEST=None):
"""Adds a group by name.
"""
if group not in self.getAvailableGroups():
@@ -142,9 +146,10 @@
RESPONSE.redirect(
"%s/manage_groups?manage_tabs_message=Added+group."
% self.absolute_url())
+ addGroup = postonly(addGroup)
security.declareProtected(ManagePortal, 'delGroups')
- def delGroups(self, groups, RESPONSE=None):
+ def delGroups(self, groups, RESPONSE=None, REQUEST=None):
"""Removes groups by name.
"""
self.groups = tuple([g for g in self.groups if g not in groups])
@@ -152,6 +157,7 @@
RESPONSE.redirect(
"%s/manage_groups?manage_tabs_message=Groups+removed."
% self.absolute_url())
+ delGroups = postonly(delGroups)
security.declareProtected(ManagePortal, 'getAvailableRoles')
def getAvailableRoles(self):
@@ -179,7 +185,7 @@
return self.valid_roles()
security.declareProtected(ManagePortal, 'setRoles')
- def setRoles(self, roles, RESPONSE=None):
+ def setRoles(self, roles, RESPONSE=None, REQUEST=None):
"""Changes the list of roles mapped to groups by this workflow.
"""
avail = self.getAvailableRoles()
@@ -191,6 +197,7 @@
RESPONSE.redirect(
"%s/manage_groups?manage_tabs_message=Roles+changed."
% self.absolute_url())
+ setRoles = postonly(setRoles)
security.declareProtected(ManagePortal, 'getGuard')
def getGuard(self):
Modified: zope-cmf1.6/trunk/DCWorkflow/exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/exportimport.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/exportimport.py Mon Aug 6 21:16:42 2007
@@ -12,12 +12,13 @@
##############################################################################
"""DCWorkflow export / import support.
-$Id: exportimport.py 68102 2006-05-12 06:05:10Z rafrombrc $
+$Id: exportimport.py 69757 2006-08-24 05:00:14Z alecm $
"""
import re
from xml.dom.minidom import parseString
+from Expression import Expression
from AccessControl import ClassSecurityInfo
from Acquisition import Implicit
from Globals import InitializeClass
@@ -1071,8 +1072,9 @@
, actbox_category = action[ 'category' ]
, props = props
)
-
- t.var_exprs = PersistentMapping( t_info[ 'variables' ].items() )
+ var_mapping = [(name, Expression(text)) for name, text in
+ t_info[ 'variables' ].items()]
+ t.var_exprs = PersistentMapping(var_mapping)
def _initDCWorkflowWorklists( workflow, worklists ):
Modified: zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py (original)
+++ zope-cmf1.6/trunk/DCWorkflow/tests/test_exportimport.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
"""DCWorkflow export / import unit tests.
-$Id: test_exportimport.py 68982 2006-07-05 17:11:59Z efge $
+$Id: test_exportimport.py 69757 2006-08-24 05:00:14Z alecm $
"""
import unittest
@@ -2278,7 +2278,7 @@
self.assertEqual( len( var_exprs ), len( expected[ 9 ] ) )
for var_id, expr in var_exprs.items():
- self.assertEqual( expr, expected[ 9 ][ var_id ] )
+ self.assertEqual( expr.text, expected[ 9 ][ var_id ] )
guard = transition.getGuard()
Modified: zope-cmf1.6/trunk/DCWorkflow/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/DCWorkflow/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/DCWorkflow/version.txt (original)
+++ zope-cmf1.6/trunk/DCWorkflow/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-CMF-1.6.2
+CMF-1.6.4
Modified: zope-cmf1.6/trunk/EXTERNALS.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/EXTERNALS.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/EXTERNALS.txt (original)
+++ zope-cmf1.6/trunk/EXTERNALS.txt Mon Aug 6 21:16:42 2007
@@ -5,4 +5,4 @@
#
# svn propset svn:externals -F ./EXTERNALS.TXT .
#
-GenericSetup svn://svn.zope.org/repos/main/GenericSetup/tags/CMF-1.6.1-final
+GenericSetup svn://svn.zope.org/repos/main/GenericSetup/tags/1.2
Modified: zope-cmf1.6/trunk/GenericSetup/CHANGES.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/CHANGES.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/CHANGES.txt (original)
+++ zope-cmf1.6/trunk/GenericSetup/CHANGES.txt Mon Aug 6 21:16:42 2007
@@ -1,6 +1,23 @@
GenericSetup Product Changelog
- GenericSetup 1.2 (unreleased)
+ GenericSetup 1.2 (2007-04-24)
+
+ - ZCatalog handler: Fixed 'remove' behavior.
+ If the index doesn't exist, removing no longer raises an error.
+
+ - utils: Fixed XMLAdapterBase.
+ Exporting the XML body worked only once per instance.
+
+ - No longer read the toolset xml and update the toolset registry on
+ import context change. Doing this only during the toolset step import
+ should be sufficient.
+
+ GenericSetup 1.2-beta (2006/09/20)
+
+ - tool: Added support for uploading a tarball on the "Import" tab
+ (i.e., one produced on the export tab).
+
+ - docs: Added SampleSite demo product.
- ProfileRegistry: Added 'registerProfile' ZCML directive.
Using the old registerProfile method in initialize() is now deprecated.
Modified: zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/OFSP/exportimport.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
"""OFSP export / import support.
-$Id: exportimport.py 40715 2005-12-12 10:33:40Z yuppie $
+$Id: exportimport.py 68593 2006-06-12 07:48:32Z yuppie $
"""
from Products.GenericSetup.utils import XMLAdapterBase
@@ -57,8 +57,9 @@
def _exportBody(self):
"""Export the object as a file body.
"""
- if self.context.meta_type == 'Folder':
- return XMLAdapterBase._exportBody(self)
- return None
+ if not self.context.meta_type in ('Folder', 'Folder (Ordered)'):
+ return None
+
+ return XMLAdapterBase._exportBody(self)
body = property(_exportBody, XMLAdapterBase._importBody)
Modified: zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/ZCatalog/exportimport.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
"""ZCatalog export / import support.
-$Id: exportimport.py 66608 2006-04-06 19:11:09Z yuppie $
+$Id: exportimport.py 74050 2007-04-09 16:07:34Z yuppie $
"""
from zope.component import queryMultiAdapter
@@ -94,7 +94,11 @@
idx_id = str(child.getAttribute('name'))
if child.hasAttribute('remove'):
- zcatalog.delIndex(idx_id)
+ # Remove index if it is there; then continue to the next
+ # index. Removing a non existing index should not cause an
+ # error, so you can apply the profile twice without problems.
+ if idx_id in zcatalog.indexes():
+ zcatalog.delIndex(idx_id)
continue
if idx_id not in zcatalog.indexes():
Modified: zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/ZCatalog/tests/test_exportimport.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
"""ZCatalog export / import support unit tests.
-$Id: test_exportimport.py 68488 2006-06-04 17:22:57Z yuppie $
+$Id: test_exportimport.py 74050 2007-04-09 16:07:34Z yuppie $
"""
import unittest
@@ -77,6 +77,7 @@
<extra name="index_type" value="Okapi BM25 Rank"/>
<extra name="lexicon_id" value="foo_plexicon"/>
</index>
+ <index name="non_existing" remove="True"/>
</object>
"""
Modified: zope-cmf1.6/trunk/GenericSetup/content.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/content.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/content.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/content.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
"""Filesystem exporter / importer adapters.
-$Id: content.py 66587 2006-04-06 10:47:06Z yuppie $
+$Id: content.py 70813 2006-10-19 15:46:15Z tseaver $
"""
from csv import reader
@@ -104,10 +104,10 @@
csv_writer.writerow((object_id, factory_name))
export_context.writeDataFile('.objects',
- text=stream.getvalue(),
- content_type='text/comma-separated-values',
- subdir=subdir,
- )
+ text=stream.getvalue(),
+ content_type='text/comma-separated-values',
+ subdir=subdir,
+ )
prop_adapter = IINIAware(context, None)
Modified: zope-cmf1.6/trunk/GenericSetup/context.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/context.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/context.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/context.py Mon Aug 6 21:16:42 2007
@@ -14,7 +14,7 @@
Wrappers representing the state of an import / export operation.
-$Id: context.py 41502 2006-01-30 17:48:12Z efge $
+$Id: context.py 70813 2006-10-19 15:46:15Z tseaver $
"""
import logging
@@ -285,8 +285,8 @@
security = ClassSecurityInfo()
- def __init__( self, tool, archive_bits, encoding=None, should_purge=False ):
-
+ def __init__( self, tool, archive_bits, encoding=None,
+ should_purge=False ):
BaseContext.__init__( self, tool, encoding )
timestamp = time.gmtime()
self._archive_stream = StringIO(archive_bits)
Modified: zope-cmf1.6/trunk/GenericSetup/interfaces.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/interfaces.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/interfaces.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/interfaces.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" GenericSetup product interfaces
-$Id: interfaces.py 67832 2006-05-02 12:51:17Z regebro $
+$Id: interfaces.py 70268 2006-09-20 21:07:49Z tseaver $
"""
from zope.interface import Interface
@@ -453,6 +453,12 @@
""" Get the ID of the active import context.
"""
+ def applyContext( context, encoding=None ):
+
+ """ Update the tool from the supplied context, without modifying its
+ "permanent" ID.
+ """
+
def setImportContext( context_id ):
""" Set the ID of the active import context and update the registries.
Modified: zope-cmf1.6/trunk/GenericSetup/tests/common.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tests/common.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tests/common.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tests/common.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" GenericSetup product: unit test utilities.
-$Id: common.py 68474 2006-06-03 12:07:11Z yuppie $
+$Id: common.py 69230 2006-07-21 10:44:38Z yuppie $
"""
import os
@@ -54,11 +54,12 @@
from AccessControl.SecurityManagement import newSecurityManager
ZopeTestCase.setUp(self)
try:
- # BBB: for Zope 2.9
- from Products.Five.traversable import FiveTraversable
- except ImportError:
+ import zope.traversing
zcml.load_config('meta.zcml', Products.Five)
zcml.load_config('traversing.zcml', Products.Five)
+ except ImportError:
+ # BBB: for Zope 2.9
+ pass
self.root = self.app
newSecurityManager(None, OmnipotentUser().__of__(self.app.acl_users))
Modified: zope-cmf1.6/trunk/GenericSetup/tests/test_content.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tests/test_content.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tests/test_content.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tests/test_content.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
"""Filesystem exporter / importer adapter unit tests.
-$Id: test_content.py 68488 2006-06-04 17:22:57Z yuppie $
+$Id: test_content.py 71043 2006-11-03 17:15:59Z yuppie $
"""
import unittest
@@ -152,7 +152,10 @@
def _setUpAdapters(self):
from OFS.Folder import Folder
- from zope.app.tests import ztapi
+ try:
+ from zope.app.testing import ztapi
+ except ImportError: # BBB, Zope3 < 3.1
+ from zope.app.tests import ztapi
#from OFS.Image import File
from Products.GenericSetup.interfaces import IFilesystemExporter
Modified: zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tests/test_tool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Unit tests for GenericSetup tool.
-$Id: test_tool.py 65664 2006-03-01 06:41:14Z rafrombrc $
+$Id: test_tool.py 71275 2006-11-22 18:00:34Z alecm $
"""
import unittest
@@ -175,7 +175,7 @@
self.assertEqual( info[ 'version' ], '1' )
self.failUnless( 'One small step' in info[ 'description' ] )
self.assertEqual( info[ 'handler' ]
- , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+ , 'Products.GenericSetup.tests.test_registry.ONE_FUNC')
self.assertEqual( import_registry.getStep( 'one' ), ONE_FUNC )
@@ -187,20 +187,9 @@
self.assertEqual( info[ 'title' ], 'One Step' )
self.failUnless( 'One small step' in info[ 'description' ] )
self.assertEqual( info[ 'handler' ]
- , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+ , 'Products.GenericSetup.tests.test_registry.ONE_FUNC')
self.assertEqual( export_registry.getStep( 'one' ), ONE_FUNC )
-
- toolset = tool.getToolsetRegistry()
- self.assertEqual( len( toolset.listForbiddenTools() ), 1 )
- self.failUnless( 'doomed' in toolset.listForbiddenTools() )
- self.assertEqual( len( toolset.listRequiredTools() ), 2 )
- self.failUnless( 'mandatory' in toolset.listRequiredTools() )
- info = toolset.getRequiredToolInfo( 'mandatory' )
- self.assertEqual( info[ 'class' ], 'path.to.one' )
- self.failUnless( 'obligatory' in toolset.listRequiredTools() )
- info = toolset.getRequiredToolInfo( 'obligatory' )
- self.assertEqual( info[ 'class' ], 'path.to.another' )
def test_runImportStep_nonesuch( self ):
@@ -585,6 +574,54 @@
self.assertEqual( info[ 'id' ], 'default' )
self.assertEqual( info[ 'title' ], 'default' )
+ def test_applyContext(self):
+ from Products.GenericSetup.tool import IMPORT_STEPS_XML
+ from Products.GenericSetup.tool import EXPORT_STEPS_XML
+ from Products.GenericSetup.tool import TOOLSET_XML
+ from test_registry import _SINGLE_IMPORT_XML
+ from test_registry import _SINGLE_EXPORT_XML
+ from test_registry import _NORMAL_TOOLSET_XML
+ from test_registry import ONE_FUNC
+
+ site = self._makeSite()
+ tool = self._makeOne('setup_tool').__of__(site)
+ tool.getImportStepRegistry().clear()
+ tool.getExportStepRegistry().clear()
+ tool.getToolsetRegistry().clear()
+
+ context = DummyImportContext( site, tool=tool )
+ context._files[ IMPORT_STEPS_XML ] = _SINGLE_IMPORT_XML
+ context._files[ EXPORT_STEPS_XML ] = _SINGLE_EXPORT_XML
+ context._files[ TOOLSET_XML ] = _NORMAL_TOOLSET_XML
+
+ tool.applyContext(context)
+
+ import_registry = tool.getImportStepRegistry()
+ self.assertEqual( len( import_registry.listSteps() ), 1 )
+ self.failUnless( 'one' in import_registry.listSteps() )
+ info = import_registry.getStepMetadata( 'one' )
+
+ self.assertEqual( info[ 'id' ], 'one' )
+ self.assertEqual( info[ 'title' ], 'One Step' )
+ self.assertEqual( info[ 'version' ], '1' )
+ self.failUnless( 'One small step' in info[ 'description' ] )
+ self.assertEqual( info[ 'handler' ]
+ , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+
+ self.assertEqual( import_registry.getStep( 'one' ), ONE_FUNC )
+
+ export_registry = tool.getExportStepRegistry()
+ self.assertEqual( len( export_registry.listSteps() ), 1 )
+ self.failUnless( 'one' in import_registry.listSteps() )
+ info = export_registry.getStepMetadata( 'one' )
+ self.assertEqual( info[ 'id' ], 'one' )
+ self.assertEqual( info[ 'title' ], 'One Step' )
+ self.failUnless( 'One small step' in info[ 'description' ] )
+ self.assertEqual( info[ 'handler' ]
+ , 'Products.GenericSetup.tests.test_registry.ONE_FUNC' )
+
+ self.assertEqual( export_registry.getStep( 'one' ), ONE_FUNC )
+
_DEFAULT_STEP_REGISTRIES_EXPORT_XML = """\
<?xml version="1.0"?>
@@ -730,6 +767,40 @@
self.assertEqual( content_type, 'text/xml' )
class Test_importToolset( _ToolsetSetup ):
+
+ def test_import_updates_registry(self):
+ from Products.GenericSetup.tool import TOOLSET_XML
+ from Products.GenericSetup.tool import importToolset
+ from test_registry import _NORMAL_TOOLSET_XML
+
+ site = self._initSite()
+ context = DummyImportContext( site, tool=site.setup_tool )
+
+ # Import forbidden
+ context._files[ TOOLSET_XML ] = _FORBIDDEN_TOOLSET_XML
+ importToolset( context )
+
+ tool = context.getSetupTool()
+ toolset = tool.getToolsetRegistry()
+
+ self.assertEqual( len( toolset.listForbiddenTools() ), 3 )
+ self.failUnless( 'doomed' in toolset.listForbiddenTools() )
+ self.failUnless( 'damned' in toolset.listForbiddenTools() )
+ self.failUnless( 'blasted' in toolset.listForbiddenTools() )
+
+ # Import required
+ context._files[ TOOLSET_XML ] = _REQUIRED_TOOLSET_XML
+ importToolset( context )
+
+ self.assertEqual( len( toolset.listRequiredTools() ), 2 )
+ self.failUnless( 'mandatory' in toolset.listRequiredTools() )
+ info = toolset.getRequiredToolInfo( 'mandatory' )
+ self.assertEqual( info[ 'class' ],
+ 'Products.GenericSetup.tests.test_tool.DummyTool' )
+ self.failUnless( 'obligatory' in toolset.listRequiredTools() )
+ info = toolset.getRequiredToolInfo( 'obligatory' )
+ self.assertEqual( info[ 'class' ],
+ 'Products.GenericSetup.tests.test_tool.DummyTool' )
def test_tool_ids( self ):
# The tool import mechanism used to rely on the fact that all tools
Modified: zope-cmf1.6/trunk/GenericSetup/tool.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/tool.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/tool.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/tool.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" Classes: SetupTool
-$Id: tool.py 68512 2006-06-07 16:24:12Z yuppie $
+$Id: tool.py 71275 2006-11-22 18:00:34Z alecm $
"""
import os
@@ -35,6 +35,7 @@
from context import DirectoryImportContext
from context import SnapshotImportContext
from context import TarballExportContext
+from context import TarballImportContext
from context import SnapshotExportContext
from differ import ConfigDiff
from registry import ImportStepRegistry
@@ -177,10 +178,14 @@
""" See ISetupTool.
"""
self._import_context_id = context_id
-
- self._updateImportStepsRegistry(encoding)
- self._updateExportStepsRegistry(encoding)
- self._updateToolsetRegistry(encoding)
+ context = self._getImportContext(context_id)
+
+ self.applyContext(context, encoding)
+
+ security.declareProtected(ManagePortal, 'applyContext')
+ def applyContext(self, context, encoding=None):
+ self._updateImportStepsRegistry(context, encoding)
+ self._updateExportStepsRegistry(context, encoding)
security.declareProtected(ManagePortal, 'getImportStepRegistry')
def getImportStepRegistry(self):
@@ -244,18 +249,7 @@
context = self._getImportContext(self._import_context_id, purge_old)
- steps = self._import_registry.sortSteps()
- messages = {}
-
- for step in steps:
- message = self._doRunImportStep(step, context)
- message_list = filter(None, [message])
- message_list.extend( ['%s: %s' % x[1:]
- for x in context.listNotes()] )
- messages[step] = '\n'.join(message_list)
- context.clearNotes()
-
- return { 'steps' : steps, 'messages' : messages }
+ return self._runImportStepsFromContext(context, purge_old=purge_old)
security.declareProtected(ManagePortal, 'runExportStep')
def runExportStep(self, step_id):
@@ -445,6 +439,29 @@
return self.manage_importSteps(manage_tabs_message=steps_run,
messages=result['messages'])
+ security.declareProtected(ManagePortal, 'manage_importTarball')
+ def manage_importTarball(self, tarball, RESPONSE, create_report=True):
+ """ Import steps from the uploaded tarball.
+ """
+ if getattr(tarball, 'read', None) is not None:
+ tarball = tarball.read()
+
+ context = TarballImportContext(tool=self,
+ archive_bits=tarball,
+ encoding='UTF8',
+ should_purge=True,
+ )
+ result = self._runImportStepsFromContext(context,
+ purge_old=True)
+ steps_run = 'Steps run: %s' % ', '.join(result['steps'])
+
+ if create_report:
+ name = self._mangleTimestampName('import-all', 'log')
+ self._createReport(name, result['steps'], result['messages'])
+
+ return self.manage_importSteps(manage_tabs_message=steps_run,
+ messages=result['messages'])
+
security.declareProtected(ManagePortal, 'manage_exportSteps')
manage_exportSteps = PageTemplateFile('sutExportSteps', _wwwdir)
@@ -643,11 +660,12 @@
return SnapshotImportContext(self, context_id, should_purge, encoding)
security.declarePrivate('_updateImportStepsRegistry')
- def _updateImportStepsRegistry(self, encoding):
+ def _updateImportStepsRegistry(self, context, encoding):
""" Update our import steps registry from our profile.
"""
- context = self._getImportContext(self._import_context_id)
+ if context is None:
+ context = self._getImportContext(self._import_context_id)
xml = context.readDataFile(IMPORT_STEPS_XML)
if xml is None:
return
@@ -673,11 +691,12 @@
)
security.declarePrivate('_updateExportStepsRegistry')
- def _updateExportStepsRegistry(self, encoding):
+ def _updateExportStepsRegistry(self, context, encoding):
""" Update our export steps registry from our profile.
"""
- context = self._getImportContext(self._import_context_id)
+ if context is None:
+ context = self._getImportContext(self._import_context_id)
xml = context.readDataFile(EXPORT_STEPS_XML)
if xml is None:
return
@@ -698,18 +717,6 @@
description=description,
)
- security.declarePrivate('_updateToolsetRegistry')
- def _updateToolsetRegistry(self, encoding):
-
- """ Update our toolset registry from our profile.
- """
- context = self._getImportContext(self._import_context_id)
- xml = context.readDataFile(TOOLSET_XML)
- if xml is None:
- return
-
- self._toolset_registry.parseXML(xml, encoding)
-
security.declarePrivate('_doRunImportStep')
def _doRunImportStep(self, step_id, context):
@@ -740,13 +747,30 @@
raise ValueError('Invalid export step: %s' % step_id)
messages[step_id] = handler(context)
-
return { 'steps' : steps
, 'messages' : messages
, 'tarball' : context.getArchive()
, 'filename' : context.getArchiveFilename()
}
+
+ security.declarePrivate('_runImportStepsFromContext')
+ def _runImportStepsFromContext(self, context, steps=None, purge_old=None):
+ self.applyContext(context)
+
+ if steps is None:
+ steps = self._import_registry.sortSteps()
+ messages = {}
+
+ for step in steps:
+ message = self._doRunImportStep(step, context)
+ message_list = filter(None, [message])
+ message_list.extend( ['%s: %s' % x[1:]
+ for x in context.listNotes()] )
+ messages[step] = '\n'.join(message_list)
+ context.clearNotes()
+
+ return { 'steps' : steps, 'messages' : messages }
security.declarePrivate('_mangleTimestampName')
def _mangleTimestampName(self, prefix, ext=None):
Modified: zope-cmf1.6/trunk/GenericSetup/utils.py
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/utils.py?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/utils.py (original)
+++ zope-cmf1.6/trunk/GenericSetup/utils.py Mon Aug 6 21:16:42 2007
@@ -12,7 +12,7 @@
##############################################################################
""" GenericSetup product utilities
-$Id: utils.py 67832 2006-05-02 12:51:17Z regebro $
+$Id: utils.py 74050 2007-04-09 16:07:34Z yuppie $
"""
import os
@@ -46,6 +46,7 @@
from interfaces import IBody
from interfaces import INode
from interfaces import ISetupContext
+from interfaces import ISetupTool
from permissions import ManagePortal
@@ -461,6 +462,8 @@
def _exportSimpleNode(self):
"""Export the object as a DOM node.
"""
+ if ISetupTool.providedBy(self.context):
+ return None
return self._getObjectNode('object', False)
def _importSimpleNode(self, node):
@@ -498,7 +501,9 @@
"""Export the object as a file body.
"""
self._doc.appendChild(self._exportNode())
- return self._doc.toprettyxml(' ')
+ xml = self._doc.toprettyxml(' ')
+ self._doc.unlink()
+ return xml
def _importBody(self, body):
"""Import the object from the file body.
@@ -521,6 +526,7 @@
filename = '' # for error reporting during import
+
class ObjectManagerHelpers(object):
"""ObjectManager im- and export helpers.
@@ -535,11 +541,15 @@
for obj in objects:
exporter = queryMultiAdapter((obj, self.environ), INode)
if exporter:
- fragment.appendChild(exporter.node)
+ node = exporter.node
+ if node is not None:
+ fragment.appendChild(exporter.node)
return fragment
def _purgeObjects(self):
- for obj_id in self.context.objectIds():
+ for obj_id, obj in self.context.objectItems():
+ if ISetupTool.providedBy(obj):
+ continue
self.context._delObject(obj_id)
def _initObjects(self, node):
Modified: zope-cmf1.6/trunk/GenericSetup/version.txt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/version.txt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/version.txt (original)
+++ zope-cmf1.6/trunk/GenericSetup/version.txt Mon Aug 6 21:16:42 2007
@@ -1,1 +1,1 @@
-GenericSetup-1.1
+GenericSetup-1.2
Modified: zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt (original)
+++ zope-cmf1.6/trunk/GenericSetup/www/sutImportSteps.zpt Mon Aug 6 21:16:42 2007
@@ -11,7 +11,7 @@
<h3>Available Import Steps</h3>
-<form action="." method="POST"
+<form action="." method="POST" enctype="multipart/form-data"
tal:attributes="action context/absolute_url" >
<input type="hidden" name="ids:default:tokens" value="" />
@@ -70,6 +70,12 @@
<input class="form-element" type="submit"
name="manage_importAllSteps:method"
value=" Import all steps " />
+
+ <input class="form-element" type="file"
+ name="tarball" />
+ <input class="form-element" type="submit"
+ name="manage_importTarball:method"
+ value=" Import uploaded tarball " />
</td>
</tr>
</tbody>
Modified: zope-cmf1.6/trunk/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/changelog?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/changelog (original)
+++ zope-cmf1.6/trunk/debian/changelog Mon Aug 6 21:16:42 2007
@@ -1,3 +1,15 @@
+zope-cmf1.6 (1.6.4-1) unstable; urgency=low
+
+ * New upstream release
+ * debian/watch:
+ - limiting to 1.6 versions of CMF
+ * debian/*.dzproduct:
+ - adding Zope 2.10 tp the supported versions
+ * debian/control:
+ - adding myself to Uploaders
+
+ -- Bernd Zeimetz <bernd at bzed.de> Mon, 06 Aug 2007 22:10:52 +0200
+
zope-cmf1.6 (1.6.2-1) unstable; urgency=low
* New upstream release.
Modified: zope-cmf1.6/trunk/debian/control
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/control?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/control (original)
+++ zope-cmf1.6/trunk/debian/control Mon Aug 6 21:16:42 2007
@@ -2,7 +2,7 @@
Section: web
Priority: optional
Maintainer: Debian/Ubuntu Zope Team <pkg-zope-developers at lists.alioth.debian.org>
-Uploaders: Fabio Tranchitella <kobold at debian.org>
+Uploaders: Fabio Tranchitella <kobold at debian.org>, Bernd Zeimetz <bernd at bzed.de>
Build-Depends: debhelper (>= 5.0)
Build-Depends-Indep: zope-debhelper (>= 0.3.2.15)
Standards-Version: 3.7.2
Modified: zope-cmf1.6/trunk/debian/watch
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/watch?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/watch (original)
+++ zope-cmf1.6/trunk/debian/watch Mon Aug 6 21:16:42 2007
@@ -1,4 +1,4 @@
-# watch control file for uscan
version=2
-# Site Version Script
-http://www.zope.org/Products/CMF/.*CMF-([0-9a-z\.]*).*\.tar\.gz debian uupdate
+
+http://www.zope.org/Products/CMF/.*CMF-(1\.6.[0-9a-z\.]*)-final\.tar\.gz debian uupdate
+
Modified: zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfactionicons1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -2,4 +2,4 @@
Package: zope-cmfactionicons1.6
Directory: CMFActionIcons:1.6
Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfcalendar1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -2,4 +2,4 @@
Package: zope-cmfcalendar1.6
Directory: CMFCalendar:1.6
Depends: CMFCore:1.6, CMFDefault:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfcore1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -1,4 +1,4 @@
Name: CMFCore
Package: zope-cmfcore1.6
Directory: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfdefault1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -2,4 +2,4 @@
Package: zope-cmfdefault1.6
Directory: CMFDefault:1.6
Depends: CMFCore:1.6, CMFTopic:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfsetup1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -2,4 +2,4 @@
Package: zope-cmfsetup1.6
Directory: CMFSetup:1.6
Depends: CMFCore:1.6, CMFTopic:1.6, DCWorkflow:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmftopic1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -2,4 +2,4 @@
Package: zope-cmftopic1.6
Directory: CMFTopic:1.6
Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-cmfuid1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -2,4 +2,4 @@
Package: zope-cmfuid1.6
Directory: CMFUid:1.6
Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-dcworkflow1.6.dzproduct Mon Aug 6 21:16:42 2007
@@ -2,4 +2,4 @@
Package: zope-dcworkflow1.6
Directory: DCWorkflow:1.6
Depends: CMFCore:1.6
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
Modified: zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct
URL: http://svn.debian.org/wsvn/pkg-zope/zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct?rev=971&op=diff
==============================================================================
--- zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct (original)
+++ zope-cmf1.6/trunk/debian/zope-genericsetup.dzproduct Mon Aug 6 21:16:42 2007
@@ -1,4 +1,4 @@
Name: GenericSetup
Package: zope-genericsetup
Directory: GenericSetup
-ZopeVersions: 2.9 2.8
+ZopeVersions: 2.10 2.9 2.8
More information about the pkg-zope-commits
mailing list