[Zope-Checkins] SVN: Products.Five/branches/1.3/ Backported 'browser: processInputs now decodes strings in lists and tuples' fix from 1.4 (r70913) branch.

Rocky Burt rocky at serverzen.com
Sat Nov 4 13:54:05 EST 2006


Log message for revision 71059:
  Backported 'browser: processInputs now decodes strings in lists and tuples' fix from 1.4 (r70913) branch.

Changed:
  U   Products.Five/branches/1.3/CHANGES.txt
  A   Products.Five/branches/1.3/browser/tests/test_decode.py
  U   Products.Five/branches/1.3/form/__init__.py

-=-
Modified: Products.Five/branches/1.3/CHANGES.txt
===================================================================
--- Products.Five/branches/1.3/CHANGES.txt	2006-11-04 13:35:51 UTC (rev 71058)
+++ Products.Five/branches/1.3/CHANGES.txt	2006-11-04 18:54:04 UTC (rev 71059)
@@ -8,6 +8,8 @@
 Bugfixes
 --------
 
+* browser: processInputs now decodes strings in lists and tuples.
+
 * Port code from Zope 3 making resource directories recursive.
   Thanks to Richard Waid.
 

Added: Products.Five/branches/1.3/browser/tests/test_decode.py
===================================================================
--- Products.Five/branches/1.3/browser/tests/test_decode.py	2006-11-04 13:35:51 UTC (rev 71058)
+++ Products.Five/branches/1.3/browser/tests/test_decode.py	2006-11-04 18:54:04 UTC (rev 71059)
@@ -0,0 +1,75 @@
+##############################################################################
+#
+# Copyright (c) 2006 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 decode module.
+
+$Id: test_decode.py 70913 2006-10-25 19:20:28Z yuppie $
+"""
+import os, sys
+if __name__ == '__main__':
+    execfile(os.path.join(sys.path[0], 'framework.py'))
+
+def test_processInputs():
+    """
+    Testing processInputs
+
+      >>> from zope import interface
+      >>> from zope.i18n.interfaces import IUserPreferredCharsets
+      >>> from Products.Five.form import EditView
+      >>> class DummyResponse:
+      ...     headers = {}
+      ...     def setHeader(self, n, v):
+      ...         self.headers[n] = v
+      >>> class DummyRequest:
+      ...     interface.implements(IUserPreferredCharsets)
+      ...     form = {}
+      ...     def getPreferredCharsets(self):
+      ...         return ['iso-8859-1']
+      ...     RESPONSE = DummyResponse()
+      >>> class DummyEditView(EditView):
+      ...     def __init__(self, context, request):
+      ...         self.context = context
+      ...         self.request = request
+      >>> request = DummyRequest()
+
+    Strings are converted to unicode::
+
+      >>> request.form['foo'] = u'f\xf6\xf6'.encode('iso-8859-1')
+      >>> editview = DummyEditView(None, request)
+      >>> editview._processInputs()
+      >>> request.form['foo'] == u'f\xf6\xf6'
+      True
+
+    Strings in lists are converted to unicode::
+
+      >>> request.form['foo'] = [u'f\xf6\xf6'.encode('iso-8859-1')]
+      >>> editview = DummyEditView(None, request)
+      >>> editview._processInputs()
+      >>> request.form['foo'] == [u'f\xf6\xf6']
+      True
+
+    Strings in tuples are converted to unicode::
+
+      >>> request.form['foo'] = (u'f\xf6\xf6'.encode('iso-8859-1'),)
+      >>> editview = DummyEditView(None, request)
+      >>> editview._processInputs()
+      >>> request.form['foo'] == (u'f\xf6\xf6',)
+      True
+    """
+
+def test_suite():
+    from zope.testing.doctest import DocTestSuite
+    return DocTestSuite()
+
+if __name__ == '__main__':
+    framework()

Modified: Products.Five/branches/1.3/form/__init__.py
===================================================================
--- Products.Five/branches/1.3/form/__init__.py	2006-11-04 13:35:51 UTC (rev 71058)
+++ Products.Five/branches/1.3/form/__init__.py	2006-11-04 18:54:04 UTC (rev 71059)
@@ -88,9 +88,17 @@
     def _processInputs(self):
         request = self.request
         for name, value in request.form.items():
-            if (not (isCGI_NAME(name) or name.startswith('HTTP_'))
-                and isinstance(value, str)):
-                request.form[name] = self._decode(value)
+            if not (isCGI_NAME(name) or name.startswith('HTTP_')):
+                if isinstance(value, str):
+                    request.form[name] = self._decode(value)
+                elif isinstance(value, list):
+                    request.form[name] = [ self._decode(val)
+                                           for val in value
+                                           if isinstance(val, str) ]
+                elif isinstance(value, tuple):
+                    request.form[name] = tuple([ self._decode(val)
+                                                 for val in value
+                                                 if isinstance(val, str) ])
 
     def _setPageEncoding(self):
         """Set the encoding of the form page via the Content-Type header.



More information about the Zope-Checkins mailing list