Skip to content

Commit

Permalink
let "unicode conflict resolution" work for all templates (#872)
Browse files Browse the repository at this point in the history
* let "unicode conflict resolution" work for all templates

* add missing files
  • Loading branch information
dataflake committed Jul 9, 2020
1 parent 39b78b1 commit 97f0d95
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 1 deletion.
3 changes: 3 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ https://github.com/zopefoundation/Zope/blob/4.x/CHANGES.rst
5.0a3 (unreleased)
------------------

- Let "unicode conflict resolution" work for all templates (not just
``ZopePageTemplate``).

- Make "Unicode Conflict Resolution" available for templates
rendered with ``chameleon``
(`Products.CMFPlone#3145
Expand Down
3 changes: 2 additions & 1 deletion src/Products/PageTemplates/Expressions.py
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,8 @@ def _handleText(self, text, expr):
return text.decode('ascii')

try:
return resolver.resolve(self.contexts['context'], text, expr)
return resolver.resolve(
self.contexts.get('context'), text, expr)
except UnicodeDecodeError as e:
LOG.error("UnicodeDecodeError detected for expression \"%s\"\n"
"Resolver class: %s\n"
Expand Down
5 changes: 5 additions & 0 deletions src/Products/PageTemplates/tests/input/UnicodeResolution.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<html>
<head></head>
<body>
<div tal:define="b python: 'äöü'" tal:content="string:$b" />
</body>
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<html>
<head></head>
<body>
<div>äöü</div>
</body>
8 changes: 8 additions & 0 deletions src/Products/PageTemplates/tests/testHTMLTests.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@
from Products.PageTemplates.tests import util
from Products.PageTemplates.unicodeconflictresolver import \
DefaultUnicodeEncodingConflictResolver
from Products.PageTemplates.unicodeconflictresolver import \
PreferredCharsetResolver
from zope.component import provideUtility
from zope.traversing.adapters import DefaultTraversable

Expand Down Expand Up @@ -199,3 +201,9 @@ def testDefaultKeywordHandling(self):

def testSwitch(self):
self.assert_expected(self.folder.t, 'switch.html')

def test_unicode_conflict_resolution(self):
# override with the more "demanding" resolver
provideUtility(PreferredCharsetResolver)
t = PageTemplate()
self.assert_expected(t, 'UnicodeResolution.html')
3 changes: 3 additions & 0 deletions src/Products/PageTemplates/tests/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ def getPhysicalRoot(self):


def check_html(s1, s2):
if not isinstance(s2, bytes) and isinstance(s1, bytes):
# convert to common type
s1 = s1.decode("utf-8") # our encoding
s1 = normalize_html(s1)
s2 = normalize_html(s2)
TEST_CASE.assertEqual(s1, s2)
Expand Down

0 comments on commit 97f0d95

Please sign in to comment.