fix: member sync — robust chamber parsing and district int conversion
- Handle terms as list or dict (Congress.gov API inconsistency) - Infer 'House of Representatives' from district presence as fallback - Convert district to int before str() to avoid leading zeros / 'None' Authored by: Jack Levy
This commit is contained in:
@@ -165,8 +165,19 @@ def _normalize_state(state: str | None) -> str | None:
|
|||||||
|
|
||||||
def parse_member_from_api(data: dict) -> dict:
|
def parse_member_from_api(data: dict) -> dict:
|
||||||
"""Normalize raw API member list data into our model fields."""
|
"""Normalize raw API member list data into our model fields."""
|
||||||
terms = data.get("terms", {}).get("item", [])
|
terms_raw = data.get("terms", {})
|
||||||
|
if isinstance(terms_raw, list):
|
||||||
|
terms = terms_raw
|
||||||
|
elif isinstance(terms_raw, dict):
|
||||||
|
terms = terms_raw.get("item", [])
|
||||||
|
else:
|
||||||
|
terms = []
|
||||||
current_term = terms[-1] if terms else {}
|
current_term = terms[-1] if terms else {}
|
||||||
|
chamber = current_term.get("chamber")
|
||||||
|
# Fallback: infer House from presence of a numeric district
|
||||||
|
if not chamber and data.get("district"):
|
||||||
|
chamber = "House of Representatives"
|
||||||
|
district = data.get("district")
|
||||||
return {
|
return {
|
||||||
"bioguide_id": data.get("bioguideId"),
|
"bioguide_id": data.get("bioguideId"),
|
||||||
"name": data.get("name", ""),
|
"name": data.get("name", ""),
|
||||||
@@ -174,8 +185,8 @@ def parse_member_from_api(data: dict) -> dict:
|
|||||||
"last_name": data.get("lastName"),
|
"last_name": data.get("lastName"),
|
||||||
"party": data.get("partyName") or None,
|
"party": data.get("partyName") or None,
|
||||||
"state": _normalize_state(data.get("state")),
|
"state": _normalize_state(data.get("state")),
|
||||||
"chamber": current_term.get("chamber"),
|
"chamber": chamber,
|
||||||
"district": str(data.get("district")) if data.get("district") else None,
|
"district": str(int(district)) if district is not None else None,
|
||||||
"photo_url": data.get("depiction", {}).get("imageUrl"),
|
"photo_url": data.get("depiction", {}).get("imageUrl"),
|
||||||
"official_url": data.get("officialWebsiteUrl"),
|
"official_url": data.get("officialWebsiteUrl"),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user