added sorting and artist dates
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user