Compare commits

..

6 commits

5 changed files with 37 additions and 32 deletions

View file

@ -3,11 +3,30 @@
import collections
from datetime import date, timedelta
import flask
import agenda.uk_holiday
import holidays
from .event import Event
from .types import Holiday
from .types import Holiday, Trip
def get_trip_holidays(trip: Trip) -> list[Holiday]:
"""Get holidays happening during trip."""
if not trip.end:
return []
countries = {c.alpha_2 for c in trip.countries}
return sorted(
(
hol
for hol in get_all(
trip.start, trip.end, flask.current_app.config["DATA_DIR"]
)
if hol.country.upper() in countries
),
key=lambda item: (item.date, item.country),
)
def us_holidays(start_date: date, end_date: date) -> list[Holiday]:

View file

@ -42,6 +42,11 @@ def timedelta_display(delta: timedelta) -> str:
)
def plural(value: int, unit: str) -> str:
"""Value + unit with unit written as singular or plural as appropriate."""
return f"{value} {unit}{'s' if value > 1 else ''}"
def human_readable_delta(future_date: date) -> str | None:
"""
Calculate the human-readable time delta for a given future date.
@ -64,14 +69,11 @@ def human_readable_delta(future_date: date) -> str | None:
weeks, days = divmod(days, 7)
# Formatting the output
parts = []
if months > 0:
parts.append(f"{months} month{'s' if months > 1 else ''}")
if weeks > 0:
parts.append(f"{weeks} week{'s' if weeks > 1 else ''}")
if days > 0:
parts.append(f"{days} day{'s' if days > 1 else ''}")
parts = [
plural(value, unit)
for value, unit in ((months, "month"), (weeks, "week"), (days, "days"))
if value > 0
]
return " ".join(parts) if parts else None

View file

@ -53,7 +53,7 @@
}
.half-map {
height: 100vh;
height: 90vh;
}
.full-window-map {

View file

@ -5,7 +5,6 @@ from decimal import Decimal
import pytest
from agenda import (
get_gbpusd,
get_next_bank_holiday,
get_next_timezone_transition,
next_economist,
@ -14,6 +13,7 @@ from agenda import (
timedelta_display,
uk_financial_year_end,
)
from agenda.fx import get_gbpusd
@pytest.fixture

View file

@ -486,13 +486,15 @@ def get_prev_current_and_next_trip(
"""Get previous trip, this trip and next trip."""
trip_iter = iter(trip_list)
prev_trip = None
current_trip = None
for trip in trip_iter:
if trip.start.isoformat() == start:
current_trip = trip
break
prev_trip = trip
next_trip = next(trip_iter, None)
return (prev_trip, trip, next_trip)
return (prev_trip, current_trip, next_trip)
@app.route("/trip/<start>")
@ -505,8 +507,6 @@ def trip_page(start: str) -> str:
if not trip:
flask.abort(404)
today = date.today()
coordinates = agenda.trip.collect_trip_coordinates(trip)
routes = agenda.trip.get_trip_routes(trip, app.config["PERSONAL_DATA"])
@ -518,30 +518,17 @@ def trip_page(start: str) -> str:
app.config["PERSONAL_DATA"], route.pop("geojson_filename")
)
if trip.end:
countries = {c.alpha_2 for c in trip.countries}
holidays = [
hol
for hol in agenda.holidays.get_all(
trip.start, trip.end, app.config["DATA_DIR"]
)
if hol.country.upper() in countries
]
holidays.sort(key=lambda item: (item.date, item.country))
else:
holidays = []
return flask.render_template(
"trip_page.html",
trip=trip,
prev_trip=prev_trip,
next_trip=next_trip,
today=today,
today=date.today(),
coordinates=coordinates,
routes=routes,
get_country=agenda.get_country,
format_list_with_ampersand=format_list_with_ampersand,
holidays=holidays,
holidays=agenda.holidays.get_trip_holidays(trip),
human_readable_delta=agenda.utils.human_readable_delta,
)
@ -580,9 +567,6 @@ def trip_stats() -> str:
route_distances = agenda.travel.load_route_distances(app.config["DATA_DIR"])
trip_list = get_trip_list(route_distances)
# today = date.today()
# past = [item for item in trip_list if (item.end or item.start) < today]
conferences = sum(len(item.conferences) for item in trip_list)
yearly_stats = agenda.stats.calculate_yearly_stats(trip_list)