from __future__ import annotations import os from typing import Any import boto3 from applications.audit_generator.audit_generator_trigger_request import ( AuditGeneratorTriggerRequest, ) from infrastructure.postgres.config import PostgresConfig from infrastructure.postgres.engine import make_engine, make_session from infrastructure.s3.s3_client import S3Client from orchestration.audit_generator_orchestrator import AuditGeneratorOrchestrator from orchestration.audit_generator_unit_of_work import AuditGeneratorUnitOfWork from utilities.aws_lambda.subtask_handler import subtask_handler @subtask_handler(pass_task_orchestrator=False) def handler(body: dict[str, Any], context: Any) -> None: trigger = AuditGeneratorTriggerRequest.model_validate(body) boto3_client: Any = ( boto3.client ) # pyright: ignore[reportUnknownMemberType, reportUnknownVariableType] boto_s3: Any = boto3_client("s3") bucket = os.environ["S3_BUCKET_NAME"] s3_client = S3Client(boto_s3_client=boto_s3, bucket=bucket) engine = make_engine(PostgresConfig.from_env(os.environ)) def session_factory() -> Any: return make_session(engine) def uow_factory() -> AuditGeneratorUnitOfWork: return AuditGeneratorUnitOfWork(session_factory) AuditGeneratorOrchestrator( hubspot_deal_id=trigger.hubspot_deal_id, s3_client=s3_client, uow_factory=uow_factory, ).run()