From 13daa62bdf9bc25a7538186b8bd047e231a5c75a Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 19 Jan 2026 16:51:18 +0000 Subject: [PATCH] =?UTF-8?q?map=20correct=20uprn=20when=20parsing=20asset?= =?UTF-8?q?=20conditions=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/condition/parsing/lbwf_parser.py | 29 ++++++++++++++----- .../tests/parsing/test_lbwf_parser.py | 12 ++++---- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/backend/condition/parsing/lbwf_parser.py b/backend/condition/parsing/lbwf_parser.py index 2d6463c9..293311b8 100644 --- a/backend/condition/parsing/lbwf_parser.py +++ b/backend/condition/parsing/lbwf_parser.py @@ -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 diff --git a/backend/condition/tests/parsing/test_lbwf_parser.py b/backend/condition/tests/parsing/test_lbwf_parser.py index e962f229..412c4c17 100644 --- a/backend/condition/tests/parsing/test_lbwf_parser.py +++ b/backend/condition/tests/parsing/test_lbwf_parser.py @@ -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" ])