diff options
Diffstat (limited to 'cli/app/sql/models/media.py')
| -rw-r--r-- | cli/app/sql/models/media.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/cli/app/sql/models/media.py b/cli/app/sql/models/media.py new file mode 100644 index 0000000..d732b24 --- /dev/null +++ b/cli/app/sql/models/media.py @@ -0,0 +1,70 @@ +from sqlalchemy import create_engine, Table, Column, String, Integer, DateTime, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.ext.hybrid import hybrid_property +from sqlalchemy_utc import UtcDateTime, utcnow +import sqlalchemy.sql.functions as func +from wtforms_alchemy import ModelForm + +from app.sql.common import Base, Session +from app.sql.columns.hash_column import HashColumn +from app.sql.columns.media_type_column import MediaTypeColumn +from app.models.types import MediaTypeIndex, MediaTypeName + +from app.utils.file_utils import sha256_tree +from app.settings import app_cfg + +from os.path import join + +class Media(Base): + """Table for storing references to various media""" + __tablename__ = 'media' + id = Column(Integer, primary_key=True) + import_id = Column(Integer, ForeignKey('media_import.id'), nullable=True) + mediaType = Column(MediaTypeColumn(), nullable=False) + sha256 = Column(HashColumn(32), nullable=False) + ext = Column(String(4, convert_unicode=True), nullable=False) + frame = Column(Integer, nullable=True) + created_at = Column(UtcDateTime(), default=utcnow()) + + # children = relationship("Media") + # media_features = relationship("MediaFeature") + # media_metadata = relationship("MediaMetadata") + + def toJSON(self): + return { + 'id': self.id, + 'import_id': self.import_id, + 'mediaType': self.mediaType, + 'sha256': self.sha256, + 'frame': self.frame, + 'ext': self.ext, + 'url': self.url(), + 'created_at': self.created_at, + } + + def toFullJSON(self, session): + siblings = session.query(Media).filter(Media.sha256 == self.sha256).all() + return { + 'el': self.toJSON(), + 'siblings': [ el.toJSON() for el in siblings ], + } + + def filename(self): + if self.mediaType == 'video_frame': + return "{}_{:03d}{}".format(self.sha256, self.frame, self.ext) + return "{}{}".format(self.sha256, self.ext) + + def filetree(self): + return sha256_tree(self.sha256) + + def filepath(self): + return join(app_cfg.DIR_MEDIA, self.filetree()) + + def fullpath(self): + return join(self.filepath(), self.filename()) + + def archivepath(self): + return join('media', self.filename()) + + def url(self): + return join(app_cfg.URL_MEDIA, self.filetree(), self.filename()) |
