mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-08 11:17:27 +00:00
51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
from typing import Any, BinaryIO, List, Optional
|
|
from datetime import datetime
|
|
|
|
from backend.condition.condition_trigger_request import ConditionFileType
|
|
from backend.condition.lookups.uprn_lookup import UprnLookup
|
|
from utils.logger import setup_logger
|
|
from backend.condition.domain.mapping.mapper import Mapper
|
|
from backend.condition.domain.property_condition_survey import PropertyConditionSurvey
|
|
from backend.condition.parsing.parser import Parser
|
|
from backend.condition.persistence.condition_postgres import ConditionPostgres
|
|
from backend.condition.parsing.factory import select_parser, select_mapper
|
|
|
|
logger = setup_logger()
|
|
|
|
|
|
def process_file(
|
|
file_stream: BinaryIO,
|
|
file_type: ConditionFileType,
|
|
uprn_lookup: Optional[UprnLookup],
|
|
) -> None:
|
|
# Instantiation
|
|
logger.debug(f"[processor] Instantiating classes...")
|
|
parser: Parser = select_parser(file_type, uprn_lookup)
|
|
mapper: Mapper = select_mapper(file_type)
|
|
persistence = ConditionPostgres()
|
|
|
|
logger.debug(f"[processor] Finished instantiating classes. Calling Parser...")
|
|
|
|
# Orchestration
|
|
raw_properties: List[Any] = parser.parse(file_stream)
|
|
|
|
logger.info(
|
|
f"[processor] Finished loading customer survey data for {len(raw_properties)} properties. Mapping..."
|
|
)
|
|
|
|
survey_year = datetime.now().year # TODO: get this from filepath or elsewhere
|
|
|
|
property_condition_surveys: List[PropertyConditionSurvey] = []
|
|
|
|
for p in raw_properties:
|
|
property_condition_surveys.append(
|
|
mapper.map_asset_conditions_for_property(p, survey_year)
|
|
)
|
|
|
|
logger.info(
|
|
f"[processor] Finished mapping {len(property_condition_surveys)} properties. Writing to database..."
|
|
)
|
|
|
|
persistence.bulk_insert_surveys(property_condition_surveys)
|
|
|
|
logger.info(f"[processor] Finished loading surveys to database")
|