Compare commits
6 commits
1caf233075
...
f4fc839926
Author | SHA1 | Date | |
---|---|---|---|
Edward Betts | f4fc839926 | ||
Edward Betts | 53f6d05e52 | ||
Edward Betts | 40bac83790 | ||
Edward Betts | b3e7070b84 | ||
Edward Betts | 7a08c4b56d | ||
Edward Betts | 42066f9dde |
|
@ -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]:
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
}
|
||||
|
||||
.half-map {
|
||||
height: 100vh;
|
||||
height: 90vh;
|
||||
}
|
||||
|
||||
.full-window-map {
|
||||
|
|
|
@ -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
|
||||
|
|
26
web_view.py
26
web_view.py
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue