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
import json
|
|
from typing import Mapping, Any
|
|
from io import BytesIO
|
|
|
|
from backend.condition.condition_trigger_request import ConditionTriggerRequest
|
|
from backend.condition.lookups.uprn_lookup_s3 import UprnLookupS3
|
|
from backend.condition.processor import process_file
|
|
from utils.logger import setup_logger
|
|
from utils.s3 import read_io_from_s3
|
|
|
|
|
|
logger = setup_logger()
|
|
|
|
|
|
def handler(event: Mapping[str, Any], context: Any) -> None:
|
|
|
|
for record in event.get("Records", []):
|
|
try:
|
|
body_dict = json.loads(record["body"])
|
|
logger.debug("Validating request body")
|
|
payload = ConditionTriggerRequest.model_validate(body_dict)
|
|
|
|
logger.debug("Successfully validated request body")
|
|
|
|
if payload.uprn_lookup_file_bucket and payload.uprn_lookup_file_key:
|
|
logger.debug("Getting UPRN lookup file from s3")
|
|
uprn_lookup = UprnLookupS3(
|
|
bucket=payload.uprn_lookup_file_bucket,
|
|
key=payload.uprn_lookup_file_key,
|
|
) # TODO: replace with postgres implementation
|
|
logger.debug("Successfully got UPRN lookup file from s3")
|
|
else:
|
|
uprn_lookup = None
|
|
|
|
logger.debug("Getting conditions data from s3")
|
|
file_bytes: BytesIO = read_io_from_s3(
|
|
bucket_name=payload.trigger_file_bucket,
|
|
file_key=payload.trigger_file_key,
|
|
)
|
|
logger.debug(
|
|
"Successfully got conditions data from s3. Moving on to process file..."
|
|
)
|
|
|
|
process_file(
|
|
file_stream=file_bytes,
|
|
file_type=payload.file_type,
|
|
uprn_lookup=uprn_lookup,
|
|
)
|
|
|
|
except Exception as e:
|
|
logger.error(f"Failed to process record: {e}")
|