[CMF-checkins] SVN: CMF/branches/1.5/C CMFSetup: added support for configuring content type registry.

Tres Seaver tseaver at palladion.com
Thu Oct 13 23:50:13 EDT 2005


Log message for revision 39123:
  CMFSetup:  added support for configuring content type registry.
  

Changed:
  U   CMF/branches/1.5/CHANGES.txt
  U   CMF/branches/1.5/CMFDefault/Portal.py
  D   CMF/branches/1.5/CMFDefault/profiles/default/caching_policy_mgr.xml
  A   CMF/branches/1.5/CMFDefault/profiles/default/cachingpolicymgr.xml
  A   CMF/branches/1.5/CMFDefault/profiles/default/contenttyperegistry.xml
  U   CMF/branches/1.5/CMFDefault/profiles/default/export_steps.xml
  U   CMF/branches/1.5/CMFDefault/profiles/default/import_steps.xml
  U   CMF/branches/1.5/CMFDefault/profiles/default/toolset.xml
  U   CMF/branches/1.5/CMFDefault/setuphandlers.py
  A   CMF/branches/1.5/CMFSetup/contenttyperegistry.py
  A   CMF/branches/1.5/CMFSetup/tests/test_contenttyperegistry.py
  A   CMF/branches/1.5/CMFSetup/xml/ctrExport.xml

-=-
Modified: CMF/branches/1.5/CHANGES.txt
===================================================================
--- CMF/branches/1.5/CHANGES.txt	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CHANGES.txt	2005-10-14 03:50:12 UTC (rev 39123)
@@ -16,6 +16,8 @@
 
   Features
 
+    - CMFSetup:  added support for configuring content type registry.
+
     - CMFSetup:  added support for configuring caching policy manager.
 
     - CMFSetup:  added support for configuring cookie authentication and

Modified: CMF/branches/1.5/CMFDefault/Portal.py
===================================================================
--- CMF/branches/1.5/CMFDefault/Portal.py	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFDefault/Portal.py	2005-10-14 03:50:12 UTC (rev 39123)
@@ -278,30 +278,6 @@
             fti = FactoryTypeInformation(**t)
             tool._setObject(t['id'], fti)
 
-    def setupMimetypes(self, p):
-        p.manage_addProduct[ 'CMFCore' ].manage_addRegistry()
-        reg = p.content_type_registry
-
-        reg.addPredicate( 'link', 'extension' )
-        reg.getPredicate( 'link' ).edit( extensions="url, link" )
-        reg.assignTypeName( 'link', 'Link' )
-
-        reg.addPredicate( 'news', 'extension' )
-        reg.getPredicate( 'news' ).edit( extensions="news" )
-        reg.assignTypeName( 'news', 'News Item' )
-
-        reg.addPredicate( 'document', 'major_minor' )
-        reg.getPredicate( 'document' ).edit( major="text", minor="" )
-        reg.assignTypeName( 'document', 'Document' )
-
-        reg.addPredicate( 'image', 'major_minor' )
-        reg.getPredicate( 'image' ).edit( major="image", minor="" )
-        reg.assignTypeName( 'image', 'Image' )
-
-        reg.addPredicate( 'file', 'major_minor' )
-        reg.getPredicate( 'file' ).edit( major="application", minor="" )
-        reg.assignTypeName( 'file', 'File' )
-
     def setupWorkflow(self, p):
         wftool = getToolByName(p, 'portal_workflow', None)
         if wftool is None:
@@ -336,7 +312,6 @@
 
         self.setupTypes(p, PortalFolder.factory_type_information)
         self.setupTypes(p, Topic.factory_type_information)
-        self.setupMimetypes(p)
         self.setupWorkflow(p)
 
     def create(self, parent, id, create_userfolder):

Deleted: CMF/branches/1.5/CMFDefault/profiles/default/caching_policy_mgr.xml
===================================================================
--- CMF/branches/1.5/CMFDefault/profiles/default/caching_policy_mgr.xml	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFDefault/profiles/default/caching_policy_mgr.xml	2005-10-14 03:50:12 UTC (rev 39123)
@@ -1,4 +0,0 @@
-<?xml version="1.0"?>
-<caching-policies>
-<!-- TODO:  add some sensible defaults -->
-</caching-policies>

Copied: CMF/branches/1.5/CMFDefault/profiles/default/cachingpolicymgr.xml (from rev 39122, CMF/branches/1.5/CMFDefault/profiles/default/caching_policy_mgr.xml)

Added: CMF/branches/1.5/CMFDefault/profiles/default/contenttyperegistry.xml
===================================================================
--- CMF/branches/1.5/CMFDefault/profiles/default/contenttyperegistry.xml	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFDefault/profiles/default/contenttyperegistry.xml	2005-10-14 03:50:12 UTC (rev 39123)
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<content-type-registry>
+ <predicate
+   predicate_id="link"
+   predicate_type="extension"
+   content_type_name="Link">
+  <argument value="url,link" />
+ </predicate>
+ <predicate
+   predicate_id="news"
+   predicate_type="extension"
+   content_type_name="News Item">
+  <argument value="news" />
+ </predicate>
+ <predicate
+   predicate_id="document"
+   predicate_type="major_minor"
+   content_type_name="Document">
+  <argument value="text" />
+  <argument value="" />
+ </predicate>
+ <predicate
+   predicate_id="image"
+   predicate_type="major_minor"
+   content_type_name="Image">
+  <argument value="image" />
+  <argument value="" />
+ </predicate>
+ <predicate
+   predicate_id="file"
+   predicate_type="major_minor"
+   content_type_name="File">
+  <argument value="application" />
+  <argument value="" />
+ </predicate>
+</content-type-registry>

Modified: CMF/branches/1.5/CMFDefault/profiles/default/export_steps.xml
===================================================================
--- CMF/branches/1.5/CMFDefault/profiles/default/export_steps.xml	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFDefault/profiles/default/export_steps.xml	2005-10-14 03:50:12 UTC (rev 39123)
@@ -3,122 +3,61 @@
  <export-step id="actions"
               handler="Products.CMFSetup.actions.exportActionProviders"
               title="Action Providers">
-  
-  
-  
   Export actions tool's action providers and their actions.
- 
- 
- 
  </export-step>
  <export-step id="cookieauth"
               handler="Products.CMFSetup.cookieauth.exportCookieCrumbler"
               title="Cookie Authentication">
-  
-  
-  
   Export cookie crumbler settings
- 
- 
- 
  </export-step>
  <export-step id="mailhost"
               handler="Products.CMFSetup.mailhost.exportMailHost"
               title="MailHost">
-  
-  
-  
   Export the mailhost's settings and properties
- 
- 
- 
  </export-step>
  <export-step id="properties"
               handler="Products.CMFSetup.properties.exportSiteProperties"
               title="Site Properties">
-  
-  
-  
   Export site properties.
- 
- 
- 
  </export-step>
  <export-step id="rolemap"
               handler="Products.CMFSetup.rolemap.exportRolemap"
               title="Role / Permission Map">
-  
-  
-  
   Export custom roles and non-default role-permission mappings.
- 
- 
- 
  </export-step>
  <export-step id="skins"
               handler="Products.CMFSetup.skins.exportSkinsTool"
               title="Skins Tool">
-  
-  
-  
   Export skins tool's filesystem directory views and skin path definitions.
- 
- 
- 
  </export-step>
  <export-step id="step_registries"
               handler="Products.CMFSetup.tool.exportStepRegistries"
               title="Step Registries">
-  
-  
-  
   Export current contents of import step registry and export step registry.
- 
- 
- 
  </export-step>
  <export-step id="toolset"
               handler="Products.CMFSetup.tool.exportToolset"
               title="Required Tools">
-  
-  
-  
   Export required / forbidden tools.
- 
- 
- 
  </export-step>
  <export-step id="typeinfo"
               handler="Products.CMFSetup.typeinfo.exportTypesTool"
               title="Types Tool">
-  
-  
-  
   Export types tool's type information objects.
- 
- 
- 
  </export-step>
  <export-step id="workflows"
               handler="Products.CMFSetup.workflow.exportWorkflowTool"
               title="Workflow Tool">
-  
-  
-  
   Export workflow tool's workflow definitions and supporting scripts.
- 
- 
- 
  </export-step>
  <export-step id="caching_policy_mgr"
               handler="Products.CMFSetup.cachingpolicymgr.exportCachingPolicyManager"
               title="Caching Policies">
-  
-  
-  
-  Export cacing policy manager's policies.
- 
- 
- 
+  Export caching policy manager's policies.
  </export-step>
+ <export-step id="content_type_registry"
+              handler="Products.CMFSetup.contenttyperegistry.exportContentTypeRegistry"
+              title="Content Type Registry">
+  Export content type registry's predicates / bindings.
+ </export-step>
 </export-steps>

Modified: CMF/branches/1.5/CMFDefault/profiles/default/import_steps.xml
===================================================================
--- CMF/branches/1.5/CMFDefault/profiles/default/import_steps.xml	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFDefault/profiles/default/import_steps.xml	2005-10-14 03:50:12 UTC (rev 39123)
@@ -4,141 +4,72 @@
               handler="Products.CMFSetup.actions.importActionProviders"
               title="Action Providers">
   <dependency step="toolset"/>
-  
-  
-  
   Import actions tool's action providers and their actions.
- 
- 
-  
- 
  </import-step>
  <import-step id="cookie_authentication"
               version="20050903-01"
               handler="Products.CMFSetup.cookieauth.importCookieCrumbler"
               title="Cookie Authentication">
   <dependency step="toolset"/>
-  
-  
-  
   Import cookie crumbler settings
- 
- 
-  
- 
  </import-step>
  <import-step id="mailhost" version="20050803-01"
               handler="Products.CMFSetup.mailhost.importMailHost"
               title="MailHost">
   <dependency step="toolset"/>
-  
-  
-  
   Import mailhost settings
- 
- 
-  
- 
  </import-step>
  <import-step id="properties" version="20041215-01"
               handler="Products.CMFSetup.properties.importSiteProperties"
               title="Site Properties">
-  
-  
-  
   Import site properties.
- 
- 
-  
- 
  </import-step>
  <import-step id="rolemap" version="20040523-01"
               handler="Products.CMFSetup.rolemap.importRolemap"
               title="Role / Permission Map">
-
-  
-  
-  
   Import custom roles and non-default role-permission mappings.
- 
- 
- 
  </import-step>
  <import-step id="skins" version="20040630-01"
               handler="Products.CMFSetup.skins.importSkinsTool"
               title="Skins Tool">
   <dependency step="toolset"/>
-  
-  
-  
   Import skins tool's filesystem directory views and skin path definitions.
- 
- 
-  
- 
  </import-step>
  <import-step id="toolset" version="20040630-01"
               handler="Products.CMFSetup.tool.importToolset"
               title="Required tools">
-
-  
-  
-  
   Create required tools, replacing any of the wrong class, and remove
   forbidden ones.
- 
- 
  </import-step>
  <import-step id="typeinfo" version="20040630-01"
               handler="Products.CMFSetup.typeinfo.importTypesTool"
               title="Types Tool">
   <dependency step="toolset"/>
-  
-  
-  
   Import types tool's type information objects.
- 
- 
-  
- 
  </import-step>
  <import-step id="various" version="20041118-01"
               handler="Products.CMFDefault.setuphandlers.importVarious"
               title="Various Settings">
   <dependency step="toolset"/>
-  
-  
-  
   Import various settings from PortalGenerator.
- 
- 
-  
- 
  </import-step>
  <import-step id="workflow" version="20040630-01"
               handler="Products.CMFSetup.workflow.importWorkflowTool"
               title="Workflow Tool">
   <dependency step="toolset"/>
   <dependency step="typeinfo"/>
-  
-  
-  
   Import workflow tool's workflow definitions and supporting scripts.
- 
- 
-  
- 
  </import-step>
  <import-step id="caching_policy_mgr" version="20051011-01"
               handler="Products.CMFSetup.cachingpolicymgr.importCachingPolicyManager"
               title="Caching Policies">
   <dependency step="toolset"/>
-  
-  
-  
-  Import cacing policy manager's policies.
- 
- 
- 
+  Import caching policy manager's policies.
  </import-step>
+ <import-step id="content_type_registry" version="20051013-01"
+              handler="Products.CMFSetup.contenttyperegistry.importContentTypeRegistry"
+              title="Content Type Registry">
+  <dependency step="toolset"/>
+  Import content type registry's predicates and bindings.
+ </import-step>
 </import-steps>

Modified: CMF/branches/1.5/CMFDefault/profiles/default/toolset.xml
===================================================================
--- CMF/branches/1.5/CMFDefault/profiles/default/toolset.xml	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFDefault/profiles/default/toolset.xml	2005-10-14 03:50:12 UTC (rev 39123)
@@ -7,6 +7,8 @@
            class="Products.CMFCore.CookieCrumbler.CookieCrumbler"/>
  <required tool_id="caching_policy_manager"
            class="Products.CMFCore.CachingPolicyManager.CachingPolicyManager"/>
+ <required tool_id="content_type_registry"
+           class="Products.CMFCore.ContentTypeRegistry.ContentTypeRegistry"/>
  <required tool_id="portal_actions"
            class="Products.CMFCore.ActionsTool.ActionsTool"/>
  <required tool_id="portal_catalog"

Modified: CMF/branches/1.5/CMFDefault/setuphandlers.py
===================================================================
--- CMF/branches/1.5/CMFDefault/setuphandlers.py	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFDefault/setuphandlers.py	2005-10-14 03:50:12 UTC (rev 39123)
@@ -39,6 +39,5 @@
     gen = PortalGenerator()
     gen.setupUserFolder(site)
     gen.setupMembersFolder(site)
-    gen.setupMimetypes(site)
 
     return 'Various settings from PortalGenerator imported.'

Added: CMF/branches/1.5/CMFSetup/contenttyperegistry.py
===================================================================
--- CMF/branches/1.5/CMFSetup/contenttyperegistry.py	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFSetup/contenttyperegistry.py	2005-10-14 03:50:12 UTC (rev 39123)
@@ -0,0 +1,137 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""ContentTypeRegistry setup handlers.
+
+$Id$
+"""
+
+from AccessControl import ClassSecurityInfo
+from AccessControl.Permission import Permission
+from Globals import InitializeClass
+from Products.PageTemplates.PageTemplateFile import PageTemplateFile
+
+from Products.CMFCore.utils import getToolByName
+
+from permissions import ManagePortal
+from utils import CONVERTER
+from utils import DEFAULT
+from utils import ExportConfiguratorBase
+from utils import ImportConfiguratorBase
+from utils import KEY
+from utils import _xmldir
+
+#
+#   Configurator entry points
+#
+_FILENAME = 'contenttyperegistry.xml'
+
+def importContentTypeRegistry(context):
+    """ Import content type registry settings from an XML file.
+    """
+    site = context.getSite()
+    ctr = getToolByName(site, 'content_type_registry', None)
+    if ctr is None:
+        return 'Content type registry: No tool!'
+
+    body = context.readDataFile(_FILENAME)
+    if body is None:
+        return 'Content type registry: Nothing to import.'
+
+    if context.shouldPurge():
+        ctr.__init__()
+
+    # now act on the settings we've retrieved
+    configurator = ContentTypeRegistryImportConfigurator(site)
+    cpm_info = configurator.parseXML(body)
+
+    for info in cpm_info['predicates']:
+        ctr.addPredicate(info['predicate_id'], info['predicate_type'])
+        arguments = [x['value'].encode('ascii') for x in info['arguments']]
+        ctr.getPredicate(info['predicate_id']).edit(*arguments)
+        ctr.assignTypeName(info['predicate_id'], info['content_type_name'])
+
+    return 'Content type registry settings imported.'
+
+def exportContentTypeRegistry(context):
+    """ Export content type registry settings as an XML file.
+    """
+    site = context.getSite()
+    mhc = ContentTypeRegistryExportConfigurator( site ).__of__( site )
+    text = mhc.generateXML()
+
+    context.writeDataFile( _FILENAME, text, 'text/xml' )
+
+    return 'Content type registry settings exported.'
+
+
+class ContentTypeRegistryExportConfigurator(ExportConfiguratorBase):
+    """ Synthesize XML description of ctr properties.
+    """
+    security = ClassSecurityInfo()
+
+    security.declareProtected( ManagePortal, 'listPredicateInfo' )
+    def listPredicateInfo(self):
+        """ Return a list of mappings describing the tool's predicates.
+        """
+        cpm = getToolByName(self._site, 'content_type_registry')
+        for predicate_id, (predicate,
+                           content_type_name) in cpm.listPredicates():
+            yield {'predicate_id': predicate_id,
+                   'predicate_type': predicate.PREDICATE_TYPE,
+                   'content_type_name' : content_type_name,
+                   'arguments' : self._crackArgs(predicate),
+                  }
+
+    _KNOWN_PREDICATE_TYPES = {
+        'major_minor': lambda x: (','.join(x.major), ','.join(x.minor)),
+        'extension': lambda x: (','.join(x.extensions),),
+        'mimetype_regex': lambda x: (x.pattern and x.pattern.pattern,),
+        'name_regex': lambda x: (x.pattern and x.pattern.pattern,),
+    }
+
+    security.declarePrivate('_crackArgs')
+    def _crackArgs(self, predicate):
+        """ Crack apart the "edit args" from predicate.
+        """
+        cracker = self._KNOWN_PREDICATE_TYPES.get(predicate.PREDICATE_TYPE)
+        if cracker is not None:
+            return cracker(predicate)
+        return ()  # XXX:  raise?
+        
+    security.declarePrivate('_getExportTemplate')
+    def _getExportTemplate(self):
+
+        return PageTemplateFile('ctrExport.xml', _xmldir)
+
+InitializeClass(ContentTypeRegistryExportConfigurator)
+
+class ContentTypeRegistryImportConfigurator(ImportConfiguratorBase):
+
+    def _getImportMapping(self):
+        return {
+          'content-type-registry':
+             { 'predicate':             {KEY: 'predicates', DEFAULT: ()}
+             },
+          'predicate':
+             { 'predicate_id':          {},
+               'remove':                {},
+               'predicate_type':        {},
+               'content_type_name':     {},
+               'argument':              {KEY: 'arguments', DEFAULT: ()},
+             },
+           'argument':
+             { 'value':                 {},
+             },
+          }
+
+InitializeClass(ContentTypeRegistryImportConfigurator)


Property changes on: CMF/branches/1.5/CMFSetup/contenttyperegistry.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: CMF/branches/1.5/CMFSetup/tests/test_contenttyperegistry.py
===================================================================
--- CMF/branches/1.5/CMFSetup/tests/test_contenttyperegistry.py	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFSetup/tests/test_contenttyperegistry.py	2005-10-14 03:50:12 UTC (rev 39123)
@@ -0,0 +1,278 @@
+##############################################################################
+#
+# Copyright (c) 2005 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.
+#
+##############################################################################
+"""ContentTypeRegistry setup handler unit tests.
+
+$Id$
+"""
+import unittest
+#import Testing
+
+
+from common import BaseRegistryTests
+from common import DummyExportContext
+from common import DummyImportContext
+
+_TEST_PREDICATES = (
+ ('plain_text', 'major_minor', ('text', 'plain,javascript'), 'File'),
+ ('stylesheets', 'extension', ('css,xsl,xslt',), 'Text File'),
+ ('images', 'mimetype_regex', ('image/.*',), 'Image'),
+ ('logfiles', 'name_regex', ('error_log-.*',), 'Log File'),
+)
+
+class _ContentTypeRegistrySetup(BaseRegistryTests):
+
+    MAJOR_MINOR_ID = _TEST_PREDICATES[0][0]
+    MAJOR = _TEST_PREDICATES[0][2][0]
+    MINOR = _TEST_PREDICATES[0][2][1]
+    MAJOR_MINOR_TYPENAME = _TEST_PREDICATES[0][3]
+    EXTENSION_ID = _TEST_PREDICATES[1][0]
+    EXTENSIONS = _TEST_PREDICATES[1][2][0]
+    EXTENSION_TYPENAME = _TEST_PREDICATES[1][3]
+    MIMETYPE_REGEX_ID = _TEST_PREDICATES[2][0]
+    MIMETYPE_REGEX = _TEST_PREDICATES[2][2][0]
+    MIMETYPE_REGEX_TYPENAME = _TEST_PREDICATES[2][3]
+    NAME_REGEX_ID = _TEST_PREDICATES[3][0]
+    NAME_REGEX = _TEST_PREDICATES[3][2][0]
+    NAME_REGEX_TYPENAME = _TEST_PREDICATES[3][3]
+
+    _EMPTY_EXPORT = """\
+<?xml version="1.0"?>
+<content-type-registry>
+</content-type-registry>
+"""
+
+    _WITH_POLICY_EXPORT = """\
+<?xml version="1.0"?>
+<content-type-registry>
+ <predicate
+    predicate_id="%s"
+    predicate_type="major_minor"
+    content_type_name="%s">
+  <argument value="%s" />
+  <argument value="%s" />
+ </predicate>
+ <predicate
+    predicate_id="%s"
+    predicate_type="extension"
+    content_type_name="%s">
+  <argument value="%s" />
+ </predicate>
+ <predicate
+    predicate_id="%s"
+    predicate_type="mimetype_regex"
+    content_type_name="%s">
+  <argument value="%s" />
+ </predicate>
+ <predicate
+    predicate_id="%s"
+    predicate_type="name_regex"
+    content_type_name="%s">
+  <argument value="%s" />
+ </predicate>
+</content-type-registry>
+""" % (MAJOR_MINOR_ID,
+       MAJOR_MINOR_TYPENAME,
+       MAJOR,
+       MINOR,
+       EXTENSION_ID,
+       EXTENSION_TYPENAME,
+       EXTENSIONS,
+       MIMETYPE_REGEX_ID,
+       MIMETYPE_REGEX_TYPENAME,
+       MIMETYPE_REGEX,
+       NAME_REGEX_ID,
+       NAME_REGEX_TYPENAME,
+       NAME_REGEX,
+      )
+
+    def _initSite(self, mit_predikat=False):
+        from OFS.Folder import Folder
+        from Products.CMFCore.ContentTypeRegistry import ContentTypeRegistry
+
+        self.root.site = Folder(id='site')
+        site = self.root.site
+        ctr = ContentTypeRegistry()
+        site._setObject( ctr.getId(), ctr )
+
+        if mit_predikat:
+            for (predicate_id, predicate_type, edit_args, content_type_name
+                ) in _TEST_PREDICATES:
+                ctr.addPredicate(predicate_id, predicate_type) 
+                predicate = ctr.getPredicate(predicate_id)
+                predicate.edit(*edit_args)
+                ctr.assignTypeName(predicate_id, content_type_name)
+
+        return site
+
+class ContentTypeRegistryExportConfiguratorTests(_ContentTypeRegistrySetup):
+
+    def _getTargetClass(self):
+        from Products.CMFSetup.contenttyperegistry \
+                import ContentTypeRegistryExportConfigurator
+
+        return ContentTypeRegistryExportConfigurator
+
+    def test_generateXML_empty(self):
+        site = self._initSite(mit_predikat=False)
+        configurator = self._makeOne(site).__of__(site)
+
+        self._compareDOM(configurator.generateXML(), self._EMPTY_EXPORT)
+
+    def test_generateXML_with_policy(self):
+        site = self._initSite(mit_predikat=True)
+        configurator = self._makeOne(site).__of__(site)
+
+        self._compareDOM(configurator.generateXML(), self._WITH_POLICY_EXPORT)
+
+
+class ContentTypeRegistryImportConfiguratorTests(_ContentTypeRegistrySetup):
+
+    def _getTargetClass(self):
+        from Products.CMFSetup.contenttyperegistry \
+                import ContentTypeRegistryImportConfigurator
+
+        return ContentTypeRegistryImportConfigurator
+
+    def test_parseXML_empty(self):
+        site = self._initSite(mit_predikat=False)
+        configurator = self._makeOne(site)
+        ctr_info = configurator.parseXML(self._EMPTY_EXPORT)
+
+        self.assertEqual(len(ctr_info['predicates']), 0)
+
+    def test_parseXML_with_policy(self):
+        site = self._initSite(mit_predikat=False)
+        configurator = self._makeOne(site)
+        ctr_info = configurator.parseXML(self._WITH_POLICY_EXPORT)
+
+        self.assertEqual(len(ctr_info['predicates']), len(_TEST_PREDICATES))
+
+        info = ctr_info['predicates'][0]
+        self.assertEqual(info['predicate_id'], self.MAJOR_MINOR_ID)
+        self.assertEqual(info['predicate_type'], 'major_minor')
+        self.assertEqual(info['content_type_name'], self.MAJOR_MINOR_TYPENAME)
+        arguments = info['arguments']
+        self.assertEqual(len(arguments), 2)
+        self.assertEqual(arguments[0]['value'], self.MAJOR)
+        self.assertEqual(arguments[1]['value'], self.MINOR)
+
+        info = ctr_info['predicates'][1]
+        self.assertEqual(info['predicate_id'], self.EXTENSION_ID)
+        self.assertEqual(info['predicate_type'], 'extension')
+        self.assertEqual(info['content_type_name'], self.EXTENSION_TYPENAME)
+        arguments = info['arguments']
+        self.assertEqual(len(arguments), 1)
+        self.assertEqual(arguments[0]['value'], self.EXTENSIONS)
+
+        info = ctr_info['predicates'][2]
+        self.assertEqual(info['predicate_id'], self.MIMETYPE_REGEX_ID)
+        self.assertEqual(info['predicate_type'], 'mimetype_regex')
+        self.assertEqual(info['content_type_name'],
+                         self.MIMETYPE_REGEX_TYPENAME)
+        arguments = info['arguments']
+        self.assertEqual(len(arguments), 1)
+        self.assertEqual(arguments[0]['value'], self.MIMETYPE_REGEX)
+
+        info = ctr_info['predicates'][3]
+        self.assertEqual(info['predicate_id'], self.NAME_REGEX_ID)
+        self.assertEqual(info['predicate_type'], 'name_regex')
+        self.assertEqual(info['content_type_name'],
+                         self.NAME_REGEX_TYPENAME)
+        arguments = info['arguments']
+        self.assertEqual(len(arguments), 1)
+        self.assertEqual(arguments[0]['value'], self.NAME_REGEX)
+
+class Test_exportContentTypeRegistry(_ContentTypeRegistrySetup):
+
+    def test_empty(self):
+        from Products.CMFSetup.contenttyperegistry \
+            import exportContentTypeRegistry
+
+        site = self._initSite(mit_predikat=False)
+        context = DummyExportContext(site)
+        exportContentTypeRegistry(context)
+
+        self.assertEqual(len(context._wrote), 1)
+        filename, text, content_type = context._wrote[0]
+        self.assertEqual(filename, 'contenttyperegistry.xml')
+        self._compareDOM(text, self._EMPTY_EXPORT)
+        self.assertEqual(content_type, 'text/xml')
+
+    def test_with_policy(self):
+        from Products.CMFSetup.contenttyperegistry \
+            import exportContentTypeRegistry
+
+        site = self._initSite(mit_predikat=True)
+        context = DummyExportContext(site)
+        exportContentTypeRegistry(context)
+
+        self.assertEqual(len(context._wrote), 1)
+        filename, text, content_type = context._wrote[0]
+        self.assertEqual(filename, 'contenttyperegistry.xml')
+        self._compareDOM(text, self._WITH_POLICY_EXPORT)
+        self.assertEqual(content_type, 'text/xml')
+
+
+class Test_importContentTypeRegistry(_ContentTypeRegistrySetup):
+
+    def test_normal(self):
+        from Products.CMFSetup.contenttyperegistry \
+            import importContentTypeRegistry
+
+        site = self._initSite(mit_predikat=False)
+        ctr = site.content_type_registry
+        self.assertEqual(len(ctr.listPredicates()), 0)
+
+        context = DummyImportContext(site)
+        context._files['contenttyperegistry.xml'] = self._WITH_POLICY_EXPORT
+        importContentTypeRegistry(context)
+
+        self.assertEqual(len(ctr.listPredicates()), len(_TEST_PREDICATES))
+
+        predicate_id, (predicate, content_type_name) = ctr.listPredicates()[0]
+        self.assertEqual(predicate_id, self.MAJOR_MINOR_ID)
+        self.assertEqual(predicate.PREDICATE_TYPE, 'major_minor')
+        self.assertEqual(content_type_name, self.MAJOR_MINOR_TYPENAME)
+        self.assertEqual(predicate.major, self.MAJOR.split(','))
+        self.assertEqual(predicate.minor, self.MINOR.split(','))
+
+        predicate_id, (predicate, content_type_name) = ctr.listPredicates()[1]
+        self.assertEqual(predicate_id, self.EXTENSION_ID)
+        self.assertEqual(predicate.PREDICATE_TYPE, 'extension')
+        self.assertEqual(content_type_name, self.EXTENSION_TYPENAME)
+        self.assertEqual(predicate.extensions, self.EXTENSIONS.split(','))
+
+        predicate_id, (predicate, content_type_name) = ctr.listPredicates()[2]
+        self.assertEqual(predicate_id, self.MIMETYPE_REGEX_ID)
+        self.assertEqual(predicate.PREDICATE_TYPE, 'mimetype_regex')
+        self.assertEqual(content_type_name, self.MIMETYPE_REGEX_TYPENAME)
+        self.assertEqual(predicate.pattern.pattern, self.MIMETYPE_REGEX)
+
+        predicate_id, (predicate, content_type_name) = ctr.listPredicates()[3]
+        self.assertEqual(predicate_id, self.NAME_REGEX_ID)
+        self.assertEqual(predicate.PREDICATE_TYPE, 'name_regex')
+        self.assertEqual(content_type_name, self.NAME_REGEX_TYPENAME)
+        self.assertEqual(predicate.pattern.pattern, self.NAME_REGEX)
+
+
+def test_suite():
+    return unittest.TestSuite((
+        unittest.makeSuite(ContentTypeRegistryExportConfiguratorTests),
+        unittest.makeSuite(ContentTypeRegistryImportConfiguratorTests),
+        unittest.makeSuite(Test_exportContentTypeRegistry),
+        unittest.makeSuite(Test_importContentTypeRegistry),
+        ))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')
+


Property changes on: CMF/branches/1.5/CMFSetup/tests/test_contenttyperegistry.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native

Added: CMF/branches/1.5/CMFSetup/xml/ctrExport.xml
===================================================================
--- CMF/branches/1.5/CMFSetup/xml/ctrExport.xml	2005-10-13 21:01:27 UTC (rev 39122)
+++ CMF/branches/1.5/CMFSetup/xml/ctrExport.xml	2005-10-14 03:50:12 UTC (rev 39123)
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<content-type-registry xmlns:tal="http://xml.zope.org/namespaces/tal">
+ <predicate
+    predicate_id="PREDICATE_ID"
+    predicate_type="PREDICATE_TYPE"
+    content_type_name="CONTENT_TYPE_NAME"
+    tal:repeat="info context/listPredicateInfo"
+    tal:attributes="predicate_id info/predicate_id;
+                    predicate_type info/predicate_type;
+                    content_type_name info/content_type_name; " >
+  <argument
+    value="ARGUMENT_VALUE"
+    tal:repeat="arg info/arguments"
+    tal:attributes="value arg"
+    />
+ </predicate>
+</content-type-registry>
+


Property changes on: CMF/branches/1.5/CMFSetup/xml/ctrExport.xml
___________________________________________________________________
Name: svn:eol-style
   + native



More information about the CMF-checkins mailing list