[CMF-checkins] CVS: CMF/CMFCore - ContentTypeRegistry.py:1.5 TypesTool.py:1.22 utils.py:1.19

Andrew Sawyers andrew@zope.com
Wed, 28 Nov 2001 11:34:51 -0500


Update of /cvs-repository/CMF/CMFCore
In directory cvs.zope.org:/tmp/cvs-serv30339/CMFCore

Modified Files:
	ContentTypeRegistry.py TypesTool.py utils.py 
Log Message:

*added cookString to CMFCore.utils
*changed TypesTool to call cookString on an action name if it's
being used as an id to ensure it's id friendly.
*added ZPL to ContentTypeRegistry


=== CMF/CMFCore/ContentTypeRegistry.py 1.4 => 1.5 ===
+# 
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+# 
+# Copyright (c) Digital Creations.  All rights reserved.
+# 
+# This license has been certified as Open Source(tm).
+# 
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+# 
+# 1. Redistributions in source code must retain the above copyright
+#    notice, this list of conditions, and the following disclaimer.
+# 
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions, and the following disclaimer in
+#    the documentation and/or other materials provided with the
+#    distribution.
+# 
+# 3. Digital Creations requests that attribution be given to Zope
+#    in any manner possible. Zope includes a "Powered by Zope"
+#    button that is installed by default. While it is not a license
+#    violation to remove this button, it is requested that the
+#    attribution remain. A significant investment has been put
+#    into Zope, and this effort will continue if the Zope community
+#    continues to grow. This is one way to assure that growth.
+# 
+# 4. All advertising materials and documentation mentioning
+#    features derived from or use of this software must display
+#    the following acknowledgement:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    In the event that the product being advertised includes an
+#    intact Zope distribution (with copyright and license included)
+#    then this clause is waived.
+# 
+# 5. Names associated with Zope or Digital Creations must not be used to
+#    endorse or promote products derived from this software without
+#    prior written permission from Digital Creations.
+# 
+# 6. Modified redistributions of any form whatsoever must retain
+#    the following acknowledgment:
+# 
+#      "This product includes software developed by Digital Creations
+#      for use in the Z Object Publishing Environment
+#      (http://www.zope.org/)."
+# 
+#    Intact (re-)distributions of any official Zope release do not
+#    require an external acknowledgement.
+# 
+# 7. Modifications are encouraged but must be packaged separately as
+#    patches to official Zope releases.  Distributions that do not
+#    clearly separate the patches from the original work must be clearly
+#    labeled as unofficial distributions.  Modifications which do not
+#    carry the name Zope may be packaged in any form, as long as they
+#    conform to all of the clauses above.
+# 
+# 
+# Disclaimer
+# 
+#   THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+#   EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+#   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+#   PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+#   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+#   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+#   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+#   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+#   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+#   SUCH DAMAGE.
+# 
+# 
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations.  Specific
+# attributions are listed in the accompanying credits file.
+# 
+##############################################################################
+
 """
+Basic Site content type registry
 """
 
 from OFS.SimpleItem import SimpleItem, Item


=== CMF/CMFCore/TypesTool.py 1.21 => 1.22 ===
 from Globals import InitializeClass, DTMLFile
 from utils import UniqueObject, SimpleItemWithProperties, tuplize
-from utils import _dtmldir, _checkPermission
+from utils import _dtmldir, _checkPermission, cookString
 import string
 from AccessControl import getSecurityManager, ClassSecurityInfo
 from Acquisition import aq_base
@@ -177,7 +177,7 @@
                     action = action.copy()
                     # Some backward compatibility stuff.
                     if not action.has_key('id'):
-                        action['id'] = string.lower(action['name'])
+                        action['id'] = cookString(action['name'])
                     if not action.has_key('category'):
                         action['category'] = 'object'
                     actions.append(action)
@@ -291,7 +291,7 @@
             if not a.has_key('category'):
                 a['category'] = 'object'
             if not a.has_key('id'):
-                a['id'] = string.lower(a['name'])
+                a['id'] = cookString(a['name'])
             if not a.has_key( 'visible' ):
                 a['visible'] = 1
             actions.append(a)


=== CMF/CMFCore/utils.py 1.18 => 1.19 ===
 import os, re
 from Globals import package_home
+from string import lower
 
 try: from OFS.ObjectManager import UNIQUE
 except ImportError: UNIQUE = 2
@@ -134,7 +135,17 @@
 class UniqueObject (ImmutableId):
     __replaceable__ = UNIQUE
 
-    
+
+def cookString(text):
+    """
+    Make a single string without spaces from a string possibly
+    containing spaces....and make it lowercase...also makes a zope
+    friendly id.
+    """
+    rgx = re.compile(r'(^_|[^a-zA-Z0-9-_~\,\.])')
+    cooked = string.lower(re.sub(rgx, "",text))
+    return cooked
+
 def tuplize( valueName, value ):
     if type(value) == type(()): return value
     if type(value) == type([]): return tuple( value )