"""Preset Model. This Preset model uses sqlalchemy. A preset summarizes a collection of pre-determined asset transcoding job configurations """ from typing import Any from owsresponse import response from sentry_sdk import capture_exception from sqlalchemy import Column, String from sqlalchemy.dialects.mysql import INTEGER from sqlalchemy.exc import SQLAlchemyError from transcoding.connectors import mysql from transcoding.constants import error class Preset(mysql.BaseModel): """Table definition for preset table.""" __tablename__ = "preset" preset_id = Column(INTEGER(unsigned=True), primary_key=True, autoincrement=True) alias = Column(String(255), nullable=False, unique=True) output_bucket = Column(String(255), nullable=True) sns_topic = Column(String(1023), nullable=True) def as_dict(self) -> dict[str, Any]: """Return object as dict. Returns: dict: Dictionary representation of object. """ preset_dict = { "preset_id": self.preset_id, "alias": self.alias, "output_bucket": self.output_bucket, "sns_topic": self.sns_topic, } return preset_dict def get_preset_by_id(preset_id: int) -> response.Response: """Return preset info by id. Args: preset_id (int): Preset id. Returns: response.Response: Preset.as_dict() in message attribute or error response. """ try: with mysql.db_session() as session: filters = [(Preset.preset_id == preset_id)] entry = session.query(Preset).filter(*filters).one_or_none() if entry is None: return response.create_not_found_response( message=error.ERROR_NOT_FOUND_MESSAGE.format("Preset") ) preset_dict = entry.as_dict() return response.Response(preset_dict) except SQLAlchemyError as e: capture_exception(e) return response.create_fatal_response(e.args) def get_preset_by_alias(alias: str) -> response.Response: """Return preset info by alias. Args: alias (str): Preset alias. Returns: response.Response: Preset.as_dict() in message attribute or error response. """ try: with mysql.db_session() as session: filters = [(Preset.alias == alias)] entry = session.query(Preset).filter(*filters).one_or_none() if entry is None: return response.create_not_found_response( message=error.ERROR_NOT_FOUND_MESSAGE.format("Preset") ) preset_dict = entry.as_dict() return response.Response(preset_dict) except SQLAlchemyError as e: capture_exception(e) return response.create_fatal_response(e.args) def get_all_presets() -> response.Response: """Return all preset entries. Returns: response.Response: List of Preset.as_dict() in message attribute or error response. """ try: with mysql.db_session() as session: presets = session.query(Preset).all() result_data = [entry.as_dict() for entry in presets] return response.Response(message=result_data) except SQLAlchemyError as e: capture_exception(e) return response.create_fatal_response(e.args)