#!/usr/bin/python3 """Load YAML data to ensure validity.""" import os import typing from datetime import date, timedelta import yaml from rich.pretty import pprint import agenda import agenda.conference import agenda.data import agenda.travel import agenda.trip import agenda.types config = __import__("config.default", fromlist=[""]) data_dir = config.PERSONAL_DATA 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") 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") 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"]) 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"]) 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"} def check() -> None: """Validate personal data YAML files.""" check_trips() check_flights() check_trains() check_conferences() check_events() check_accommodation() check_airports() check_stations() check_airlines() if __name__ == "__main__": check()