[Zope3-checkins] SVN: Zope3/branches/3.3/ - backport of fixes for 99408 and 99402

Christian Theune ct at gocept.com
Sat Apr 21 05:41:35 EDT 2007


Log message for revision 74312:
   - backport of fixes for 99408 and 99402
  

Changed:
  U   Zope3/branches/3.3/doc/CHANGES.txt
  A   Zope3/branches/3.3/src/zope/app/component/tests/test_vocabulary.py
  U   Zope3/branches/3.3/src/zope/app/component/vocabulary.py

-=-
Modified: Zope3/branches/3.3/doc/CHANGES.txt
===================================================================
--- Zope3/branches/3.3/doc/CHANGES.txt	2007-04-21 09:32:39 UTC (rev 74311)
+++ Zope3/branches/3.3/doc/CHANGES.txt	2007-04-21 09:41:34 UTC (rev 74312)
@@ -10,6 +10,12 @@
 
     Bugfixes
 
+      - #99408: zope.app.component.vocabulary.UtilityNames.getTermByToken was
+        broken
+
+      - #99402: zope.app.component.vocabulary.UtilityNameTerm was implement
+        the wrong interface incorrectly
+
       - zope.app.form.browser.textwidgets: The TextAreaWidget was not escaping
         its content when the validation failed. This way <, > and & were put
         out unquoted.

Added: Zope3/branches/3.3/src/zope/app/component/tests/test_vocabulary.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/component/tests/test_vocabulary.py	2007-04-21 09:32:39 UTC (rev 74311)
+++ Zope3/branches/3.3/src/zope/app/component/tests/test_vocabulary.py	2007-04-21 09:41:34 UTC (rev 74312)
@@ -0,0 +1,23 @@
+##############################################################################
+#
+# 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.
+#
+##############################################################################
+"""Vocabulary tests
+
+$Id$
+"""
+__docformat__ = "reStructuredText"
+import doctest
+
+
+def test_suite():
+    return doctest.DocTestSuite('zope.app.component.vocabulary')


Property changes on: Zope3/branches/3.3/src/zope/app/component/tests/test_vocabulary.py
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: Zope3/branches/3.3/src/zope/app/component/vocabulary.py
===================================================================
--- Zope3/branches/3.3/src/zope/app/component/vocabulary.py	2007-04-21 09:32:39 UTC (rev 74311)
+++ Zope3/branches/3.3/src/zope/app/component/vocabulary.py	2007-04-21 09:41:34 UTC (rev 74312)
@@ -24,7 +24,8 @@
 from zope.interface.interfaces import IInterface
 from zope.interface.verify import verifyObject
 from zope.schema.interfaces import IVocabulary, IVocabularyTokenized
-from zope.schema.interfaces import ITokenizedTerm, IVocabularyFactory
+from zope.schema.interfaces import ITokenizedTerm, ITitledTokenizedTerm
+from zope.schema.interfaces import IVocabularyFactory
 
 from zope.app.i18n import ZopeMessageFactory as _
 from zope.app.interface.vocabulary import ObjectInterfacesVocabulary
@@ -250,35 +251,37 @@
     u'abc'
     >>> t2.value
     u'\xc0\xdf\xc7'
-    >>> t1.title()
+    >>> t1.title
     u'abc'
-    >>> repr(t2.title())
+    >>> repr(t2.title)
     "u'\\xc0\\xdf\\xc7'"
+    >>> ITitledTokenizedTerm.providedBy(t1)
+    True
 
     The tokens used for form values are Base-64 encodings of the
     names, with the letter 't' prepended to ensure the unnamed utility
     is supported:
 
-    >>> t1.token()
+    >>> t1.token
     'tYWJj'
-    >>> t2.token()
+    >>> t2.token
     'tw4DDn8OH'
 
-
     The unnamed utility is given an artificial title for use in user
     interfaces:
 
     >>> t3 = UtilityNameTerm(u'')
-    >>> t3.title()
+    >>> t3.title
     u'(unnamed utility)'
 
     """
 
-    implements(ITokenizedTerm)
+    implements(ITitledTokenizedTerm)
 
     def __init__(self, value):
         self.value = unicode(value)
 
+    @property
     def token(self):
         # Return our value as a token.  This is required to be 7-bit
         # printable ascii. We'll use base64 generated from the UTF-8
@@ -286,6 +289,7 @@
         # allowed to apply.)
         return "t" + self.value.encode('utf-8').encode('base64')[:-1]
 
+    @property
     def title(self):
         return self.value or _("(unnamed utility)")
 
@@ -301,6 +305,7 @@
 
     >>> vocab = UtilityNames(IMyUtility)
 
+    >>> from zope.schema.interfaces import IVocabulary
     >>> IVocabulary.providedBy(vocab)
     True
     >>> IVocabularyTokenized.providedBy(vocab)
@@ -333,9 +338,15 @@
     >>> u'' in vocab
     True
     >>> term1 = vocab.getTerm(u'')
-    >>> term2 = vocab.getTermByToken(term1.token())
+    >>> term2 = vocab.getTermByToken(term1.token)
     >>> term2.value
     u''
+    >>> term3 = vocab.getTerm(u'one')
+    >>> term3.token
+    'tb25l'
+    >>> term3a = vocab.getTermByToken('tb25l')
+    >>> term3.value
+    u'one'
 
     >>> placelesssetup.tearDown()
     """
@@ -359,7 +370,7 @@
             if token == "t":
                 if not name:
                     break
-            elif name.encode('utf-8').encode('base64')[:-1] == token:
+            elif UtilityNameTerm(name).token == token:
                 break
         else:
             raise LookupError("no matching token: %r" % token)



More information about the Zope3-Checkins mailing list