"""AssetFinal Model.""" from sqlalchemy import Column from sqlalchemy import Enum from sqlalchemy import ForeignKey from sqlalchemy import Integer from sqlalchemy import String from asset_transcoder.connectors import mysql from asset_transcoder.constants import asset_types class AssetFinal(mysql.BaseModel): """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, ForeignKey('asset_upload.id')) asset_type = Column(String(16), nullable=True, default=None) asset_subtype = Column(Enum(*asset_types.ASSET_SUBTYPES), default=asset_types.SUBTYPE_NONE) filename = Column(String(128), nullable=False) duration = Column(Integer, default=0) def to_dict(self): """Return object as dict. Returns: dict: Dictionary representation of object """ return { 'id': self.asset_final_id, 'asset_upload_id': self.asset_upload_id, 'asset_type': self.asset_type, 'asset_subtype': self.asset_subtype, 'filename': self.filename, 'duration': self.duration } def create_asset_final(asset_upload_id, asset_type, asset_subtype, filename, duration, session): """Create new final asset item in the table. Args: asset_upload_id (int): Asset upload id. asset_type (str): Asset type. asset_subtype (str): Asset subtype. filename (str): Asset filename. duration (int): Asset duration (for audio) session (sqlalchemy.Session): live db connection Returns: dict: Created final asset info. """ asset_final = AssetFinal( asset_upload_id=asset_upload_id, asset_type=asset_type, asset_subtype=asset_subtype, filename=filename, duration=duration) session.add(asset_final) session.flush() return asset_final.to_dict() def get_asset_finals(asset_upload_id): """Return asset_finals item. Args: asset_upload_id (id): unique asset_upload_id Returns: dict: containing a dict with the retrieved asset_final. """ with mysql.transcoder_db_session(read_only=True) as session: filters = [ (AssetFinal.asset_upload_id == asset_upload_id) ] asset_finals = session.query(AssetFinal).filter(*filters).all() return {'items': [asset_final.to_dict() for asset_final in asset_finals]}