""" AssetFinal Model. This AssetFinal model uses sqlalchemy. It's used to store information about encoded (final) assets """ from sqlalchemy import Column from sqlalchemy import Enum from sqlalchemy import Float from sqlalchemy import Integer from sqlalchemy import String from sqlalchemy.exc import SQLAlchemyError from connectors import mysql from constants import asset_types class AssetFinal(mysql.AuModel): """Table definition for asset_final table.""" __tablename__ = 'asset_final' asset_final_id = Column( 'id', Integer, primary_key=True, autoincrement=True) asset_upload_id = Column(Integer) asset_type = Column(String(16), nullable=True, default=None) asset_subtype = Column(Enum(*asset_types.ASSET_SUBTYPES), default=asset_types.SUBTYPE_NONE) bucket = Column(String(128), nullable=False) filename = Column(String(128), nullable=False) duration = Column(Float, nullable=True, default=None) def as_dict(self): """Return object as dict. Returns: dict: Dictionary representation of object """ asset_final_dict = { 'asset_type': self.asset_type, 'bucket': self.bucket, 'key': self.filename, 'duration': self.duration } return asset_final_dict def get_batch(limit=100): """Return a batch of final asset records. Args: Returns: response.Response: AssetFinal.as_dict() in message attribute or error response. """ try: with mysql.au_db_session() as session: filters = [ (AssetFinal.duration == 0), AssetFinal.asset_type.in_(['WAV', 'MP3_192', 'FLAC']) ] query = session.query(AssetFinal).filter(*filters)\ .order_by(AssetFinal.asset_upload_id.desc())\ .limit(limit) assets = query.all() result = [asset_final.as_dict() for asset_final in assets] return result except SQLAlchemyError as e: print(e)