mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
Parse Houses sheet as well 🟪
This commit is contained in:
parent
e11f59a732
commit
01bf0dbd9c
1 changed files with 43 additions and 15 deletions
|
|
@ -14,36 +14,66 @@ logger = setup_logger
|
||||||
class LbwfParser(Parser):
|
class LbwfParser(Parser):
|
||||||
|
|
||||||
def parse(self, file_stream: BinaryIO) -> Any:
|
def parse(self, file_stream: BinaryIO) -> Any:
|
||||||
wb = load_workbook(file_stream)
|
wb: Workbook = load_workbook(file_stream)
|
||||||
address_to_uprn_map: Dict[str, int] = LbwfParser._generate_address_to_uprn_dict(wb)
|
address_to_uprn_map: Dict[str, int] = self._generate_address_to_uprn_dict(wb)
|
||||||
|
|
||||||
|
assets = self._parse_assets(wb)
|
||||||
|
houses = self._parse_houses(wb, address_to_uprn_map)
|
||||||
|
|
||||||
|
self._merge_assets_into_houses(assets, houses)
|
||||||
|
|
||||||
|
return houses
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _parse_assets(wb: Workbook) -> List[LbwfAssetCondition]:
|
||||||
|
assets_sheet = wb["Houses Asset Data"]
|
||||||
|
asset_rows = assets_sheet.iter_rows(values_only=True)
|
||||||
|
|
||||||
# Parse assets
|
|
||||||
assets_sheet: Workbook = wb["Houses Asset Data"]
|
|
||||||
asset_rows: Iterator[Tuple[object | None, ...]] = assets_sheet.iter_rows(values_only=True)
|
|
||||||
asset_headers = next(asset_rows)
|
asset_headers = next(asset_rows)
|
||||||
asset_header_indexes: Dict[str, int] = LbwfParser._get_column_indexes_by_name(asset_headers)
|
asset_header_indexes = LbwfParser._get_column_indexes_by_name(asset_headers)
|
||||||
|
|
||||||
assets: List[LbwfAssetCondition] = []
|
assets: List[LbwfAssetCondition] = []
|
||||||
for row in asset_rows:
|
for row in asset_rows:
|
||||||
try:
|
try:
|
||||||
assets.append(LbwfParser._map_row_to_asset_record(row, asset_header_indexes))
|
assets.append(
|
||||||
|
LbwfParser._map_row_to_asset_record(row, asset_header_indexes)
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error mapping LBWF row to asset record: {e}")
|
logger.error(f"Error mapping LBWF row to asset record: {e}")
|
||||||
|
|
||||||
# Parse houses
|
return assets
|
||||||
houses_sheet: Workbook = wb["Houses"]
|
|
||||||
house_rows: Iterator[Tuple[object | None, ...]] = houses_sheet.iter_rows(values_only=True)
|
@staticmethod
|
||||||
|
def _parse_houses(
|
||||||
|
wb: Workbook,
|
||||||
|
address_to_uprn_map: Dict[str, int],
|
||||||
|
) -> List[LbwfHouse]:
|
||||||
|
houses_sheet = wb["Houses"]
|
||||||
|
house_rows = houses_sheet.iter_rows(values_only=True)
|
||||||
|
|
||||||
house_headers = next(house_rows)
|
house_headers = next(house_rows)
|
||||||
house_header_indexes: Dict[str, int] = LbwfParser._get_column_indexes_by_name(house_headers)
|
house_header_indexes = LbwfParser._get_column_indexes_by_name(house_headers)
|
||||||
|
|
||||||
houses: List[LbwfHouse] = []
|
houses: List[LbwfHouse] = []
|
||||||
for row in house_rows:
|
for row in house_rows:
|
||||||
try:
|
try:
|
||||||
houses.append(LbwfParser._map_row_to_house_record(row, house_header_indexes, address_to_uprn_map))
|
houses.append(
|
||||||
|
LbwfParser._map_row_to_house_record(
|
||||||
|
row,
|
||||||
|
house_header_indexes,
|
||||||
|
address_to_uprn_map,
|
||||||
|
)
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Error mapping LBWF row to house record: {e}")
|
logger.error(f"Error mapping LBWF row to house record: {e}")
|
||||||
|
|
||||||
# Merge assets and houses by Reference
|
return houses
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _merge_assets_into_houses(
|
||||||
|
assets: List[LbwfAssetCondition],
|
||||||
|
houses: List[LbwfHouse],
|
||||||
|
) -> None:
|
||||||
assets_by_ref: Dict[int, List[LbwfAssetCondition]] = defaultdict(list)
|
assets_by_ref: Dict[int, List[LbwfAssetCondition]] = defaultdict(list)
|
||||||
for asset in assets:
|
for asset in assets:
|
||||||
assets_by_ref[asset.prop_ref].append(asset)
|
assets_by_ref[asset.prop_ref].append(asset)
|
||||||
|
|
@ -51,8 +81,6 @@ class LbwfParser(Parser):
|
||||||
for house in houses:
|
for house in houses:
|
||||||
house.assets = assets_by_ref.get(house.reference, [])
|
house.assets = assets_by_ref.get(house.reference, [])
|
||||||
|
|
||||||
return houses
|
|
||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _map_row_to_house_record(
|
def _map_row_to_house_record(
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue