parent
							
								
									f3304d0ffe
								
							
						
					
					
						commit
						f54c9cfbb7
					
				| 
						 | 
				
			
			@ -3,6 +3,7 @@ import os
 | 
			
		|||
from datetime import date
 | 
			
		||||
 | 
			
		||||
import flask
 | 
			
		||||
import yaml
 | 
			
		||||
 | 
			
		||||
from agenda import travel
 | 
			
		||||
from agenda.types import StrDict, Trip
 | 
			
		||||
| 
						 | 
				
			
			@ -44,12 +45,15 @@ def load_flights() -> list[StrDict]:
 | 
			
		|||
    """Load flights."""
 | 
			
		||||
    data_dir = flask.current_app.config["PERSONAL_DATA"]
 | 
			
		||||
    flights = load_travel("flight")
 | 
			
		||||
    airlines = yaml.safe_load(open(os.path.join(data_dir, "airlines.yaml")))
 | 
			
		||||
    airports = travel.parse_yaml("airports", data_dir)
 | 
			
		||||
    for flight in flights:
 | 
			
		||||
        if flight["from"] in airports:
 | 
			
		||||
            flight["from_airport"] = airports[flight["from"]]
 | 
			
		||||
        if flight["to"] in airports:
 | 
			
		||||
            flight["to_airport"] = airports[flight["to"]]
 | 
			
		||||
        if "airline" in flight:
 | 
			
		||||
            flight["airline_name"] = airlines.get(flight["airline"], "[unknown]")
 | 
			
		||||
    return flights
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -106,14 +106,14 @@ class Trip:
 | 
			
		|||
    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]
 | 
			
		||||
            [f"{c.name} {c.flag}" for c in self.countries]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def locations_str(self) -> str:
 | 
			
		||||
        """List of countries visited on this trip."""
 | 
			
		||||
        return format_list_with_ampersand(
 | 
			
		||||
            [f"{location} {c.flag}" for location, c in self.locations()]
 | 
			
		||||
            [f"{location} ({c.name}) {c.flag}" for location, c in self.locations()]
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,7 +2,7 @@
 | 
			
		|||
 | 
			
		||||
{% block title %}{{ trip.title }} ({{ display_date(trip.start) }}){% endblock %}
 | 
			
		||||
 | 
			
		||||
{% from "macros.html" import trip_link, display_date_no_year, display_date, conference_row, accommodation_row, flight_row, train_row with context %}
 | 
			
		||||
{% from "macros.html" import trip_link, display_datetime, display_date_no_year, display_date, conference_row, accommodation_row, flight_row, train_row with context %}
 | 
			
		||||
 | 
			
		||||
{% set row = { "flight": flight_row, "train": train_row } %}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -78,7 +78,8 @@
 | 
			
		|||
    </p>
 | 
			
		||||
 | 
			
		||||
    <div class="mb-3">
 | 
			
		||||
    <div>Countries: {{ trip.countries_str }}</div>
 | 
			
		||||
    {# <div>Countries: {{ trip.countries_str }}</div> #}
 | 
			
		||||
    <div>Locations: {{ trip.locations_str }}</div>
 | 
			
		||||
 | 
			
		||||
    {% set delta = human_readable_delta(trip.start) %}
 | 
			
		||||
    {% if delta %}
 | 
			
		||||
| 
						 | 
				
			
			@ -176,9 +177,50 @@
 | 
			
		|||
      </div>
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
 | 
			
		||||
    <div class="travel">
 | 
			
		||||
      {% for item in trip.travel %} {{ row[item.type](item) }} {% endfor %}
 | 
			
		||||
    </div>
 | 
			
		||||
    {% for item in trip.travel %}
 | 
			
		||||
      <div class="card my-1">
 | 
			
		||||
        <div class="card-body">
 | 
			
		||||
          <h5 class="card-title">
 | 
			
		||||
            {% if item.type == "flight" %}
 | 
			
		||||
              ✈️
 | 
			
		||||
              {{ item.from_airport.name }} ({{ item.from_airport.iata}})
 | 
			
		||||
              →
 | 
			
		||||
              {{ item.to_airport.name }} ({{item.to_airport.iata}})
 | 
			
		||||
            {% elif item.type == "train" %}
 | 
			
		||||
              🚆
 | 
			
		||||
              {{ item.from }}
 | 
			
		||||
              →
 | 
			
		||||
              {{ item.to }}
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          </h5>
 | 
			
		||||
          <p class="card-text">
 | 
			
		||||
            {% if item.type == "flight" %}
 | 
			
		||||
              <div>
 | 
			
		||||
                <span>{{ item.airline_name }} ({{ item.airline }})</span>
 | 
			
		||||
                ✨
 | 
			
		||||
                {{ display_datetime(item.depart) }}
 | 
			
		||||
                →
 | 
			
		||||
                {{ item.arrive.strftime("%H:%M %z") }}
 | 
			
		||||
                ✨
 | 
			
		||||
                <span>{{ ((item.arrive - item.depart).total_seconds() // 60) | int }} mins</span>
 | 
			
		||||
                ✨
 | 
			
		||||
                <span>{{ item.airline }}{{ item.flight_number }}</span>
 | 
			
		||||
              </div>
 | 
			
		||||
            {% elif item.type == "train" %}
 | 
			
		||||
              <div>
 | 
			
		||||
                {{ display_datetime(item.depart) }}
 | 
			
		||||
                →
 | 
			
		||||
                {{ item.arrive.strftime("%H:%M %z") }}
 | 
			
		||||
                {% if item.class %}
 | 
			
		||||
                  <span class="badge bg-info text-nowrap">{{ item.class }}</span>
 | 
			
		||||
                {% endif %}
 | 
			
		||||
                <span>{{ ((item.arrive - item.depart).total_seconds() // 60) | int }} mins</span>
 | 
			
		||||
              </div>
 | 
			
		||||
            {% endif %}
 | 
			
		||||
          </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    {% endfor %}
 | 
			
		||||
 | 
			
		||||
    <div class="mt-3">
 | 
			
		||||
    <h4>Holidays</h4>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue