[CMF-checkins] SVN: CMF/trunk/C - added registerDirectory ZCML
directive
Yvo Schubbe
y.2007- at wcm-solutions.de
Tue Feb 27 08:13:45 EST 2007
Log message for revision 72873:
- added registerDirectory ZCML directive
- removed registration of CMFDefault/help
Changed:
U CMF/trunk/CHANGES.txt
U CMF/trunk/CMFActionIcons/__init__.py
U CMF/trunk/CMFActionIcons/configure.zcml
U CMF/trunk/CMFCalendar/__init__.py
U CMF/trunk/CMFCalendar/configure.zcml
U CMF/trunk/CMFCore/meta.zcml
U CMF/trunk/CMFCore/testing.zcml
A CMF/trunk/CMFCore/tests/test_zcml.py
A CMF/trunk/CMFCore/zcml.py
U CMF/trunk/CMFDefault/__init__.py
U CMF/trunk/CMFDefault/configure.zcml
A CMF/trunk/CMFDefault/directories.zcml
U CMF/trunk/CMFTopic/__init__.py
U CMF/trunk/CMFTopic/configure.zcml
-=-
Modified: CMF/trunk/CHANGES.txt
===================================================================
--- CMF/trunk/CHANGES.txt 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CHANGES.txt 2007-02-27 13:13:44 UTC (rev 72873)
@@ -2,6 +2,10 @@
New Features
+ - DirectoryView: Added 'registerDirectory' ZCML directive.
+ Using the old registerDirectory method in __init__.py is now deprecated.
+ See zcml.IRegisterDirectoryDirective for details.
+
- DirectoryView: Added support for non-product packages.
This introduces new registry keys. Old registry keys stored in
persistent DirectoryView objects are updated on the fly.
Modified: CMF/trunk/CMFActionIcons/__init__.py
===================================================================
--- CMF/trunk/CMFActionIcons/__init__.py 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFActionIcons/__init__.py 2007-02-27 13:13:44 UTC (rev 72873)
@@ -1,14 +1,14 @@
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors. All Rights Reserved.
-#
+#
# This software is subject to the provisions of the Zope Public License,
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
-#
+#
##############################################################################
""" Product: CMFActionIcons
@@ -17,14 +17,10 @@
$Id$
"""
-from Products.CMFCore.DirectoryView import registerDirectory
from Products.CMFCore.utils import ToolInit
import ActionIconsTool
-
-registerDirectory('skins', globals())
-
def initialize(context):
ToolInit( meta_type='CMF Action Icons Tool'
Modified: CMF/trunk/CMFActionIcons/configure.zcml
===================================================================
--- CMF/trunk/CMFActionIcons/configure.zcml 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFActionIcons/configure.zcml 2007-02-27 13:13:44 UTC (rev 72873)
@@ -1,8 +1,13 @@
<configure
xmlns="http://namespaces.zope.org/zope"
+ xmlns:cmf="http://namespaces.zope.org/cmf"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="cmf_default">
+ <!-- directories -->
+
+ <cmf:registerDirectory name="actionicons"/>
+
<!-- profiles -->
<genericsetup:registerProfile
Modified: CMF/trunk/CMFCalendar/__init__.py
===================================================================
--- CMF/trunk/CMFCalendar/__init__.py 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFCalendar/__init__.py 2007-02-27 13:13:44 UTC (rev 72873)
@@ -17,7 +17,6 @@
from Products.CMFCore.utils import ContentInit
from Products.CMFCore.utils import ToolInit
-from Products.CMFCore.DirectoryView import registerDirectory
import Event
import CalendarTool
@@ -27,9 +26,6 @@
# Make sure security is initialized
import utils
-# Make the skins available as DirectoryViews
-registerDirectory('skins', globals())
-
def initialize(context):
ToolInit( 'CMF Calendar Tool'
Modified: CMF/trunk/CMFCalendar/configure.zcml
===================================================================
--- CMF/trunk/CMFCalendar/configure.zcml 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFCalendar/configure.zcml 2007-02-27 13:13:44 UTC (rev 72873)
@@ -1,5 +1,6 @@
<configure
xmlns="http://namespaces.zope.org/zope"
+ xmlns:cmf="http://namespaces.zope.org/cmf"
xmlns:five="http://namespaces.zope.org/five"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="cmf_calendar">
@@ -22,6 +23,10 @@
name="cmf.calendar.event"
/>
+ <!-- directories -->
+
+ <cmf:registerDirectory name="zpt_calendar"/>
+
<!-- profiles -->
<genericsetup:registerProfile
Modified: CMF/trunk/CMFCore/meta.zcml
===================================================================
--- CMF/trunk/CMFCore/meta.zcml 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFCore/meta.zcml 2007-02-27 13:13:44 UTC (rev 72873)
@@ -1,5 +1,14 @@
-<configure xmlns="http://namespaces.zope.org/zope">
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:meta="http://namespaces.zope.org/meta">
<include file="browser/meta.zcml"/>
+ <meta:directive
+ name="registerDirectory"
+ namespace="http://namespaces.zope.org/cmf"
+ schema=".zcml.IRegisterDirectoryDirective"
+ handler=".zcml.registerDirectory"
+ />
+
</configure>
Modified: CMF/trunk/CMFCore/testing.zcml
===================================================================
--- CMF/trunk/CMFCore/testing.zcml 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFCore/testing.zcml 2007-02-27 13:13:44 UTC (rev 72873)
@@ -12,6 +12,11 @@
file="meta.zcml"
/>
+ <include
+ package="Products.CMFCore"
+ file="meta.zcml"
+ />
+
<include package="Products.Five"/>
<include package="Products.GenericSetup"/>
Added: CMF/trunk/CMFCore/tests/test_zcml.py
===================================================================
--- CMF/trunk/CMFCore/tests/test_zcml.py 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFCore/tests/test_zcml.py 2007-02-27 13:13:44 UTC (rev 72873)
@@ -0,0 +1,73 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Unit tests for zcml module.
+
+$Id$
+"""
+
+import unittest
+import Testing
+from zope.testing import doctest
+
+
+def test_registerDirectory():
+ """
+ Use the cmf:registerDirectory directive::
+
+ >>> import Products.CMFCore
+ >>> from Products.Five import zcml
+ >>> configure_zcml = '''
+ ... <configure xmlns:cmf="http://namespaces.zope.org/cmf">
+ ... <cmf:registerDirectory
+ ... name="fake_skin"
+ ... directory="tests/fake_skins/fake_skin"
+ ... recursive="True"
+ ... ignore="foo bar"
+ ... />
+ ... </configure>'''
+ >>> zcml.load_config('meta.zcml', Products.CMFCore)
+ >>> zcml.load_string(configure_zcml)
+
+ Make sure the directory is registered correctly::
+
+ >>> from Products.CMFCore.DirectoryView import _dirreg
+ >>> reg_keys = ('Products.CMFCore:tests/fake_skins/fake_skin',
+ ... 'Products.CMFCore:tests/fake_skins/fake_skin/test_directory')
+ >>> reg_keys[0] in _dirreg._directories
+ True
+ >>> reg_keys[1] in _dirreg._directories
+ True
+ >>> info = _dirreg._directories[reg_keys[0]]
+ >>> info._reg_key == reg_keys[0]
+ True
+ >>> info.ignore
+ ('.', '..', 'foo', 'bar')
+
+ Clean up and make sure the cleanup works::
+
+ >>> from zope.testing.cleanup import cleanUp
+ >>> cleanUp()
+ >>> reg_keys[0] in _dirreg._directories
+ False
+ >>> reg_keys[1] in _dirreg._directories
+ False
+ """
+
+
+def test_suite():
+ return unittest.TestSuite((
+ doctest.DocTestSuite(),
+ ))
+
+if __name__ == '__main__':
+ unittest.main(defaultTest='test_suite')
Property changes on: CMF/trunk/CMFCore/tests/test_zcml.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: CMF/trunk/CMFCore/zcml.py
===================================================================
--- CMF/trunk/CMFCore/zcml.py 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFCore/zcml.py 2007-02-27 13:13:44 UTC (rev 72873)
@@ -0,0 +1,94 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""CMFCore ZCML directives.
+
+$Id$
+"""
+
+from os import path
+
+from zope.configuration.fields import Bool
+from zope.configuration.fields import Path
+from zope.configuration.fields import PythonIdentifier
+from zope.configuration.fields import Tokens
+from zope.interface import Interface
+from zope.schema import ASCIILine
+
+from DirectoryView import _dirreg
+from DirectoryView import _generateKey
+from DirectoryView import ignore
+
+
+class IRegisterDirectoryDirective(Interface):
+
+ """Register directories with the global registry.
+ """
+
+ name = PythonIdentifier(
+ title=u'Name',
+ description=u'Name of the directory.',
+ required=True)
+
+ directory = Path(
+ title=u'Path',
+ description=u'Path relative to the package. If not specified, '
+ u"'skins/<name>' is used.",
+ required=False)
+
+ recursive = Bool(
+ title=u'Recursive?',
+ description=u'False by default. If true, register all subdirectories '
+ u'as well.',
+ required=False)
+
+ ignore = Tokens(
+ title=u'Ignore',
+ description=u'Files and subdirectories that should be ignored. If '
+ u"not specified, 'CVS' and '.svn' are ignored.",
+ value_type=ASCIILine(),
+ required=False)
+
+
+_directory_regs = []
+def registerDirectory(_context, name, directory=None, recursive=False,
+ ignore=ignore):
+ """ Add a new directory to the registry.
+ """
+ if directory is None:
+ subdir = 'skins/%s' % str(name)
+ filepath = path.join(_context.package.__path__[0], 'skins', str(name))
+ else:
+ subdir = str(directory[len(_context.package.__path__[0])+1:])
+ filepath = str(directory)
+
+ reg_key = _generateKey(_context.package.__name__, subdir)
+ _directory_regs.append(reg_key)
+
+ _context.action(
+ discriminator = ('registerDirectory', reg_key),
+ callable = _dirreg.registerDirectoryByKey,
+ args = (filepath, reg_key, int(recursive), ignore)
+ )
+
+
+def cleanUp():
+ global _directory_regs
+ for reg_key in _directory_regs:
+ for key in _dirreg._directories.keys():
+ if key.startswith(reg_key):
+ del _dirreg._directories[key]
+ _directory_regs = []
+
+from zope.testing.cleanup import addCleanUp
+addCleanUp(cleanUp)
+del addCleanUp
Property changes on: CMF/trunk/CMFCore/zcml.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: CMF/trunk/CMFDefault/__init__.py
===================================================================
--- CMF/trunk/CMFDefault/__init__.py 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFDefault/__init__.py 2007-02-27 13:13:44 UTC (rev 72873)
@@ -15,7 +15,6 @@
$Id$
"""
-from Products.CMFCore.DirectoryView import registerDirectory
from Products.CMFCore.utils import ToolInit
from Products.CMFCore.utils import ContentInit
from Products.CMFCore.utils import registerIcon
@@ -61,10 +60,6 @@
, SyndicationTool.SyndicationTool
)
-# Make the skins available as DirectoryViews.
-registerDirectory('skins', globals())
-registerDirectory('help', globals())
-
def initialize(context):
ToolInit( 'CMF Default Tool'
Modified: CMF/trunk/CMFDefault/configure.zcml
===================================================================
--- CMF/trunk/CMFDefault/configure.zcml 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFDefault/configure.zcml 2007-02-27 13:13:44 UTC (rev 72873)
@@ -11,4 +11,6 @@
<include file="profiles.zcml"/>
+ <include file="directories.zcml"/>
+
</configure>
Added: CMF/trunk/CMFDefault/directories.zcml
===================================================================
--- CMF/trunk/CMFDefault/directories.zcml 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFDefault/directories.zcml 2007-02-27 13:13:44 UTC (rev 72873)
@@ -0,0 +1,13 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:cmf="http://namespaces.zope.org/cmf">
+
+ <cmf:registerDirectory name="Images"/>
+
+ <cmf:registerDirectory name="zpt_content"/>
+
+ <cmf:registerDirectory name="zpt_control"/>
+
+ <cmf:registerDirectory name="zpt_generic"/>
+
+</configure>
Property changes on: CMF/trunk/CMFDefault/directories.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: CMF/trunk/CMFTopic/__init__.py
===================================================================
--- CMF/trunk/CMFTopic/__init__.py 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFTopic/__init__.py 2007-02-27 13:13:44 UTC (rev 72873)
@@ -16,7 +16,6 @@
"""
from Products.CMFCore.utils import ContentInit
-from Products.CMFCore.DirectoryView import registerDirectory
import Topic
from permissions import AddTopics
@@ -29,9 +28,6 @@
import SimpleStringCriterion
import SortCriterion
-# Make the skins available as DirectoryViews
-registerDirectory( 'skins', globals() )
-
def initialize(context):
context.registerHelpTitle( 'CMF Topic Help' )
Modified: CMF/trunk/CMFTopic/configure.zcml
===================================================================
--- CMF/trunk/CMFTopic/configure.zcml 2007-02-27 13:03:29 UTC (rev 72872)
+++ CMF/trunk/CMFTopic/configure.zcml 2007-02-27 13:13:44 UTC (rev 72873)
@@ -1,5 +1,6 @@
<configure
xmlns="http://namespaces.zope.org/zope"
+ xmlns:cmf="http://namespaces.zope.org/cmf"
xmlns:five="http://namespaces.zope.org/five"
xmlns:genericsetup="http://namespaces.zope.org/genericsetup"
i18n_domain="cmf_default">
@@ -22,6 +23,10 @@
name="cmf.topic"
/>
+ <!-- directories -->
+
+ <cmf:registerDirectory name="zpt_topic"/>
+
<!-- profiles -->
<genericsetup:registerProfile
More information about the CMF-checkins
mailing list