[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ - fixed some decoding issues
Yvo Schubbe
cvs-admin at zope.org
Thu Jun 7 16:49:41 UTC 2012
Log message for revision 126671:
- fixed some decoding issues
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
U Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py 2012-06-07 16:28:16 UTC (rev 126670)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/tests/test_ursa.py 2012-06-07 16:49:37 UTC (rev 126671)
@@ -17,6 +17,8 @@
from zope.component import getSiteManager
from zope.component.testing import PlacelessSetup
+from zope.i18n.interfaces import IUserPreferredCharsets
+from zope.interface import alsoProvides
from Products.CMFCore.interfaces import IActionsTool
from Products.CMFCore.interfaces import IMembershipTool
@@ -189,16 +191,43 @@
getSiteManager().registerUtility(tool, IURLTool)
self.assertEqual(view.portal_title, 'TITLE')
+ def test_portal_title_nonascii(self):
+ NONASCII = u'B\xe4r'
+ context = self._makeContext()
+ view = self._makeOne(context)
+ context.Title = lambda: NONASCII.encode('latin-1')
+ context.portal_properties.default_charset = 'latin1'
+ tool = DummyURLTool()
+ tool.getPortalObject = lambda: context
+ getSiteManager().registerUtility(tool, IURLTool)
+ self.assertEqual(view.portal_title, NONASCII)
+
def test_object_title(self):
view = self._makeOne()
view.context.Title = lambda: 'TITLE'
self.assertEqual(view.object_title, 'TITLE')
+ def test_object_title_nonascii(self):
+ NONASCII = u'B\xe4r'
+ context = self._makeContext()
+ view = self._makeOne(context)
+ view.context.Title = lambda: NONASCII.encode('latin-1')
+ context.portal_properties.default_charset = 'latin1'
+ self.assertEqual(view.object_title, NONASCII)
+
def test_object_description(self):
view = self._makeOne()
- view.context.Title = lambda: 'TITLE'
- self.assertEqual(view.object_title, 'TITLE')
+ view.context.Description = lambda: 'DESCRIPTION'
+ self.assertEqual(view.object_description, 'DESCRIPTION')
+ def test_object_description_nonascii(self):
+ NONASCII = u'B\xe4r'
+ context = self._makeContext()
+ view = self._makeOne(context)
+ view.context.Description = lambda: NONASCII.encode('latin-1')
+ context.portal_properties.default_charset = 'latin1'
+ self.assertEqual(view.object_description, NONASCII)
+
def test_trunc_id(self):
view = self._makeOne()
view.context.getId = lambda: 'ID'
@@ -365,8 +394,18 @@
def test_status_message(self):
view = self._makeOne()
view.request.form = {'portal_status_message': 'FOO'}
+ view.request.getPreferredCharsets = lambda: []
+ alsoProvides(view.request, IUserPreferredCharsets)
self.assertEqual(view.status_message, 'FOO')
+ def test_status_message_nonascii(self):
+ NONASCII = u'B\xe4r'
+ view = self._makeOne()
+ view.request.form = {'portal_status_message': NONASCII.encode('utf-8')}
+ view.request.getPreferredCharsets = lambda: ['utf-8']
+ alsoProvides(view.request, IUserPreferredCharsets)
+ self.assertEqual(view.status_message, NONASCII)
+
def test_actions(self):
ACTIONS = {'global': [],
'user': [],
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py 2012-06-07 16:28:16 UTC (rev 126670)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/skins/ursa.py 2012-06-07 16:49:37 UTC (rev 126671)
@@ -13,20 +13,20 @@
"""
"""
-from zope.component import getUtility, ComponentLookupError
+from Acquisition import aq_get
+from zope.component import ComponentLookupError
+from zope.component import getUtility
from zope.component import queryUtility
-from Acquisition import aq_get
-
from Products.CMFCore.interfaces import IActionsTool
from Products.CMFCore.interfaces import IMembershipTool
from Products.CMFCore.interfaces import IPropertiesTool
from Products.CMFCore.interfaces import ISyndicationTool
from Products.CMFCore.interfaces import IURLTool
from Products.CMFCore.interfaces import IWorkflowTool
+from Products.CMFDefault.browser.utils import decode
from Products.CMFDefault.browser.utils import memoize
from Products.CMFDefault.browser.utils import ViewBase
-from Products.CMFDefault.utils import decode
from Products.CMFDefault.utils import Message as _
from Products.CMFDefault.utils import PRODUCTS_CMFCALENDAR_INSTALLED
from Products.CMFDefault.utils import PRODUCTS_CMFUID_INSTALLED
@@ -136,16 +136,19 @@
@property
@memoize
+ @decode
def portal_title(self):
return self.portal_object.Title()
@property
@memoize
+ @decode
def object_title(self):
return self.context.Title()
@property
@memoize
+ @decode
def object_description(self):
return self.context.Description()
@@ -179,24 +182,25 @@
page_title = self.object_title
if page_title != site_title:
- page_title = site_title + ": " + page_title
+ page_title = site_title + u": " + page_title
- return decode(page_title, self.context)
+ return page_title
@property
@memoize
+ @decode
def breadcrumbs(self):
# XXX Shouldn't we just be walking up the aq_inner chain?
result = [{'id': _(u'root'),
- 'title' : self.ptool.title(),
- 'url' : self.portal_url,
+ 'title': self.ptool.title(),
+ 'url': self.portal_url,
}]
relative = self.utool.getRelativeContentPath(self.context)
portal = self.portal_object
for i, token in enumerate(relative):
- now = relative[:i+1]
+ now = relative[:i + 1]
obj = portal.unrestrictedTraverse(now)
if token != 'talkback':
result.append({'id': token,
@@ -213,6 +217,7 @@
@property
@memoize
+ @decode
def membername(self):
return self.isAnon and 'Guest' or (self.member.getProperty('fullname')
or self.member.getId())
@@ -231,8 +236,9 @@
@memoize
def status_message(self):
message = self.request.form.get('portal_status_message')
- if message is not None:
- message = decode(message, self.context)
+ if message and isinstance(message, str):
+ # portal_status_message uses always the browser charset.
+ message = message.decode(self._getBrowserCharset())
return message
@property
More information about the checkins
mailing list