From aec1d0e1406c46f1abfb8a5a361b6833ddcf3d7e Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Tue, 22 Oct 2024 18:55:57 +0100 Subject: [PATCH 1/2] Tidy accommodation validation --- validate_yaml.py | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/validate_yaml.py b/validate_yaml.py index 4533034..4b01804 100755 --- a/validate_yaml.py +++ b/validate_yaml.py @@ -57,31 +57,25 @@ def check_events() -> None: print(len(events), "events") +def check_coordinates(item: agenda.types.StrDict) -> None: + """Check coordinate are valid.""" + if "latitude" not in item and "longitude" not in item: + return + assert "latitude" in item and "longitude" in item + assert all(isinstance(item[key], (int, float)) for key in ("latitude", "longitude")) + + def check_accommodation() -> None: """Check accommodation.""" filepath = os.path.join(data_dir, "accommodation.yaml") accommodation_list = yaml.safe_load(open(filepath)) + required_fields = ["type", "name", "country", "location", "trip", "from", "to"] + 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") - ) + assert all(field in stay for field in required_fields) + check_coordinates(stay) except AssertionError: pprint(stay) raise From 38792a1721dc11b907180adaa3cc5b9d1d87a769 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Tue, 22 Oct 2024 21:19:11 +0100 Subject: [PATCH 2/2] =?UTF-8?q?Enhance=20YAML=20validation=20=F0=9F=9B=A0?= =?UTF-8?q?=EF=B8=8F:=20Add=20airline=20checks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes: #186 --- validate_yaml.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/validate_yaml.py b/validate_yaml.py index 4b01804..68df0f9 100755 --- a/validate_yaml.py +++ b/validate_yaml.py @@ -29,10 +29,12 @@ def check_trips() -> None: print(len(routes), "routes") -def check_flights() -> None: +def check_flights(airlines: set[str]) -> None: """Check flights.""" - flights = agenda.travel.parse_yaml("flights", data_dir) - print(len(flights), "flights") + bookings = agenda.travel.parse_yaml("flights", data_dir) + for booking in bookings: + assert all(flight["airline"] in airlines for flight in booking["flights"]) + print(len(bookings), "flights") def check_trains() -> None: @@ -103,25 +105,29 @@ def check_stations() -> None: assert agenda.get_country(station["country"]) -def check_airlines() -> None: +def check_airlines() -> list[agenda.types.StrDict]: """Check airlines.""" airlines = agenda.travel.parse_yaml("airlines", data_dir) print(len(airlines), "airlines") for airline in airlines: assert airline.keys() == {"icao", "iata", "name"} + assert len(airline["icao"]) == 3 + assert len(airline["iata"]) == 2 + + return airlines def check() -> None: """Validate personal data YAML files.""" + airlines = check_airlines() check_trips() - check_flights() + check_flights({airline["iata"] for airline in airlines}) check_trains() check_conferences() check_events() check_accommodation() check_airports() check_stations() - check_airlines() if __name__ == "__main__":