Improvements
This commit is contained in:
commit
1f8626d76b
85
show
Executable file
85
show
Executable file
|
@ -0,0 +1,85 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import csv
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
# from pprint import pprint
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
|
since_date = now - timedelta(days=365 * 5)
|
||||||
|
|
||||||
|
airlines = {
|
||||||
|
"British Airways": "BA",
|
||||||
|
"Iberia Airlines": "IB",
|
||||||
|
"Qatar Airways": "QR",
|
||||||
|
"Ryanair": "FR",
|
||||||
|
"easyJet": "U2",
|
||||||
|
"SAS": "SK",
|
||||||
|
}
|
||||||
|
|
||||||
|
Flight = dict[str, str]
|
||||||
|
Flights = list[tuple[datetime, Flight]]
|
||||||
|
|
||||||
|
|
||||||
|
def format_row(dt: datetime, f: Flight) -> str:
|
||||||
|
"""Format flight."""
|
||||||
|
d = dt.strftime("%a, %d %b %Y")
|
||||||
|
days = (dt - now).days
|
||||||
|
|
||||||
|
if days == 0 or days == -1:
|
||||||
|
delta = "today"
|
||||||
|
elif days < 0:
|
||||||
|
delta = f"{-days:>3d} days ago"
|
||||||
|
else:
|
||||||
|
delta = f"{days:>3d} days"
|
||||||
|
|
||||||
|
airline = f["Airline"]
|
||||||
|
if len(airline) > 15:
|
||||||
|
airline = "".join(t[0] for t in airline.split())
|
||||||
|
|
||||||
|
flight_number = f["Flight_Number"]
|
||||||
|
if flight_number.isdigit() and airline in airlines:
|
||||||
|
flight_number = airlines[airline] + flight_number
|
||||||
|
|
||||||
|
return (
|
||||||
|
("*" if delta == "today" else " ")
|
||||||
|
+ f' {d} {delta:>13s} {f["From"]:4s} -> {f["To"]:4s} '
|
||||||
|
+ f'{airline:>15s} {flight_number:<7s} {f["Class"]} '
|
||||||
|
+ f'{f["Seat"]:>4s} {f["Plane"]}'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def read_flights(filename: str) -> Flights:
|
||||||
|
"""Read flights from CSV."""
|
||||||
|
reader = csv.DictReader(open(filename))
|
||||||
|
|
||||||
|
flights = []
|
||||||
|
|
||||||
|
for row in reader:
|
||||||
|
d = row.pop("\ufeffDate")
|
||||||
|
if len(d) > 10:
|
||||||
|
d = datetime.strptime(d, "%Y-%m-%d %H:%M:%S")
|
||||||
|
else:
|
||||||
|
d = datetime.strptime(d, "%Y-%m-%d")
|
||||||
|
row = {k: v for k, v in row.items() if not k.endswith("OID")}
|
||||||
|
# for key in "Trip", "Seat", "Seat_Type", "Class", "Reason", "Note":
|
||||||
|
# row.pop(key)
|
||||||
|
if d < since_date:
|
||||||
|
continue
|
||||||
|
flights.append((d, row))
|
||||||
|
|
||||||
|
flights.sort()
|
||||||
|
|
||||||
|
return flights
|
||||||
|
|
||||||
|
|
||||||
|
def show_flights(flights: Flights) -> None:
|
||||||
|
"""Show list of flights."""
|
||||||
|
for d, row in flights:
|
||||||
|
print(format_row(d, row))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
filename = "/home/edward/backup/openflights/openflights-backup-2023-09-09.csv"
|
||||||
|
flights = read_flights(filename)
|
||||||
|
show_flights(flights)
|
Loading…
Reference in a new issue