Commit 9a89ac06 authored by Georgios Dagkakis's avatar Georgios Dagkakis

Changes so that document ids with non-ascii characters work

See merge request nexedi/erp5!1950
parents 9d79d571 68630914
Pipeline #35038 failed with stage
in 0 seconds
...@@ -1405,6 +1405,25 @@ class TestBase(ERP5TypeTestCase, ZopeTestCase.Functional): ...@@ -1405,6 +1405,25 @@ class TestBase(ERP5TypeTestCase, ZopeTestCase.Functional):
newSecurityManager(None, test_user) newSecurityManager(None, test_user)
assertActorHistoryEqual([user_1_title, user_2_title, user_3_user_id, existing_non_erp5_user_id]) assertActorHistoryEqual([user_1_title, user_2_title, user_3_user_id, existing_non_erp5_user_id])
def test_idWithSpecialCharacter(self, quiet=quiet, run=run_all_test):
"""
Test that an id with non-ascii characters
can well be used an indexed
"""
portal = self.getPortal()
portal_type = "Organisation"
module = portal.getDefaultModule(portal_type=portal_type)
obj = module.newContent(
id='tést',
portal_type=portal_type
)
self.tic() # no error in indexation
# Check that the new object is retreivable by its id
self.assertEqual(obj.getId(), 'tést')
self.assertIsInstance(obj.getId(), str)
self.assertEqual(module._getOb(obj.getId()).getId(), obj.getId())
self.assertIsInstance(module._getOb(obj.getId()).getId(), str)
class TestERP5PropertyManager(unittest.TestCase): class TestERP5PropertyManager(unittest.TestCase):
"""Tests for ERP5PropertyManager. """Tests for ERP5PropertyManager.
......
...@@ -27,7 +27,7 @@ from __future__ import absolute_import ...@@ -27,7 +27,7 @@ from __future__ import absolute_import
# #
############################################################################## ##############################################################################
from six import string_types as basestring from six import string_types as basestring
from Products.ERP5Type.Utils import ensure_list from Products.ERP5Type.Utils import ensure_list, str2unicode
import copy import copy
import socket import socket
...@@ -359,7 +359,10 @@ class Message(BaseMessage): ...@@ -359,7 +359,10 @@ class Message(BaseMessage):
# that method ! # that method !
method = getattr(obj, self.method_id) method = getattr(obj, self.method_id)
transaction.get().note( transaction.get().note(
u'CMFActivity {}/{}'.format('/'.join(self.object_path), self.method_id) u'CMFActivity {}/{}'.format(
'/'.join([str2unicode(x) for x in self.object_path]),
str2unicode(self.method_id),
)
) )
# Store site info # Store site info
setSite(activity_tool.getParentValue()) setSite(activity_tool.getParentValue())
......
...@@ -174,13 +174,13 @@ else: # For easy diff with original (ZSQLMethods 3.14) ...@@ -174,13 +174,13 @@ else: # For easy diff with original (ZSQLMethods 3.14)
else: else:
if not isinstance(v, StringTypes): if not isinstance(v, StringTypes):
v = str(v) v = str(v)
if isinstance(v, six.binary_type): if six.PY3 and isinstance(v, six.binary_type):
v = v.decode('utf-8') v = v.decode(self.encoding or 'UTF-8')
# The call to sql_quote__ can return something that is not # The call to sql_quote__ can return something that is not
# a native string anymore! # a native string anymore!
v = md.getitem('sql_quote__', 0)(v) v = md.getitem('sql_quote__', 0)(v)
if isinstance(v, six.binary_type): if six.PY3 and isinstance(v, six.binary_type):
v = v.decode('utf-8') v = v.decode(self.encoding or 'UTF-8')
# if v.find("\'") >= 0: v="''".(v.split("\'")) # if v.find("\'") >= 0: v="''".(v.split("\'"))
# v="'%s'" % v # v="'%s'" % v
vs.append(v) vs.append(v)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment