map correct uprn when parsing asset conditions 🟩

This commit is contained in:
Daniel Roth 2026-01-19 16:51:18 +00:00
parent 12bbd1a4fe
commit 13daa62bdf
2 changed files with 27 additions and 14 deletions

View file

@ -13,8 +13,7 @@ class LbwfParser(Parser):
def parse(self, file_stream: BinaryIO) -> Any:
wb = load_workbook(file_stream)
urn_to_address_map: Dict[str, int] = LbwfParser._map_uprn_to_address(wb)
print(urn_to_address_map)
address_to_uprn_map: Dict[str, int] = LbwfParser._generate_address_to_uprn_dict(wb)
assets_sheet: Workbook = wb["Houses Asset Data"]
rows: Iterator[Tuple[object | None, ...]] = assets_sheet.iter_rows(values_only=True)
@ -25,19 +24,26 @@ class LbwfParser(Parser):
for row in rows:
try:
assets.append(LbwfParser._map_row_to_asset_record(row, header_indexes))
assets.append(LbwfParser._map_row_to_asset_record(row, header_indexes, address_to_uprn_map))
except Exception as e:
logger.error(f"Error mapping LBWF row to asset record: {e}")
print(assets)
return assets
@staticmethod
def _map_row_to_asset_record(row: Any | Tuple[object | None, ...], header_indexes: Dict[str, int]) -> LbwfAssetCondition:
def _map_row_to_asset_record(
row: Any | Tuple[object | None, ...],
header_indexes: Dict[str, int],
address_to_uprn_map: Dict[str, int]
) -> LbwfAssetCondition:
address: str = row[header_indexes["ADDRESS"]]
return LbwfAssetCondition(
uprn=0, #placeholder
uprn=LbwfParser._get_uprn_from_address(address, address_to_uprn_map),
prop_ref=row[header_indexes["PROP REF"]],
domna=row[header_indexes["Domna"]],
address=row[header_indexes["ADDRESS"]],
address=address,
ownership=row[header_indexes["OWNERSHIP"]],
prop_status=row[header_indexes["PROP STATUS"]],
prop_type=row[header_indexes["PROP TYPE"]],
@ -57,8 +63,7 @@ class LbwfParser(Parser):
)
@staticmethod
def _map_uprn_to_address(wb: Workbook) -> Dict[str, int | None]:
print(wb.sheetnames)
def _generate_address_to_uprn_dict(wb: Workbook) -> Dict[str, int | None]:
sheet: Workbook = wb["All Energy Breakdown "]
rows: Iterator[Tuple[object | None, ...]] = sheet.iter_rows(values_only=True)
@ -96,4 +101,12 @@ class LbwfParser(Parser):
index[header] = i
return index
def _get_uprn_from_address(address: str, address_to_uprn_map: Dict[str, int]) -> int | None:
pseudo_name = address.split(",")[0]
if pseudo_name.lower() in (k.lower() for k in address_to_uprn_map.keys()):
return address_to_uprn_map[pseudo_name.upper()]
return None

View file

@ -87,16 +87,16 @@ def lbwf_homes_xlsx_bytes() -> BytesIO:
])
all_energy_breakdown.append([
1,
100,
101,
"100 RANDOM ROAD",
200,
None,
"123 FAKE STREET",
"A10 1AB"
])
all_energy_breakdown.append([
2,
200,
None,
"123 FAKE STREET",
100,
101,
"100 RANDOM ROAD",
"A10 1AB"
])