[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - improved content type registry handler
Yvo Schubbe
y.2011 at wcm-solutions.de
Mon Jul 18 07:41:03 EDT 2011
Log message for revision 122277:
- improved content type registry handler
Changed:
U Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
UU Products.CMFCore/trunk/Products/CMFCore/exportimport/contenttyperegistry.py
U Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_contenttyperegistry.py
-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2011-07-18 10:16:17 UTC (rev 122276)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt 2011-07-18 11:41:02 UTC (rev 122277)
@@ -4,6 +4,9 @@
2.3.0-alpha (unreleased)
------------------------
+- setup handlers: Improved content type registry handler.
+ The 'insert-before' and 'insert-after' directives are now supported.
+
- Optimize `SkinnableObjectManager.__getattr__` to short circuit view (`@`) and
traverser (`+`) lookup in addition to `_` and `aq_`.
Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/contenttyperegistry.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/contenttyperegistry.py 2011-07-18 10:16:17 UTC (rev 122276)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/contenttyperegistry.py 2011-07-18 11:41:02 UTC (rev 122277)
@@ -11,8 +11,6 @@
#
##############################################################################
"""Content type registry xml adapters and setup handlers.
-
-$Id$
"""
from zope.component import adapts
@@ -80,18 +78,28 @@
parent = self.context
predicate_id = str(child.getAttribute('name'))
- predicate_type = str(child.getAttribute('predicate_type'))
- content_type_name = str(child.getAttribute('content_type_name'))
if predicate_id not in parent.predicate_ids:
+ predicate_type = str(child.getAttribute('predicate_type'))
parent.addPredicate(predicate_id, predicate_type)
+ if child.hasAttribute('content_type_name'):
+ content_type_name = str(child.getAttribute('content_type_name'))
+ parent.assignTypeName(predicate_id, content_type_name)
+
+ if child.hasAttribute('insert-before'):
+ insert_before = child.getAttribute('insert-before')
+ self._movePredicate(predicate_id, insert_before, 0)
+ elif child.hasAttribute('insert-after'):
+ insert_after = child.getAttribute('insert-after')
+ self._movePredicate(predicate_id, insert_after, 1)
+
arguments = []
for sub in child.childNodes:
if sub.nodeName != 'argument':
continue
arguments.append(str(sub.getAttribute('value')))
- parent.getPredicate(predicate_id).edit(*arguments)
- parent.assignTypeName(predicate_id, content_type_name)
+ if arguments:
+ parent.getPredicate(predicate_id).edit(*arguments)
_KNOWN_PREDICATE_TYPES = {
'major_minor': lambda x: (','.join(x.major or ()),
@@ -107,6 +115,19 @@
return cracker(predicate)
return () # XXX: raise?
+ def _movePredicate(self, id, position_id, delta=0):
+ predicate_ids = list(self.context.predicate_ids)
+ if position_id == '*':
+ position_id = predicate_ids[-delta]
+ if position_id == id:
+ return
+ try:
+ predicate_ids.remove(id)
+ position = predicate_ids.index(position_id)
+ predicate_ids.insert(position + delta, id)
+ except ValueError:
+ return
+ self.context.predicate_ids = tuple(predicate_ids)
def importContentTypeRegistry(context):
"""Import content type registry settings from an XML file.
Property changes on: Products.CMFCore/trunk/Products/CMFCore/exportimport/contenttyperegistry.py
___________________________________________________________________
Deleted: svn:keywords
- Id
Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_contenttyperegistry.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_contenttyperegistry.py 2011-07-18 10:16:17 UTC (rev 122276)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_contenttyperegistry.py 2011-07-18 11:41:02 UTC (rev 122277)
@@ -55,7 +55,23 @@
</object>
"""
+_FRAGMENT1_IMPORT = """\
+<?xml version="1.0"?>
+<object name="content_type_registry">
+ <predicate name="plain_text" insert-after="*"/>
+ <predicate name="logfiles" insert-before="*"/>
+</object>
+"""
+_FRAGMENT2_IMPORT = """\
+<?xml version="1.0"?>
+<object name="content_type_registry">
+ <predicate name="plain_text" insert-after="stylesheets"/>
+ <predicate name="logfiles" insert-before="images"/>
+</object>
+"""
+
+
class ContentTypeRegistryXMLAdapterTests(BodyAdapterTestCase,
unittest.TestCase,
):
@@ -202,6 +218,9 @@
layer = ExportImportZCMLLayer
+ _FRAGMENT1_IMPORT = _FRAGMENT1_IMPORT
+ _FRAGMENT2_IMPORT = _FRAGMENT2_IMPORT
+
def test_normal(self):
from Products.CMFCore.exportimport.contenttyperegistry \
import importContentTypeRegistry
@@ -237,7 +256,43 @@
self.assertEqual(content_type_name, self.NAME_REGEX_TYPENAME)
self.assertEqual(predicate.pattern.pattern, self.NAME_REGEX)
+ def test_fragment1_skip_purge(self):
+ from Products.CMFCore.exportimport.contenttyperegistry \
+ import importContentTypeRegistry
+ site = self._initSite(mit_predikat=True)
+ ctr = site.content_type_registry
+ self.assertEqual(len(ctr.listPredicates()), len(_TEST_PREDICATES))
+ self.assertEqual(ctr.predicate_ids, ('plain_text', 'stylesheets',
+ 'images', 'logfiles'))
+
+ context = DummyImportContext(site, False)
+ context._files['contenttyperegistry.xml'] = self._FRAGMENT1_IMPORT
+ importContentTypeRegistry(context)
+
+ self.assertEqual(len(ctr.listPredicates()), len(_TEST_PREDICATES))
+ self.assertEqual(ctr.predicate_ids, ('logfiles', 'stylesheets',
+ 'images', 'plain_text'))
+
+ def test_fragment2_skip_purge(self):
+ from Products.CMFCore.exportimport.contenttyperegistry \
+ import importContentTypeRegistry
+
+ site = self._initSite(mit_predikat=True)
+ ctr = site.content_type_registry
+ self.assertEqual(len(ctr.listPredicates()), len(_TEST_PREDICATES))
+ self.assertEqual(ctr.predicate_ids, ('plain_text', 'stylesheets',
+ 'images', 'logfiles'))
+
+ context = DummyImportContext(site, False)
+ context._files['contenttyperegistry.xml'] = self._FRAGMENT2_IMPORT
+ importContentTypeRegistry(context)
+
+ self.assertEqual(len(ctr.listPredicates()), len(_TEST_PREDICATES))
+ self.assertEqual(ctr.predicate_ids, ('stylesheets', 'plain_text',
+ 'logfiles', 'images'))
+
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(ContentTypeRegistryXMLAdapterTests),
More information about the checkins
mailing list