Replace locale.strcoll with locale.strxfmt for performance and Python 3.0 compliance
svn: r12739
This commit is contained in:
parent
b1dd135363
commit
d022d0187b
88
src/Sort.py
88
src/Sort.py
@ -76,6 +76,18 @@ class Sort(object):
|
||||
else:
|
||||
return locale.strcoll(fsn, ssn)
|
||||
|
||||
def by_last_name_key(self, first_id):
|
||||
"""Sort routine for comparing two last names. If last names are equal,
|
||||
uses the given name and suffix"""
|
||||
first = self.database.get_person_from_handle(first_id)
|
||||
|
||||
name1 = first.get_primary_name()
|
||||
|
||||
fsn = name1.get_surname()
|
||||
ffn = name1.get_first_name()
|
||||
fsu = name1.get_suffix()
|
||||
return locale.strxfrm(fsn + ffn + fsu)
|
||||
|
||||
def by_sorted_name(self, first_id, second_id):
|
||||
"""
|
||||
Sort routine for comparing two displayed names.
|
||||
@ -89,6 +101,17 @@ class Sort(object):
|
||||
|
||||
return locale.strcoll(name1, name2)
|
||||
|
||||
def by_sorted_name_key(self, first_id):
|
||||
"""
|
||||
Sort routine for comparing two displayed names.
|
||||
"""
|
||||
|
||||
first = self.database.get_person_from_handle(first_id)
|
||||
|
||||
name1 = _nd.sorted(first)
|
||||
|
||||
return locale.strxfrm(name1)
|
||||
|
||||
def by_birthdate(self, first_id, second_id):
|
||||
"""Sort routine for comparing two people by birth dates. If the birth dates
|
||||
are equal, sorts by name"""
|
||||
@ -115,6 +138,20 @@ class Sort(object):
|
||||
return self.by_last_name(first_id, second_id)
|
||||
return val
|
||||
|
||||
def by_birthdate_key(self, first_id):
|
||||
"""Sort routine for comparing two people by birth dates. If the birth dates
|
||||
are equal, sorts by name"""
|
||||
first = self.database.get_person_from_handle(first_id)
|
||||
|
||||
birth1 = ReportUtils.get_birth_or_fallback(self.database, first)
|
||||
if birth1:
|
||||
date1 = birth1.get_date_object()
|
||||
else:
|
||||
date1 = Date()
|
||||
|
||||
dsv1 = date1.get_sort_value()
|
||||
return "%08d" % dsv1 + self.by_last_name_key(first_id)
|
||||
|
||||
def by_date(self, a_id, b_id):
|
||||
"""Sort routine for comparing two events by their dates. """
|
||||
if not (a_id and b_id):
|
||||
@ -123,6 +160,13 @@ class Sort(object):
|
||||
b_obj = self.database.get_event_from_handle(b_id)
|
||||
return cmp(a_obj.get_date_object(), b_obj.get_date_object())
|
||||
|
||||
def by_date_key(self, a_id):
|
||||
"""Sort routine for comparing two events by their dates. """
|
||||
if not a_id:
|
||||
return 0
|
||||
a_obj = self.database.get_event_from_handle(a_id)
|
||||
return a_obj.get_date_object()
|
||||
|
||||
def by_place_title(self, a_id, b_id):
|
||||
"""Sort routine for comparing two places. """
|
||||
if not (a_id and b_id):
|
||||
@ -131,6 +175,13 @@ class Sort(object):
|
||||
b_obj = self.database.get_place_from_handle(b_id)
|
||||
return locale.strcoll(a_obj.title, b_obj.title)
|
||||
|
||||
def by_place_title_key(self, a_id):
|
||||
"""Sort routine for comparing two places. """
|
||||
if not a_id:
|
||||
return 0
|
||||
a_obj = self.database.get_place_from_handle(a_id)
|
||||
return locale.strxfrm(a_obj.title)
|
||||
|
||||
def by_event_place(self, a_id, b_id):
|
||||
"""Sort routine for comparing two events by their places. """
|
||||
if not (a_id and b_id):
|
||||
@ -147,6 +198,15 @@ class Sort(object):
|
||||
plc_b_title = plc_b.title
|
||||
return locale.strcoll(plc_a_title, plc_b_title)
|
||||
|
||||
def by_event_place_key(self, a_id):
|
||||
"""Sort routine for comparing two events by their places. """
|
||||
if not a_id:
|
||||
return 0
|
||||
evt_a = self.database.get_event_from_handle(a_id)
|
||||
plc_a = self.database.get_place_from_handle(evt_a.get_place_handle())
|
||||
plc_a_title = plc_a.title if plc_a else ""
|
||||
return locale.strxfrml(plc_a_title)
|
||||
|
||||
def by_event_description(self, a_id, b_id):
|
||||
"""Sort routine for comparing two events by their descriptions. """
|
||||
if not (a_id and b_id):
|
||||
@ -155,6 +215,13 @@ class Sort(object):
|
||||
evt_b = self.database.get_event_from_handle(b_id)
|
||||
return locale.strcoll(evt_a.get_description(), evt_b.get_description())
|
||||
|
||||
def by_event_description_key(self, a_id):
|
||||
"""Sort routine for comparing two events by their descriptions. """
|
||||
if not a_id:
|
||||
return 0
|
||||
evt_a = self.database.get_event_from_handle(a_id)
|
||||
return locale.strxfrm(evt_a.get_description())
|
||||
|
||||
def by_event_id(self, a_id, b_id):
|
||||
"""Sort routine for comparing two events by their ID. """
|
||||
if not (a_id and b_id):
|
||||
@ -163,6 +230,13 @@ class Sort(object):
|
||||
evt_b = self.database.get_event_from_handle(b_id)
|
||||
return locale.strcoll(evt_a.get_gramps_id(), evt_b.get_gramps_id())
|
||||
|
||||
def by_event_id_key(self, a_id):
|
||||
"""Sort routine for comparing two events by their ID. """
|
||||
if not (a_id and b_id):
|
||||
return 0
|
||||
evt_a = self.database.get_event_from_handle(a_id)
|
||||
return locale.strxfrm(evt_a.get_gramps_id())
|
||||
|
||||
def by_event_type(self, a_id, b_id):
|
||||
"""Sort routine for comparing two events by their type. """
|
||||
if not (a_id and b_id):
|
||||
@ -170,6 +244,13 @@ class Sort(object):
|
||||
evt_a = self.database.get_event_from_handle(a_id)
|
||||
evt_b = self.database.get_event_from_handle(b_id)
|
||||
return locale.strcoll(str(evt_a.get_type()), str(evt_b.get_type()))
|
||||
|
||||
def by_event_type_key(self, a_id):
|
||||
"""Sort routine for comparing two events by their type. """
|
||||
if not a_id:
|
||||
return 0
|
||||
evt_a = self.database.get_event_from_handle(a_id)
|
||||
return locale.strxfrm(str(evt_a.get_type()))
|
||||
|
||||
def by_media_title(self,a_id,b_id):
|
||||
"""Sort routine for comparing two media objects by their title. """
|
||||
@ -179,3 +260,10 @@ class Sort(object):
|
||||
b = self.database.get_object_from_handle(b_id)
|
||||
return locale.strcoll(a.desc, b.desc)
|
||||
|
||||
def by_media_title_key(self, a_id):
|
||||
"""Sort routine for comparing two media objects by their title. """
|
||||
if not a_id:
|
||||
return False
|
||||
a = self.database.get_object_from_handle(a_id)
|
||||
return locale.strxfrm(a.desc)
|
||||
|
||||
|
@ -57,8 +57,8 @@ import gen.lib
|
||||
#------------------------------------------------------------------------
|
||||
def _get_sort_functions(sort):
|
||||
return [
|
||||
(_("Birth Date"),sort.by_birthdate),
|
||||
(_("Name"),sort.by_last_name),
|
||||
(_("Birth Date"),sort.by_birthdate_key),
|
||||
(_("Name"),sort.by_last_name_key),
|
||||
]
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -134,7 +134,7 @@ class TimeLine(Report):
|
||||
length = len(self.plist)
|
||||
|
||||
self.progress.set_pass(_('Sorting dates...'), 1)
|
||||
self.plist.sort(self.sort_func)
|
||||
self.plist.sort(key=self.sort_func)
|
||||
self.progress.set_pass(_('Calculating timeline...'), len(self.plist))
|
||||
|
||||
for p_id in self.plist:
|
||||
|
@ -81,7 +81,7 @@ class PlaceReport(Report):
|
||||
# Use the place handles selected without a filter
|
||||
self.place_handles = self.__get_place_handles(places)
|
||||
|
||||
self.place_handles.sort(self.sort.by_place_title)
|
||||
self.place_handles.sort(key=self.sort.by_place_title_key)
|
||||
|
||||
def write_report(self):
|
||||
"""
|
||||
|
@ -53,11 +53,11 @@ def _get_sort_functions(sort):
|
||||
Define the types of sorting that is available
|
||||
"""
|
||||
return [
|
||||
(_("Date"), sort.by_date),
|
||||
(_("Type"), sort.by_event_type),
|
||||
(_("ID"), sort.by_event_id),
|
||||
(_("Description"), sort.by_event_description),
|
||||
(_("Place"), sort.by_event_place),]
|
||||
(_("Date"), sort.by_date_key),
|
||||
(_("Type"), sort.by_event_type_key),
|
||||
(_("ID"), sort.by_event_id_key),
|
||||
(_("Description"), sort.by_event_description_key),
|
||||
(_("Place"), sort.by_event_place_key),]
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -118,7 +118,7 @@ class SortEvents(PluginWindows.ToolManagedWindowBatch):
|
||||
person = self.db.get_person_from_handle(handle)
|
||||
self.progress.step()
|
||||
event_ref_list = person.get_event_ref_list()
|
||||
event_ref_list.sort(lambda x, y: self.sort_func(x.ref, y.ref))
|
||||
event_ref_list.sort(key=lambda x: self.sort_func(x.ref))
|
||||
if self.sort_desc:
|
||||
event_ref_list.reverse()
|
||||
if self.fam_events:
|
||||
@ -139,7 +139,7 @@ class SortEvents(PluginWindows.ToolManagedWindowBatch):
|
||||
family = self.db.get_family_from_handle(handle)
|
||||
self.progress.step()
|
||||
event_ref_list = family.get_event_ref_list()
|
||||
event_ref_list.sort(lambda x, y: self.sort_func(x.ref, y.ref))
|
||||
event_ref_list.sort(key=lambda x: self.sort_func(x.ref))
|
||||
if self.sort_desc:
|
||||
event_ref_list.reverse()
|
||||
family.set_event_ref_list(event_ref_list)
|
||||
|
@ -1380,7 +1380,7 @@ class PlaceListPage(BasePage):
|
||||
thead += trow
|
||||
|
||||
sort = Sort.Sort(db)
|
||||
handle_list = sorted(place_handles, sort.by_place_title)
|
||||
handle_list = sorted(place_handles, key=sort.by_place_title_key)
|
||||
last_letter = ''
|
||||
|
||||
# begin table body
|
||||
@ -2301,7 +2301,7 @@ class MediaListPage(BasePage):
|
||||
|
||||
index = 1
|
||||
sort = Sort.Sort(db)
|
||||
mlist = sorted(self.report.photo_list, sort.by_media_title)
|
||||
mlist = sorted(self.report.photo_list, key=sort.by_media_title_key)
|
||||
|
||||
for handle in mlist:
|
||||
media = db.get_object_from_handle(handle)
|
||||
@ -4305,7 +4305,7 @@ class NavWebReport(Report):
|
||||
prev = None
|
||||
total = len(self.photo_list)
|
||||
sort = Sort.Sort(self.database)
|
||||
photo_keys = sorted(self.photo_list, sort.by_media_title)
|
||||
photo_keys = sorted(self.photo_list, key=sort.by_media_title_key)
|
||||
|
||||
index = 1
|
||||
for photo_handle in photo_keys:
|
||||
|
@ -531,7 +531,7 @@ class MonitoredComboSelectedEntry(object):
|
||||
Fill combo with data
|
||||
"""
|
||||
self.store = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
|
||||
keys = sorted(self.mapping.keys(), self.__by_value)
|
||||
keys = sorted(self.mapping.keys(), key=self.__by_value_key)
|
||||
|
||||
for index, key in enumerate(keys):
|
||||
self.store.append(row=[key, self.mapping[key]])
|
||||
@ -546,6 +546,12 @@ class MonitoredComboSelectedEntry(object):
|
||||
svalue = self.mapping[second]
|
||||
return locale.strcoll(fvalue, svalue)
|
||||
|
||||
def __by_value_key(self, first):
|
||||
"""
|
||||
Method for sorting keys based on the values.
|
||||
"""
|
||||
return locale.strxfrm(self.mapping[first])
|
||||
|
||||
def on_combochange(self, obj):
|
||||
"""
|
||||
callback for change on the combo, change active iter, update
|
||||
|
Loading…
Reference in New Issue
Block a user