""" OATAssetUpload Model. This OATAssetUpload model uses sqlalchemy. It's used to store about newly uploaded assets. """ from sqlalchemy import Boolean from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Enum from sqlalchemy import Integer from sqlalchemy import String from sqlalchemy.sql import func from connectors import mysql from constants import api OBJECT_TYPE_PODCAST = 'podcast' OBJECT_TYPE_EPISODE = 'episode' OBJECT_TYPE_ADUPLOAD = 'adupload' OBJECT_TYPE_TEST = 'test' OBJECT_TYPE_RELEASE = 'release' OBJECT_TYPES = ( OBJECT_TYPE_PODCAST, OBJECT_TYPE_EPISODE, OBJECT_TYPE_ADUPLOAD, OBJECT_TYPE_TEST, OBJECT_TYPE_RELEASE ) class OATAssetUpload(mysql.OATModel): """Table definition for asset_upload table.""" __tablename__ = 'asset_upload' asset_upload_id = Column( 'id', Integer, primary_key=True, autoincrement=True) user_id = Column(String(200), nullable=False) asset_type = Column(String(16)) filename = Column(String(64), nullable=False) object_id = Column(String(255), nullable=True) object_type = Column(Enum(*OBJECT_TYPES), nullable=True) original_filename = Column(String(255), nullable=True) deleted = Column(Boolean, default=False) created_date = Column(DateTime, default=func.now()) updated_date = Column( DateTime, default=func.now(), onupdate=func.now()) def to_dict(self): """Return object as dict. Returns: dict: Dictionary representation of object """ return { 'id': self.asset_upload_id, 'user_id': self.user_id, 'asset_type': self.asset_type, 'filename': self.filename, 'object_id': self.object_id, 'object_type': self.object_type, 'original_filename': self.original_filename, 'media_type': self.media_type() } def get_broken_uploads(session, date): """Get asset uploads that haven't been picked up by the state machine.""" return session.query(OATAssetUpload).filter( OATAssetUpload.object_id.is_(None), OATAssetUpload.object_type.is_(None), OATAssetUpload.deleted == 0, OATAssetUpload.created_date >= date ).all()