"""Lambda share-audience function module.""" import logging from typing import Any import pydantic from anydi import auto import app from app.container import container from app.exceptions import HandlerError from app.handler import ShareAudienceHandler, ShareAudienceRequest from app.schemas import S3Event # Setup application app.setup() logger = logging.getLogger(__name__) @container.inject def handle( event: Any, context: Any, handler: ShareAudienceHandler = auto ) -> dict[str, Any]: try: s3_event = S3Event.model_validate(event) except pydantic.ValidationError: logger.exception("Invalid event payload received.") return {"status": "NOT_OK", "code": "INVALID_EVENT"} logger.info("Handing event ...") try: handler.handle( ShareAudienceRequest( bucket=s3_event.records[0].s3.bucket.name, key=s3_event.records[0].s3.object.key, ) ) except HandlerError as exc: logger.exception( "Failed to handle event.", extra=exc.extra, ) return {"status": "NOT_OK", "code": exc.code} return {"status": "OK"}