diff --git a/agenda/__init__.py b/agenda/__init__.py index 63b6e7d..baf8813 100644 --- a/agenda/__init__.py +++ b/agenda/__init__.py @@ -2,7 +2,6 @@ from datetime import date, datetime, time -import pycountry import pytz uk_tz = pytz.timezone("Europe/London") @@ -11,23 +10,3 @@ uk_tz = pytz.timezone("Europe/London") def uk_time(d: date, t: time) -> datetime: """Combine time and date for UK timezone.""" return uk_tz.localize(datetime.combine(d, t)) - - -def format_list_with_ampersand(items: list[str]) -> str: - """Join a list of strings with commas and an ampersand.""" - if len(items) > 1: - return ", ".join(items[:-1]) + " & " + items[-1] - elif items: - return items[0] - return "" - - -def get_country(alpha_2: str) -> pycountry.db.Country | None: - """Lookup country by alpha-2 country code.""" - if not alpha_2: - return None - if alpha_2 == "xk": - return pycountry.db.Country(flag="\U0001F1FD\U0001F1F0", name="Kosovo") - - country: pycountry.db.Country = pycountry.countries.get(alpha_2=alpha_2.upper()) - return country diff --git a/agenda/conference.py b/agenda/conference.py index 513a225..13d6a42 100644 --- a/agenda/conference.py +++ b/agenda/conference.py @@ -18,7 +18,6 @@ class Conference: location: str start: date | datetime end: date | datetime - trip: date | None = None country: str | None = None venue: str | None = None address: str | None = None diff --git a/agenda/data.py b/agenda/data.py index 04de858..a508c39 100644 --- a/agenda/data.py +++ b/agenda/data.py @@ -36,7 +36,9 @@ from . import ( uk_tz, waste_schedule, ) -from .types import Event, Holiday, StrDict +from .types import Event, Holiday + +StrDict = dict[str, typing.Any] here = dateutil.tz.tzlocal() diff --git a/agenda/types.py b/agenda/types.py index e3d5801..ce58d3a 100644 --- a/agenda/types.py +++ b/agenda/types.py @@ -2,53 +2,6 @@ import dataclasses import datetime -import typing - -from pycountry.db import Country - -import agenda -from agenda import format_list_with_ampersand - -StrDict = dict[str, typing.Any] - - -@dataclasses.dataclass -class Trip: - """Trip.""" - - date: datetime.date - travel: list[StrDict] = dataclasses.field(default_factory=list) - accommodation: list[StrDict] = dataclasses.field(default_factory=list) - conferences: list[StrDict] = dataclasses.field(default_factory=list) - - @property - def title(self) -> str: - """Trip title.""" - names = ( - format_list_with_ampersand([conf["name"] for conf in self.conferences]) - or "[no conferences in trip]" - ) - return f'{names} ({self.date.strftime("%b %Y")})' - - @property - def countries(self) -> set[Country]: - """Trip countries.""" - found: set[Country] = set() - for item in self.conferences + self.accommodation: - if "country" not in item: - continue - country = agenda.get_country(item["country"]) - assert country - found.add(country) - - return found - - @property - def countries_str(self) -> str: - """List of countries visited on this trip.""" - return format_list_with_ampersand( - [f"{c.flag} {c.name}" for c in self.countries] - ) @dataclasses.dataclass diff --git a/templates/accommodation.html b/templates/accommodation.html index 5d85bc4..29e5bfa 100644 --- a/templates/accommodation.html +++ b/templates/accommodation.html @@ -1,5 +1,4 @@ {% extends "base.html" %} -{% from "macros.html" import accommodation_row with context %} {% block style %} {% set column_count = 7 %} {% endblock %} +{% macro row(item, badge) %} +{% set country = get_country(item.country) %} +{% set nights = (item.to.date() - item.from.date()).days %} +
{{ item.from.strftime("%a, %d %b %Y") }}
+
{{ item.to.strftime("%a, %d %b") }}
+
{% if nights == 1 %}1 night{% else %}{{ nights }} nights{% endif %}
+
{{ item.operator }}
+
{{ item.location }}
+
+ {% if country %} + {{ country.flag }} {{ country.name }} + {% else %} + + country code {{ item.country }} not found + + {% endif %} +
+
+ {% if item.url %} + {{ item.name }} + {% else %} + {{ item.name }} + {% endif %} +
+{% endmacro %} + {% macro section(heading, item_list, badge) %} {% if item_list %}

{{heading}}

-{% for item in item_list %}{{ accommodation_row(item, badge) }}{% endfor %} +{% for item in item_list %}{{ row(item, badge) }}{% endfor %} {% endif %} {% endmacro %} diff --git a/templates/conference_list.html b/templates/conference_list.html index 3465f01..74fa7eb 100644 --- a/templates/conference_list.html +++ b/templates/conference_list.html @@ -1,7 +1,5 @@ {% extends "base.html" %} -{% from "macros.html" import conference_row with context %} - {% block style %} {% set column_count = 6 %} {% endblock %} -{% macro section(heading, item_list, badge) %} - {% if item_list %} -

{{ heading }}

- {% for item in item_list %}{{ conference_row(item, badge) }}{% endfor %} +{% macro row(item, badge) %} +{% set country = get_country(item.country) if item.country else None %} +
{{ item.start.strftime("%a, %d %b %Y") }}
+
{{ item.end.strftime("%a, %d %b") }}
+
+ {% if item.url %} + {{ item.name }} + {% else %} + {{ item.name }} {% endif %} + {% if item.going and not (item.accommodation_booked or item.travel_booked) %} + + {{ badge }} + + {% endif %} + {% if item.accommodation_booked %} + accommodation + {% endif %} + {% if item.transport_booked %} + transport + {% endif %} +
+
{{ item.topic }}
+
{{ item.location }}
+
+ {% if country %} + {{ country.flag }} {{ country.name }} + {% elif item.online %} + 💻 Online + {% else %} + + country code {{ item.country }} not found + + {% endif %} +
+{% endmacro %} + +{% macro section(heading, item_list, badge) %} +{% if item_list %} +

{{heading}}

+{% for item in item_list %}{{ row(item, badge) }}{% endfor %} +{% endif %} {% endmacro %} {% block content %}
+

Conferences

+
{{ section("Current", current, "attending") }} {{ section("Future", future, "going") }} diff --git a/templates/navbar.html b/templates/navbar.html index 198b666..444fa14 100644 --- a/templates/navbar.html +++ b/templates/navbar.html @@ -2,7 +2,6 @@ {% set pages = [ {"endpoint": "index", "label": "Home" }, - {"endpoint": "trip_list", "label": "Trips" }, {"endpoint": "conference_list", "label": "Conference" }, {"endpoint": "travel_list", "label": "Travel" }, {"endpoint": "accommodation_list", "label": "Accommodation" }, diff --git a/templates/travel.html b/templates/travel.html index a762ebb..86ae8bc 100644 --- a/templates/travel.html +++ b/templates/travel.html @@ -1,5 +1,10 @@ {% extends "base.html" %} -{% from "macros.html" import flight_row, train_row with context %} + +{% block travel %} +{% endblock %} + +{% macro display_datetime(dt) %}{{ dt.strftime("%a, %d, %b %Y %H:%M %z") }}{% endmacro %} +{% macro display_time(dt) %}{{ dt.strftime("%H:%M %z") }}{% endmacro %} {% block style %}