Show end times for travel
This commit is contained in:
parent
38f2e10c6d
commit
75242c2952
|
@ -38,10 +38,13 @@ def as_datetime(d: DateOrDateTime) -> datetime.datetime:
|
||||||
class TripElement:
|
class TripElement:
|
||||||
"""Trip element."""
|
"""Trip element."""
|
||||||
|
|
||||||
when: DateOrDateTime
|
start_time: DateOrDateTime
|
||||||
title: str
|
title: str
|
||||||
element_type: str
|
element_type: str
|
||||||
detail: StrDict
|
detail: StrDict
|
||||||
|
end_time: DateOrDateTime | None = None
|
||||||
|
start_loc: str | None = None
|
||||||
|
end_loc: str | None = None
|
||||||
|
|
||||||
def get_emoji(self) -> str | None:
|
def get_emoji(self) -> str | None:
|
||||||
"""Emoji for trip element."""
|
"""Emoji for trip element."""
|
||||||
|
@ -207,7 +210,7 @@ class Trip:
|
||||||
for item in self.accommodation:
|
for item in self.accommodation:
|
||||||
title = "Airbnb" if item.get("operator") == "airbnb" else item["name"]
|
title = "Airbnb" if item.get("operator") == "airbnb" else item["name"]
|
||||||
start = TripElement(
|
start = TripElement(
|
||||||
when=item["from"],
|
start_time=item["from"],
|
||||||
title=title,
|
title=title,
|
||||||
detail=item,
|
detail=item,
|
||||||
element_type="check-in",
|
element_type="check-in",
|
||||||
|
@ -216,7 +219,7 @@ class Trip:
|
||||||
elements.append(start)
|
elements.append(start)
|
||||||
|
|
||||||
end = TripElement(
|
end = TripElement(
|
||||||
when=item["to"],
|
start_time=item["to"],
|
||||||
title=title,
|
title=title,
|
||||||
detail=item,
|
detail=item,
|
||||||
element_type="check-out",
|
element_type="check-out",
|
||||||
|
@ -233,10 +236,13 @@ class Trip:
|
||||||
|
|
||||||
elements.append(
|
elements.append(
|
||||||
TripElement(
|
TripElement(
|
||||||
when=item["depart"],
|
start_time=item["depart"],
|
||||||
|
end_time=item.get("arrive"),
|
||||||
title=name,
|
title=name,
|
||||||
detail=item,
|
detail=item,
|
||||||
element_type="flight",
|
element_type="flight",
|
||||||
|
start_loc=airport_label(item["from_airport"]),
|
||||||
|
end_loc=airport_label(item["to_airport"]),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if item["type"] == "train":
|
if item["type"] == "train":
|
||||||
|
@ -250,10 +256,13 @@ class Trip:
|
||||||
name = f"{leg['from']} {from_flag} → {leg['to']} {to_flag}"
|
name = f"{leg['from']} {from_flag} → {leg['to']} {to_flag}"
|
||||||
elements.append(
|
elements.append(
|
||||||
TripElement(
|
TripElement(
|
||||||
when=leg["depart"],
|
start_time=leg["depart"],
|
||||||
|
end_time=leg["arrive"],
|
||||||
title=name,
|
title=name,
|
||||||
detail=leg,
|
detail=leg,
|
||||||
element_type="train",
|
element_type="train",
|
||||||
|
start_loc=f"{leg['from']} {from_flag}",
|
||||||
|
end_loc=f"{leg['to']} {to_flag}",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
if item["type"] == "ferry":
|
if item["type"] == "ferry":
|
||||||
|
@ -267,14 +276,17 @@ class Trip:
|
||||||
name = f"{item['from']} {from_flag} → {item['to']} {to_flag}"
|
name = f"{item['from']} {from_flag} → {item['to']} {to_flag}"
|
||||||
elements.append(
|
elements.append(
|
||||||
TripElement(
|
TripElement(
|
||||||
when=item["depart"],
|
start_time=item["depart"],
|
||||||
|
end_time=item["arrive"],
|
||||||
title=name,
|
title=name,
|
||||||
detail=item,
|
detail=item,
|
||||||
element_type="ferry",
|
element_type="ferry",
|
||||||
|
start_loc=f"{item['from']} {from_flag}",
|
||||||
|
end_loc=f"{item['to']} {to_flag}",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
return sorted(elements, key=lambda e: as_datetime(e.when))
|
return sorted(elements, key=lambda e: as_datetime(e.start_time))
|
||||||
|
|
||||||
def elements_grouped_by_day(self) -> list[tuple[datetime.date, list[TripElement]]]:
|
def elements_grouped_by_day(self) -> list[tuple[datetime.date, list[TripElement]]]:
|
||||||
"""Group trip elements by day."""
|
"""Group trip elements by day."""
|
||||||
|
@ -285,7 +297,7 @@ class Trip:
|
||||||
|
|
||||||
for element in self.elements():
|
for element in self.elements():
|
||||||
# Extract the date part of the 'when' attribute
|
# Extract the date part of the 'when' attribute
|
||||||
day = as_date(element.when)
|
day = as_date(element.start_time)
|
||||||
grouped_elements[day].append(element)
|
grouped_elements[day].append(element)
|
||||||
|
|
||||||
# Sort elements within each day
|
# Sort elements within each day
|
||||||
|
@ -294,7 +306,7 @@ class Trip:
|
||||||
key=lambda e: (
|
key=lambda e: (
|
||||||
e.element_type == "check-in", # check-out elements last
|
e.element_type == "check-in", # check-out elements last
|
||||||
e.element_type != "check-out", # check-in elements first
|
e.element_type != "check-out", # check-in elements first
|
||||||
as_datetime(e.when), # then sort by time
|
as_datetime(e.start_time), # then sort by time
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
{% macro display_datetime(dt) %}{{ dt.strftime("%a, %d, %b %Y %H:%M %z") }}{% endmacro %}
|
{% macro display_datetime(dt) %}{{ dt.strftime("%a, %d, %b %Y %H:%M %z") }}{% endmacro %}
|
||||||
{% macro display_time(dt) %}{{ dt.strftime("%H:%M %z") }}{% endmacro %}
|
{% macro display_time(dt) %}
|
||||||
|
{% if dt %}{{ dt.strftime("%H:%M %z") }}{% endif %}
|
||||||
|
{% endmacro %}
|
||||||
{% macro display_date(dt) %}{{ dt.strftime("%a %-d %b %Y") }}{% endmacro %}
|
{% macro display_date(dt) %}{{ dt.strftime("%a %-d %b %Y") }}{% endmacro %}
|
||||||
{% macro display_date_no_year(dt) %}{{ dt.strftime("%a %-d %b") }}{% endmacro %}
|
{% macro display_date_no_year(dt) %}{{ dt.strftime("%a %-d %b") }}{% endmacro %}
|
||||||
|
|
||||||
|
|
|
@ -111,14 +111,18 @@
|
||||||
{% set c = get_country(e.detail.country) %}
|
{% set c = get_country(e.detail.country) %}
|
||||||
<div>
|
<div>
|
||||||
{{ e.get_emoji() }} {{ e.title }} {{ c.flag }}
|
{{ e.get_emoji() }} {{ e.title }} {{ c.flag }}
|
||||||
({{ accommodation_label[e.element_type] }} {{ display_time(e.when) }})
|
({{ accommodation_label[e.element_type] }} {{ display_time(e.start_time) }})
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div>
|
<div>
|
||||||
{{ e.get_emoji() }}
|
{{ e.get_emoji() }}
|
||||||
{{ display_time(e.when) }}
|
{{ display_time(e.start_time) }}
|
||||||
–
|
–
|
||||||
{{ e.title }}
|
{{ e.start_loc }}
|
||||||
|
→
|
||||||
|
{{ display_time(e.end_time) }}
|
||||||
|
–
|
||||||
|
{{ e.end_loc }}
|
||||||
{% if e.element_type == "flight" %}
|
{% if e.element_type == "flight" %}
|
||||||
<span class="text-nowrap"><strong>airline:</strong> {{ e.detail.airline_name }}</span>
|
<span class="text-nowrap"><strong>airline:</strong> {{ e.detail.airline_name }}</span>
|
||||||
<span class="text-nowrap"><strong>flight number:</strong> {{ e.detail.airline }}{{ e.detail.flight_number }}</span>
|
<span class="text-nowrap"><strong>flight number:</strong> {{ e.detail.airline }}{{ e.detail.flight_number }}</span>
|
||||||
|
|
Loading…
Reference in a new issue