added sorting and artist dates

This commit is contained in:
Ebbe Baß
2026-09-09 14:10:15 +02:00
parent b2468cc083
commit 5d56df1af8
11 changed files with 96 additions and 11 deletions
+35
View File
@@ -109,3 +109,38 @@ def iter_artist_names(event: Event):
for artist in group:
if artist.artist_name:
yield artist.artist_name
def sort_events(events: List[Event], sort: Optional[str]) -> List[Event]:
"""Sort events per the ``?sort=`` query param.
"asc"/"desc" order chronologically by ``event_date``; events with an
unparseable date always sort last, regardless of direction. "az"/"za"
order alphabetically (case-insensitive) by ``event_name``. Any other
value (including None) leaves the events in their existing order.
"""
if sort in ("asc", "desc"):
with_parsed = [(e, parse_event_date(e.event_date)) for e in events]
dated = sorted(
(item for item in with_parsed if item[1] is not None),
key=lambda item: item[1],
reverse=(sort == "desc"),
)
undated = [e for e, parsed in with_parsed if parsed is None]
return [e for e, _ in dated] + undated
if sort in ("az", "za"):
return sorted(events, key=lambda e: e.event_name.lower(), reverse=(sort == "za"))
return events
def sort_date_strings(dates) -> List[str]:
"""Sort raw ``dd.mm.yy`` date strings chronologically, de-duplicated.
Unparseable strings sort last (alphabetically among themselves).
"""
unique = set(dates)
dated = sorted(
(d for d in unique if parse_event_date(d) is not None), key=parse_event_date
)
undated = sorted(d for d in unique if parse_event_date(d) is None)
return dated + undated