from datetime import datetime, timezone import sentry_sdk import structlog from sqlalchemy import Engine, create_engine, update from dapd_apollo_sync_finalizer import __version__ from dapd_apollo_sync_finalizer.config import Config from dapd_apollo_sync_finalizer.models.slzdb_models import ContentStatus, UnitOfWork def update_uow(logger, slzdb_engine: Engine, uow_id: int) -> None: uow_query = ( update(UnitOfWork) .values(last_updated_at=datetime.now(timezone.utc), activity_status="NOT_IN_PROGRESS") .where(UnitOfWork.unit_of_work_id == uow_id) ) content_status_query = ( update(ContentStatus) .values(content_status="FAILED", failure_count=ContentStatus.failure_count + 1) .where(ContentStatus.unit_of_work_id == uow_id) ) logger.info("Updating unit #%s and related content_status", uow_id) with slzdb_engine.connect() as conn: conn.execute(uow_query) conn.execute(content_status_query) logger.info("Unit #%s and related content_status were updated", uow_id) def entrypoint(event, context): config = Config() sentry_sdk.init( dsn=config.sentry_dsn, environment=config.env, release=__version__, debug=config.debug, max_breadcrumbs=10, ) logger = structlog.get_logger( processors=[ structlog.processors.TimeStamper(fmt="iso", key="timestamp"), structlog.processors.add_log_level, structlog.processors.JSONRenderer(), ], ) slzdb_engine = create_engine( config.slzdb_uri, isolation_level="AUTOCOMMIT", echo=config.debug, connect_args={"application_name": f"{config.env}-dapd-api-scraper"}, ) update_uow(logger, slzdb_engine, event["unit_of_work_id"]) if __name__ == "__main__": import json with open("events/default.json", mode="r", encoding="utf-8") as fo: entrypoint(*json.load(fo))