Model/applications/magic_plan/handler.py

47 lines
1.5 KiB
Python

import os
from typing import Any
import boto3
from infrastructure.magic_plan.config import MagicPlanConfig
from infrastructure.magic_plan.magic_plan_client import MagicPlanClient
from infrastructure.s3.s3_client import S3Client
from orchestration.magic_plan_orchestrator import MagicPlanOrchestrator
from applications.magic_plan.magic_plan_trigger_request import MagicPlanTriggerRequest
from domain.magicplan.models import Plan
from utilities.aws_lambda.subtask_handler import subtask_handler
from utilities.logger import setup_logger
logger = setup_logger()
@subtask_handler()
def handler(body: dict[str, Any], context: Any) -> str:
config = MagicPlanConfig.from_env(os.environ)
payload = MagicPlanTriggerRequest.model_validate(body)
client = MagicPlanClient(
customer_id=config.customer_id,
api_key=config.api_key,
)
boto3_client: Any = boto3.client # type: ignore
boto_s3: Any = boto3_client("s3")
s3_client = S3Client(
boto_s3_client=boto_s3, bucket="retrofit-energy-assessments-dev"
)
# TODO: read s3_bucket from env var so staging/prod use the correct bucket
plan: Plan = MagicPlanOrchestrator(client, s3_client).run(payload)
logger.info("Saved MagicPlan plan uid=%s", plan.uid)
return plan.uid
if __name__ == "__main__":
event = {
"Records": [
{
"body": '{"address": "2 Laburnum Way Bromley BR2 8BZ", "hubspot_deal_id": "local-test-deal"}',
}
]
}
handler(event, None)