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:
|
||||
"""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 {}
|
||||
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 {
|
||||
"bioguide_id": data.get("bioguideId"),
|
||||
"name": data.get("name", ""),
|
||||
@@ -174,8 +185,8 @@ def parse_member_from_api(data: dict) -> dict:
|
||||
"last_name": data.get("lastName"),
|
||||
"party": data.get("partyName") or None,
|
||||
"state": _normalize_state(data.get("state")),
|
||||
"chamber": current_term.get("chamber"),
|
||||
"district": str(data.get("district")) if data.get("district") else None,
|
||||
"chamber": chamber,
|
||||
"district": str(int(district)) if district is not None else None,
|
||||
"photo_url": data.get("depiction", {}).get("imageUrl"),
|
||||
"official_url": data.get("officialWebsiteUrl"),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user