From 34a8cf1324e4fd99db8172222e958c865059ecdc Mon Sep 17 00:00:00 2001 From: ggman12 Date: Sun, 1 Feb 2026 14:06:26 -0500 Subject: [PATCH] refactor: move FAA data conversion logic to a separate function --- src/derive_from_faa_master_txt.py | 23 +++++++++++++++++++++++ src/snapshot_faa.py | 23 ++--------------------- 2 files changed, 25 insertions(+), 21 deletions(-) create mode 100644 src/derive_from_faa_master_txt.py diff --git a/src/derive_from_faa_master_txt.py b/src/derive_from_faa_master_txt.py new file mode 100644 index 0000000..c3a02fc --- /dev/null +++ b/src/derive_from_faa_master_txt.py @@ -0,0 +1,23 @@ +from pathlib import Path +import zipfile +import pandas as pd +from faa_aircraft_registry import read + +def convert_faa_master_txt_to_csv(zip_path: Path, csv_path: Path) -> None: + with zipfile.ZipFile(zip_path) as z: + registrations = read(z) + + df = pd.DataFrame(registrations['master'].values()) + col = "transponder_code_hex" + df = df[[col] + [c for c in df.columns if c != col]] + df = df.rename(columns={"transponder_code_hex": "icao"}) + registrant = pd.json_normalize(df["registrant"]).add_prefix("registrant_") + df = df.drop(columns="registrant").join(registrant) + df = df.rename(columns={"aircraft_type": "aircraft_type_2"}) + aircraft = pd.json_normalize(df["aircraft"]).add_prefix("aircraft_") + df = df.drop(columns="aircraft").join(aircraft) + df = df.rename(columns={"engine_type": "engine_type_2"}) + engine = pd.json_normalize(df["engine"].where(df["engine"].notna(), {})).add_prefix("engine_") + df = df.drop(columns="engine").join(engine) + df = df.sort_values(by=["icao"]) + df.to_csv(csv_path, index=False) \ No newline at end of file diff --git a/src/snapshot_faa.py b/src/snapshot_faa.py index f7cf7b0..4188d89 100644 --- a/src/snapshot_faa.py +++ b/src/snapshot_faa.py @@ -1,6 +1,3 @@ -from faa_aircraft_registry import read -import pandas as pd -import zipfile import zipfile from pathlib import Path from datetime import datetime, timezone @@ -28,21 +25,5 @@ with urlopen(req, timeout=120) as r: body = r.read() zip_path.write_bytes(body) -with zipfile.ZipFile(zip_path) as z: - registrations = read(z) - -df = pd.DataFrame(registrations['master'].values()) -col = "transponder_code_hex" -df = df[[col] + [c for c in df.columns if c != col]] -df = df.rename(columns={"transponder_code_hex": "icao"}) -registrant = pd.json_normalize(df["registrant"]).add_prefix("registrant_") -df = df.drop(columns="registrant").join(registrant) -df = df.rename(columns={"aircraft_type": "aircraft_type_2"}) -aircraft = pd.json_normalize(df["aircraft"]).add_prefix("aircraft_") -df = df.drop(columns="aircraft").join(aircraft) -df = df.rename(columns={"engine_type": "engine_type_2"}) -engine = pd.json_normalize(df["engine"].where(df["engine"].notna(), {})).add_prefix("engine_") -df = df.drop(columns="engine").join(engine) -df = df.sort_values(by=["icao"]) -df.to_csv(csv_path, index=False) - +from derive_from_faa_master_txt import convert_faa_master_txt_to_csv +convert_faa_master_txt_to_csv(zip_path, csv_path)