""" Release Correction Model. This Release Correction model uses sqlalchemy. """ import enum from typing import Any from sqlalchemy import Column, DateTime, Enum, Integer from assets.connectors import mysql from assets.exceptions import ReleaseCorrectionNotFound class StatusEnum(enum.Enum): """Enum class for release correction status.""" active = "active" submitted = "submitted" applied = "applied" class ReleaseCorrection(mysql.ArModel): """Table definition for release_correction table.""" __tablename__ = "release_correction" release_correction_id = Column( "release_correction_id", Integer, primary_key=True, autoincrement=True ) release_id = Column(Integer) status = Column(Enum(StatusEnum)) last_updated = Column(DateTime) def as_dict(self) -> dict[str, Any]: """Return object as dict. Returns: dict: Dictionary representation of the object """ return { "release_correction_id": self.release_correction_id, "release_id": self.release_id, "status": self.status, "last_updated": self.last_updated, } def get_release_correction_by_release_id(release_id: int) -> dict[str, Any]: """Get most recent release correction by release_id. Args: release_id (int): Release id. Returns: dict: release correction """ filters = [ (ReleaseCorrection.release_id == release_id), ] with mysql.ar_db_session() as session: row = ( session.query(ReleaseCorrection) .filter(*filters) .order_by(ReleaseCorrection.release_correction_id.desc()) .first() ) if not row: raise ReleaseCorrectionNotFound() return row.as_dict()