Commit 82719360 authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki Committed by Jérome Perrin

py2/py3: cmp() and sort(cmp=...) do not exist in Python 3.

also str representation of unicode character is different.
parent fc9867f0
......@@ -780,15 +780,16 @@ class BuilderMixin(XMLObject, Amount, Predicate):
for i in self.getPortalObject().portal_categories.collect_order_group.contentValues():
category_index_dict[i.getId()] = i.getIntIndex()
def sort_movement_group(a, b):
return cmp(category_index_dict.get(a.getCollectOrderGroup()),
category_index_dict.get(b.getCollectOrderGroup())) or \
cmp(a.getIntIndex(), b.getIntIndex())
def sort_movement_group_key(a):
return (
category_index_dict.get(a.getCollectOrderGroup()),
a.getIntIndex(),
)
if portal_type is None:
portal_type = self.getPortalMovementGroupTypeList()
movement_group_list = [x for x in self.contentValues(filter={'portal_type': portal_type}) \
if collect_order_group is None or collect_order_group == x.getCollectOrderGroup()]
return sorted(movement_group_list, sort_movement_group)
return sorted(movement_group_list, key=sort_movement_group_key)
# XXX category name is hardcoded.
def getDeliveryMovementGroupList(self, **kw):
......
......@@ -42,12 +42,20 @@ from Products.ERP5Type.Core.Folder import Folder
from Products.CMFCategory.Renderer import Renderer
from Products.ERP5Type.Utils import sortValueList
from Products.ERP5Type.Cache import CachingMethod
import six
if six.PY3:
from functools import cmp_to_key
def cmp(a, b):
return (a > b) - (a < b)
DEFAULT_CACHE_FACTORY = 'erp5_ui_long'
from zLOG import LOG
NBSP_UTF8 = u'\xA0'.encode('utf-8')
if six.PY2:
NBSP_UTF8 = u'\xA0'.encode('utf-8')
else:
NBSP_UTF8 = '\xA0'
manage_addCategoryForm=DTMLFile('dtml/category_add', globals())
......@@ -331,8 +339,10 @@ class Category(Folder):
if local_sort_method:
# sort objects at the current level
child_value_list = list(child_value_list)
child_value_list.sort(local_sort_method)
if six.PY2:
child_value_list.sort(local_sort_method)
else:
child_value_list.sort(key=cmp_to_key(local_sort_method))
if recursive:
for c in child_value_list:
# Do not pass sort_on / sort_order parameters intentionally, because
......@@ -883,7 +893,10 @@ class BaseCategory(Category):
if local_sort_method:
# sort objects at the current level
child_value_list = list(child_value_list)
child_value_list.sort(local_sort_method)
if six.PY2:
child_value_list.sort(local_sort_method)
else:
child_value_list.sort(key=cmp_to_key(local_sort_method))
if recursive:
for c in child_value_list:
......
......@@ -38,6 +38,9 @@ from Testing.ZopeTestCase.PortalTestCase import PortalTestCase
from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import noSecurityManager
import six
if six.PY3:
def cmp(a, b):
return (a > b) - (a < b)
class TestCMFCategory(ERP5TypeTestCase):
......@@ -785,31 +788,31 @@ class TestCMFCategory(ERP5TypeTestCase):
base_cat.getCategoryChildIndentedTitleItemList(),
[['', ''],
['The Title', 'the_id'],
['\xc2\xa0\xc2\xa0The Sub Title', 'the_id/the_sub_id']],
[NBSP_UTF8 * 2 + 'The Sub Title', 'the_id/the_sub_id']],
)
self.assertEqual(
base_cat.getCategoryChildTranslatedIndentedTitleItemList(),
[['', ''],
['The Title', 'the_id'],
['\xc2\xa0\xc2\xa0The S\xc3\xbcb T\xc3\xaftle', 'the_id/the_sub_id']],
[NBSP_UTF8 * 2 + 'The Süb Tïtle', 'the_id/the_sub_id']],
)
self.assertEqual(
base_cat.getCategoryChildTranslatedCompactTitleItemList(),
[['', ''],
['The Title', 'the_id'],
['The S\xc3\xbcb T\xc3\xaftle', 'the_id/the_sub_id']],
['The Süb Tïtle', 'the_id/the_sub_id']],
)
self.assertEqual(
base_cat.getCategoryChildTranslatedLogicalPathItemList(),
[['', ''],
['The Title', 'the_id'],
['The Title/The S\xc3\xbcb T\xc3\xaftle', 'the_id/the_sub_id']],
['The Title/The Süb Tïtle', 'the_id/the_sub_id']],
)
self.assertEqual(
base_cat.getCategoryChildTranslatedCompactLogicalPathItemList(),
[['', ''],
['The Title', 'the_id'],
['The Title/The S\xc3\xbcb T\xc3\xaftle', 'the_id/the_sub_id']],
['The Title/The Süb Tïtle', 'the_id/the_sub_id']],
)
def test_CategoryChildTitleItemListFilterNodeFilterLeave(self):
......@@ -1363,9 +1366,9 @@ class TestCMFCategory(ERP5TypeTestCase):
self.assertEqual(get(bc.id), list('aa'))
_set(bc.id, list('baa'))
self.assertEqual(get(bc.id), list('aba'))
_set(bc.id, map(base, 'bb'), 1)
_set(bc.id, [base(e) for e in 'bb'], 1)
self.assertEqual(get(bc.id), list('bb'))
_set(bc.id, map(base, 'abb'), 1)
_set(bc.id, [base(e) for e in 'abb'], 1)
self.assertEqual(get(bc.id), list('bab'))
_set(bc.id, ())
......
......@@ -34,6 +34,8 @@ from six import int2byte as chr
from six import string_types as basestring
from six.moves import xrange
import six
if six.PY3:
from functools import cmp_to_key
import os
import re
import string
......@@ -206,7 +208,10 @@ def sortValueList(value_list, sort_on=None, sort_order=None, **kw):
if result != 0:
break
return result
sort_kw = {'cmp':sortValues}
if six.PY2:
sort_kw = {'cmp':sortValues}
else:
sort_kw = {'key': cmp_to_key(sortValues)}
sort_kw_cache[(sort_on, sort_order)] = sort_kw
if isinstance(value_list, LazyMap):
......
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