diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt index a5f88a1a3957c858a0eb089e606ba1c9dd9bd79c..b566f221946d90d46bf7b4aac859e0aa6b8b7f50 100644 --- a/doc/CHANGES.txt +++ b/doc/CHANGES.txt @@ -23,6 +23,10 @@ Zope Changes - Acquisition wrappers now correctly proxy __contains__. + - Collector #2116: sequence.sort() did not work properly + locale related comparison methods + + Zope 2.10.0 beta 1 (2006/05/30) Restructuring diff --git a/lib/python/DocumentTemplate/sequence/SortEx.py b/lib/python/DocumentTemplate/sequence/SortEx.py index c3cf5c81618da53bb828a02ccba67b74e509fda9..907efe04a8d13e4246376dc83619451eb645fd83 100644 --- a/lib/python/DocumentTemplate/sequence/SortEx.py +++ b/lib/python/DocumentTemplate/sequence/SortEx.py @@ -17,7 +17,8 @@ eg Sort(sequence, (("akey", "nocase"), ("anotherkey", "cmp", "desc"))) $Id$ """ -from types import TupleType +from App.config import getConfiguration + def sort(sequence, sort=(), _=None, mapping=0): """ @@ -82,7 +83,7 @@ def sort(sequence, sort=(), _=None, mapping=0): s=[] for client in sequence: k = None - if type(client)==TupleType and len(client)==2: + if isinstance(client, tuple) and len(client)==2: if isort: k=client[0] v=client[1] else: @@ -133,12 +134,25 @@ basic_type={type(''): 1, type(0): 1, type(0.0): 1, type(()): 1, type([]): 1, def nocase(str1, str2): return cmp(str1.lower(), str2.lower()) -import sys -if sys.modules.has_key("locale"): # only if locale is already imported - from locale import strcoll +def getStrcoll(): + + if getConfiguration().locale: + from locale import strcoll + return strcoll + else: + raise RuntimeError("strcoll() is only available for a proper 'locale' configuration in zope.conf") + +def getStrcoll_nocase(): + + if getConfiguration().locale: + from locale import strcoll + return strcoll + def strcoll_nocase(str1, str2): + return strcoll(str1.lower(), str2.lower()) + return strcoll_nocase - def strcoll_nocase(str1, str2): - return strcoll(str1.lower(), str2.lower()) + else: + raise RuntimeError("strcoll() is only available for a proper 'locale' configuration in zope.conf") def make_sortfunctions(sortfields, _): @@ -168,9 +182,9 @@ def make_sortfunctions(sortfields, _): elif f_name == "nocase": func = nocase elif f_name in ("locale", "strcoll"): - func = strcoll + func = getStrcoll() elif f_name in ("locale_nocase", "strcoll_nocase"): - func = strcoll_nocase + func = getStrcoll_nocase() else: # no - look it up in the namespace func = _.getitem(f_name, 0)