0
0
mirror of https://github.com/gramps-project/gramps synced 2025-10-05 23:52:46 +02:00

Sort handles without using SQL

This commit is contained in:
Doug Blank
2025-02-09 23:05:05 -05:00
parent 63fa9c18ba
commit 7a96032d24

View File

@@ -31,6 +31,7 @@ Proxy class for a Gramps database.
# -------------------------------------------------------------------------
import types
import functools
import locale
# -------------------------------------------------------------------------
#
@@ -78,6 +79,22 @@ class ProxyDbBase:
def __getattr__(self, name):
return getattr(self.db, name)
def locale_sort(self, class_name, collation):
old_locale = locale.getlocale()
try:
locale.setlocale(locale.LC_ALL, collation)
return sorted(
self.proxy_map[class_name],
key=lambda item: locale.strxfrm(
self.proxy_map[class_name][item]["surname"]
),
)
except locale.Error:
# TODO: LOG.warning()
return list(self.proxy_map[class_name].keys())
finally:
locale.setlocale(locale.LC_ALL, old_locale)
def get_person_map(self):
# Get a map from map[handle] = {"surname": "Name"}
map = {}
@@ -138,6 +155,15 @@ class ProxyDbBase:
else:
None
def get_person_handles(self, sort_handles=False, locale=glocale):
if sort_handles:
sorted_handles = self.locale_sort("Person", locale.collation)
for handle in sorted_handles:
yield handle
else:
for handle in self.proxy_map["Person"]:
yield handle
@functools.cache
def get_family_from_handle(self, handle):
family = self.db.get_family_from_handle(handle)
@@ -377,6 +403,22 @@ class FilterProxyDb(ProxyDbBase):
else:
return super().get_person_map()
def get_event_map(self):
if self.event_filter:
return self.event_filter.apply(
self.db, self.db.iter_event_handles(), user=self.user
)
else:
return super().get_event_map()
def get_note_map(self):
if self.note_filter:
return self.note_filter.apply(
self.db, self.db.iter_note_handles(), user=self.user
)
else:
return super().get_note_map()
class ReferencedBySelectionProxyDb(ProxyDbBase):
"""