agenda/validate_yaml.py

135 lines
3.5 KiB
Python
Raw Normal View History

#!/usr/bin/python3
"""Load YAML data to ensure validity."""
import os
2024-05-18 19:37:10 +01:00
import typing
2024-04-05 10:23:29 +01:00
from datetime import date, timedelta
2024-09-23 09:18:35 +01:00
import yaml
from rich.pretty import pprint
2024-05-18 19:37:10 +01:00
import agenda
import agenda.conference
2024-04-05 10:23:29 +01:00
import agenda.data
import agenda.travel
import agenda.trip
2024-05-18 19:37:10 +01:00
import agenda.types
config = __import__("config.default", fromlist=[""])
data_dir = config.PERSONAL_DATA
2024-07-03 07:54:00 +01:00
def check_trips() -> None:
"""Check trips."""
trip_list = agenda.trip.build_trip_list(data_dir)
print(len(trip_list), "trips")
coords, routes = agenda.trip.get_coordinates_and_routes(trip_list, data_dir)
print(len(coords), "coords")
print(len(routes), "routes")
def check_flights() -> None:
"""Check flights."""
flights = agenda.travel.parse_yaml("flights", data_dir)
print(len(flights), "flights")
def check_trains() -> None:
"""Check trains."""
trains = agenda.travel.parse_yaml("trains", data_dir)
print(len(trains), "trains")
def check_conferences() -> None:
"""Check conferences."""
conferences = agenda.conference.get_list(os.path.join(data_dir, "conferences.yaml"))
print(len(conferences), "conferences")
def check_events() -> None:
"""Check events."""
today = date.today()
last_year = today - timedelta(days=365)
next_year = today + timedelta(days=2 * 365)
events = agenda.events_yaml.read(data_dir, last_year, next_year)
print(len(events), "events")
2024-09-23 09:18:35 +01:00
def check_accommodation() -> None:
"""Check accommodation."""
filepath = os.path.join(data_dir, "accommodation.yaml")
accommodation_list = yaml.safe_load(open(filepath))
for stay in accommodation_list:
try:
assert all(
field in stay
for field in (
"type",
"name",
"country",
"location",
"trip",
"from",
"to",
)
)
if "latitude" in stay or "longitude" in stay:
assert "latitude" in stay and "longitude" in stay
assert all(
isinstance(stay[key], (int, float))
for key in ("latitude", "longitude")
)
except AssertionError:
pprint(stay)
raise
print(len(accommodation_list), "stays")
2024-07-03 07:54:00 +01:00
def check_airports() -> None:
"""Check airports."""
airports = typing.cast(
dict[str, agenda.types.StrDict], agenda.travel.parse_yaml("airports", data_dir)
)
print(len(airports), "airports")
for airport in airports.values():
assert "country" in airport
assert agenda.get_country(airport["country"])
2024-07-03 07:54:00 +01:00
def check_stations() -> None:
"""Check stations."""
stations = agenda.travel.parse_yaml("stations", data_dir)
print(len(stations), "stations")
for station in stations:
assert "country" in station
assert agenda.get_country(station["country"])
2024-04-05 10:23:29 +01:00
2024-07-03 07:54:00 +01:00
def check_airlines() -> None:
"""Check airlines."""
airlines = agenda.travel.parse_yaml("airlines", data_dir)
print(len(airlines), "airlines")
for airline in airlines:
assert airline.keys() == {"icao", "iata", "name"}
2024-04-05 10:23:29 +01:00
2024-05-18 19:37:10 +01:00
2024-07-03 07:54:00 +01:00
def check() -> None:
"""Validate personal data YAML files."""
check_trips()
check_flights()
check_trains()
check_conferences()
check_events()
2024-09-23 09:18:35 +01:00
check_accommodation()
2024-07-03 07:54:00 +01:00
check_airports()
check_stations()
check_airlines()
2024-05-18 19:37:10 +01:00
2024-07-03 07:54:00 +01:00
if __name__ == "__main__":
check()