feat(api): translate GIAS codes to names at the query boundary
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
"""API-boundary translation: marts now carry GIAS codes; the DataFrame the
|
||||
rest of the backend sees must carry today's name strings."""
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
from backend.data_loader import translate_gias_code_columns
|
||||
from backend.gias_codes import ESTABLISHMENT_STATUS, PHASE_OF_EDUCATION
|
||||
|
||||
|
||||
def _code_for(mapping, name):
|
||||
return next(c for c, n in mapping.items() if n == name)
|
||||
|
||||
|
||||
def test_codes_become_todays_names():
|
||||
df = pd.DataFrame([{
|
||||
"urn": 1,
|
||||
"phase_code": float(_code_for(PHASE_OF_EDUCATION, "Primary")),
|
||||
"school_type_code": np.nan,
|
||||
"status_code": float(_code_for(ESTABLISHMENT_STATUS, "Open, but proposed to close")),
|
||||
"religious_character_code": np.nan,
|
||||
"admissions_policy_code": np.nan,
|
||||
}])
|
||||
out = translate_gias_code_columns(df)
|
||||
row = out.iloc[0]
|
||||
assert row["phase"] == "Primary"
|
||||
assert row["status"] == "Open, but proposed to close"
|
||||
assert row["school_type"] is None
|
||||
assert row["religious_denomination"] is None
|
||||
assert row["admissions_policy"] is None
|
||||
|
||||
|
||||
def test_unknown_code_degrades_not_blanks():
|
||||
df = pd.DataFrame([{"urn": 1, "phase_code": 9999.0}])
|
||||
out = translate_gias_code_columns(df)
|
||||
assert out.iloc[0]["phase"] == "Unknown (9999)"
|
||||
|
||||
|
||||
def test_missing_code_columns_are_a_noop():
|
||||
"""Old-schema DataFrames (tests, pre-pipeline DBs) pass through untouched."""
|
||||
df = pd.DataFrame([{"urn": 1, "phase": "Primary", "status": "Open"}])
|
||||
out = translate_gias_code_columns(df)
|
||||
assert out.iloc[0]["phase"] == "Primary"
|
||||
assert out.iloc[0]["status"] == "Open"
|
||||
Reference in New Issue
Block a user