1 from datetime import date, timedelta
4 def day_of_time_table_change(year: int):
5 """The yearly public transport timetable change is taking effect beginning of the 2nd Sunday in December
6 according to https://mobilitaetsverbuende.atlassian.net/wiki/spaces/GEO/pages/181272612/Liniennetz.
7 This function returns the first date of the new timetable for a given 4 digit year."""
8 first_of_december = date(year, 12, 1)
9 weekday_of_first_december = first_of_december.weekday() # Monday 0 ... Sunday 6
10 days_until_first_sunday_in_december = 6 - weekday_of_first_december
11 return date(year, 12, 1 + days_until_first_sunday_in_december + 7)
14 def default_query_date(today: date) -> date:
15 """Calculates a work_day after the date given, but before the schedule change on the second Sunday of December."""
16 change_date = day_of_time_table_change(today.year)
17 query_date = change_date - timedelta(days=2)
18 if query_date.day == 8:
19 query_date -= timedelta(days=1)
20 if query_date < today:
21 return default_query_date(today + timedelta(days=14))