[Zope-Checkins] SVN: Zope/branches/2.12/ - LP #143273: Enable the dtml-var modifiers url_quote, url_unquote,
Jens Vagelpohl
jens at dataflake.org
Wed Jul 14 05:52:45 EDT 2010
Log message for revision 114734:
- LP #143273: Enable the dtml-var modifiers url_quote, url_unquote,
url_quote_plus and url_unquote_plus to handle unicode strings.
Changed:
U Zope/branches/2.12/doc/CHANGES.rst
U Zope/branches/2.12/src/DocumentTemplate/DT_Var.py
U Zope/branches/2.12/src/DocumentTemplate/tests/test_DT_Var.py
-=-
Modified: Zope/branches/2.12/doc/CHANGES.rst
===================================================================
--- Zope/branches/2.12/doc/CHANGES.rst 2010-07-14 06:59:19 UTC (rev 114733)
+++ Zope/branches/2.12/doc/CHANGES.rst 2010-07-14 09:52:44 UTC (rev 114734)
@@ -11,7 +11,10 @@
Bugs Fixed
++++++++++
+- LP #143273: Enable the dtml-var modifiers url_quote, url_unquote,
+ url_quote_plus and url_unquote_plus to handle unicode strings.
+
2.12.9 (2010-07-13)
-------------------
Modified: Zope/branches/2.12/src/DocumentTemplate/DT_Var.py
===================================================================
--- Zope/branches/2.12/src/DocumentTemplate/DT_Var.py 2010-07-14 06:59:19 UTC (rev 114733)
+++ Zope/branches/2.12/src/DocumentTemplate/DT_Var.py 2010-07-14 09:52:44 UTC (rev 114734)
@@ -342,15 +342,31 @@
def url_quote(v, name='(Unknown name)', md={}):
+ if isinstance(v, unicode):
+ # quote does not handle unicode. Encoding to a "safe"
+ # intermediate encoding before quoting, then unencoding the result.
+ return quote(v.encode('utf-8')).decode('UTF-8')
return quote(str(v))
def url_quote_plus(v, name='(Unknown name)', md={}):
+ if isinstance(v, unicode):
+ # quote_plus does not handle unicode. Encoding to a "safe"
+ # intermediate encoding before quoting, then unencoding the result.
+ return quote_plus(v.encode('utf-8')).decode('UTF-8')
return quote_plus(str(v))
def url_unquote(v, name='(Unknown name)', md={}):
+ if isinstance(v, unicode):
+ # unquote does not handle unicode. Encoding to a "safe"
+ # intermediate encoding before quoting, then unencoding the result.
+ return unquote(v.encode('utf-8')).decode('UTF-8')
return unquote(str(v))
def url_unquote_plus(v, name='(Unknown name)', md={}):
+ if isinstance(v, unicode):
+ # unquote_plus does not handle unicode. Encoding to a "safe"
+ # intermediate encoding before quoting, then unencoding the result.
+ return unquote_plus(v.encode('utf-8')).decode('UTF-8')
return unquote_plus(str(v))
def newline_to_br(v, name='(Unknown name)', md={}):
Modified: Zope/branches/2.12/src/DocumentTemplate/tests/test_DT_Var.py
===================================================================
--- Zope/branches/2.12/src/DocumentTemplate/tests/test_DT_Var.py 2010-07-14 06:59:19 UTC (rev 114733)
+++ Zope/branches/2.12/src/DocumentTemplate/tests/test_DT_Var.py 2010-07-14 09:52:44 UTC (rev 114734)
@@ -62,9 +62,43 @@
"""
+
+class TestUrlQuoting(unittest.TestCase):
+
+ def test_url_quoting(self):
+ from DocumentTemplate.DT_Var import url_quote
+ from DocumentTemplate.DT_Var import url_unquote
+ unicode_value = u'G\xfcnther M\xfcller'
+ quoted_unicode_value = u'G%C3%BCnther%20M%C3%BCller'
+ utf8_value = unicode_value.encode('UTF-8')
+ quoted_utf8_value = 'G%C3%BCnther%20M%C3%BCller'
+
+ self.assertEquals(url_quote(unicode_value), quoted_unicode_value)
+ self.assertEquals(url_quote(utf8_value), quoted_utf8_value)
+
+ self.assertEquals(url_unquote(quoted_unicode_value), unicode_value)
+ self.assertEquals(url_unquote(quoted_utf8_value), utf8_value)
+
+
+ def test_url_quoting_plus(self):
+ from DocumentTemplate.DT_Var import url_quote_plus
+ from DocumentTemplate.DT_Var import url_unquote_plus
+ unicode_value = u'G\xfcnther M\xfcller'
+ quoted_unicode_value = u'G%C3%BCnther+M%C3%BCller'
+ utf8_value = unicode_value.encode('UTF-8')
+ quoted_utf8_value = 'G%C3%BCnther+M%C3%BCller'
+
+ self.assertEquals(url_quote_plus(unicode_value), quoted_unicode_value)
+ self.assertEquals(url_quote_plus(utf8_value), quoted_utf8_value)
+
+ self.assertEquals(url_unquote_plus(quoted_unicode_value), unicode_value)
+ self.assertEquals(url_unquote_plus(quoted_utf8_value), utf8_value)
+
+
def test_suite():
suite = unittest.TestSuite()
suite.addTest(doctest.DocTestSuite())
+ suite.addTest(unittest.makeSuite(TestUrlQuoting))
return suite
if __name__ == '__main__':
More information about the Zope-Checkins
mailing list