Pulled natural sorting methods out from the try (no real reason for them to be in there) and moved "try_int" to outside the other method (then it is only compiled once).

This commit is contained in:
Raoul Snyman 2012-07-09 19:56:02 +02:00
parent 14088e71bb
commit 4e03451db7

View File

@ -31,16 +31,9 @@ from setuptools import setup, find_packages
import re import re
VERSION_FILE = 'openlp/.version' VERSION_FILE = 'openlp/.version'
SPLIT_ALPHA_DIGITS = re.compile(r'(\d+|\D+)')
try: def try_int(s):
def natural_sort_key(s):
"""
Return a tuple by which s is sorted.
``s``
A string value from the list we want to sort.
"""
def try_int(s):
""" """
Convert string s to an integer if possible. Fail silently and return Convert string s to an integer if possible. Fail silently and return
the string as-is if it isn't an integer. the string as-is if it isn't an integer.
@ -50,11 +43,19 @@ try:
""" """
try: try:
return int(s) return int(s)
except: except Exception:
return s return s
return map(try_int, re.findall(r'(\d+|\D+)', s))
def natural_compare(a, b): def natural_sort_key(s):
"""
Return a tuple by which s is sorted.
``s``
A string value from the list we want to sort.
"""
return map(try_int, SPLIT_ALPHA_DIGITS.findall(s))
def natural_compare(a, b):
""" """
Compare two strings naturally and return the result. Compare two strings naturally and return the result.
@ -66,7 +67,7 @@ try:
""" """
return cmp(natural_sort_key(a), natural_sort_key(b)) return cmp(natural_sort_key(a), natural_sort_key(b))
def natural_sort(seq, compare=natural_compare): def natural_sort(seq, compare=natural_compare):
""" """
Returns a copy of seq, sorted by natural string sort. Returns a copy of seq, sorted by natural string sort.
""" """
@ -75,6 +76,8 @@ try:
temp.sort(compare) temp.sort(compare)
return temp return temp
try:
# Try to import Bazaar
from bzrlib.branch import Branch from bzrlib.branch import Branch
b = Branch.open_containing('.')[0] b = Branch.open_containing('.')[0]
b.lock_read() b.lock_read()