Commit 09f5e800 authored by Andreas Jung's avatar Andreas Jung

- Collector #2116: sequence.sort() did not work properly

        locale related comparison methods
parent 6ea19977
......@@ -14,6 +14,14 @@ Zope Changes
to the rules for such a type laid out in the Python docs:
http://docs.python.org/api/supporting-cycle-detection.html
after Zope 2.8.7 (unreleased)
Bugs fixed
- Collector #2116: sequence.sort() did not work properly
locale related comparison methods
Zope 2.8.7 (2007/05/29)
Features added:
......
##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
# Copyright (c) 2002 Zope Corporation and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.
# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
......@@ -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)
......
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