mirror of
https://code.lenaisten.de/Lenaisten/advent22.git
synced 2024-11-23 00:03:07 +00:00
WIP: EventDays rework
This commit is contained in:
parent
8626b1460a
commit
d4c0d1ef5e
1 changed files with 55 additions and 0 deletions
|
@ -72,6 +72,61 @@ async def api_return_image(img: Image.Image) -> StreamingResponse:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class EventDays2:
|
||||||
|
"""
|
||||||
|
Events in einem Ereigniszeitraum
|
||||||
|
"""
|
||||||
|
|
||||||
|
__overall_duration: timedelta
|
||||||
|
__events: dict[int, date]
|
||||||
|
|
||||||
|
def first(self) -> date:
|
||||||
|
"""Datum des ersten Ereignisses"""
|
||||||
|
return self.__events[min(self.__events.keys())]
|
||||||
|
|
||||||
|
def last(self) -> date:
|
||||||
|
"""Datum des letzten Ereignisses"""
|
||||||
|
return self.__events[max(self.__events.keys())]
|
||||||
|
|
||||||
|
def end(self) -> date:
|
||||||
|
"""Letztes Datum des Ereigniszeitraums"""
|
||||||
|
return self.__events[max(self.__events.keys())]
|
||||||
|
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
# current date
|
||||||
|
today: date,
|
||||||
|
# month/day when events begin
|
||||||
|
begin_month: int,
|
||||||
|
begin_day: int,
|
||||||
|
# events: e.g. a 2 means there is an event 2 days after begin
|
||||||
|
# -> assume sorted (asc)
|
||||||
|
events_after: list[int],
|
||||||
|
# countdown to closing begins after last event
|
||||||
|
closing_after: int,
|
||||||
|
) -> None:
|
||||||
|
# account for the last event, then add closing period
|
||||||
|
self.__overall_duration = timedelta(days=events_after[-1] + closing_after)
|
||||||
|
|
||||||
|
# the events may begin last year, this year or next year
|
||||||
|
maybe_begin = (
|
||||||
|
datetime(today.year + year_diff, begin_month, begin_day).date()
|
||||||
|
for year_diff in (-1, 0, +1)
|
||||||
|
)
|
||||||
|
|
||||||
|
# find the first begin where the end date is in the future
|
||||||
|
begin = next(
|
||||||
|
begin for begin in maybe_begin if today <= (begin + self.__overall_duration)
|
||||||
|
)
|
||||||
|
|
||||||
|
# all event dates
|
||||||
|
self.__events = {
|
||||||
|
event_after: begin + timedelta(days=event_after - 1)
|
||||||
|
for event_after in events_after
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class EventDays(BaseModel):
|
class EventDays(BaseModel):
|
||||||
"""
|
"""
|
||||||
Kenndaten eines Ereigniszeitraums:
|
Kenndaten eines Ereigniszeitraums:
|
||||||
|
|
Loading…
Reference in a new issue