diff options
Diffstat (limited to 'animism-align/cli')
5 files changed, 87 insertions, 5 deletions
diff --git a/animism-align/cli/app/controllers/upload_controller.py b/animism-align/cli/app/controllers/upload_controller.py index 7122e53..634f15d 100644 --- a/animism-align/cli/app/controllers/upload_controller.py +++ b/animism-align/cli/app/controllers/upload_controller.py @@ -64,6 +64,12 @@ class UploadView(FlaskView): except: raise APIError('No tag specified') + try: + episode_id = request.form.get('episode_id') + # print(episode_id) + except: + raise APIError('No episode_id specified') + if 'image' in request.files: file = request.files['image'] # print(fn) @@ -85,7 +91,7 @@ class UploadView(FlaskView): file.seek(0) uploaded_im_fn = secure_filename(file.filename) - uploaded_im_abspath = os.path.join(app_cfg.DIR_UPLOADS, tag) + uploaded_im_abspath = os.path.join(app_cfg.DIR_UPLOADS, str(episode_id), tag) uploaded_im_fullpath = os.path.join(uploaded_im_abspath, uploaded_im_fn) session = Session() @@ -107,7 +113,7 @@ class UploadView(FlaskView): os.makedirs(uploaded_im_abspath, exist_ok=True) file.save(uploaded_im_fullpath) - upload = Upload(username=username, tag=tag, fn=uploaded_im_fn, sha256=sha256, ext=ext) + upload = Upload(username=username, tag=tag, fn=uploaded_im_fn, sha256=sha256, ext=ext, episode_id=episode_id) session.add(upload) session.commit() response = { diff --git a/animism-align/cli/app/sql/models/upload.py b/animism-align/cli/app/sql/models/upload.py index ae30a54..ea6950f 100644 --- a/animism-align/cli/app/sql/models/upload.py +++ b/animism-align/cli/app/sql/models/upload.py @@ -14,6 +14,7 @@ class Upload(Base): """Table for storing references to various media""" __tablename__ = 'upload' id = Column(Integer, primary_key=True) + episode_id = Column(Integer) sha256 = Column(String(256), nullable=False) fn = Column(String(256), nullable=False) ext = Column(String(4, convert_unicode=True), nullable=False) @@ -24,6 +25,7 @@ class Upload(Base): def toJSON(self): return { 'id': self.id, + 'episode_id': self.episode_id, 'sha256': self.sha256, 'fn': self.fn, 'ext': self.ext, @@ -44,6 +46,6 @@ class Upload(Base): def url(self): if self.tag: - return join('/static/data_store/uploads', self.tag, self.fn) - return join('/static/data_store/uploads', self.fn) + return join('/static/data_store/uploads', str(self.episode_id), self.tag, self.fn) + return join('/static/data_store/uploads', str(self.episode_id), self.fn) # return join(app_cfg.URL_UPLOADS, sha256_tree(self.sha256), self.filename()) diff --git a/animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py b/animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py new file mode 100644 index 0000000..bccea9e --- /dev/null +++ b/animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py @@ -0,0 +1,29 @@ +"""add episode id to uploads + +Revision ID: d00c2398fc5f +Revises: 639488f6e800 +Create Date: 2021-03-11 15:24:07.230796 + +""" +from alembic import op +import sqlalchemy as sa +import sqlalchemy_utc + + +# revision identifiers, used by Alembic. +revision = 'd00c2398fc5f' +down_revision = '639488f6e800' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('upload', sa.Column('episode_id', sa.Integer(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('upload', 'episode_id') + # ### end Alembic commands ### diff --git a/animism-align/cli/commands/admin/fix_uploads.py b/animism-align/cli/commands/admin/fix_uploads.py new file mode 100644 index 0000000..8eaa505 --- /dev/null +++ b/animism-align/cli/commands/admin/fix_uploads.py @@ -0,0 +1,45 @@ +import click + +@click.command('fix_uploads') +@click.pass_context +def cli(ctx): + from app.settings import app_cfg + from app.sql.common import db, Session, Media + from sqlalchemy.orm.attributes import flag_modified + + session = Session() + media = session.query(Media).all() + + seen_keys = {} + for item in media: + if "poster" in item.settings: + fix_url(item.settings['poster']) + print(item.settings['poster']['url']) + if "display" in item.settings: + fix_url(item.settings['display']) + if "fullsize" in item.settings: + fix_url(item.settings['fullsize']) + if "thumbnail" in item.settings: + fix_url(item.settings['thumbnail']) + if "file" in item.settings: + fix_url(item.settings['file']) + if "image_lookup" in item.settings: + fix_lookup(item.settings['image_lookup']) + if "display_lookup" in item.settings: + fix_lookup(item.settings['display_lookup']) + if "thumbnail_lookup" in item.settings: + fix_lookup(item.settings['thumbnail_lookup']) + # sqlalchemy will not notice deep updates of JSON fields + flag_modified(item, "settings") + session.add(item) + session.commit() + +def fix_lookup(lookup): + for key, value in lookup.items(): + fix_url(value) + +def fix_url(obj): + if 'episode_id' in obj: + return + obj['episode_id'] = 1 + obj['url'] = obj['url'].replace('/uploads', '/uploads/1') diff --git a/animism-align/cli/commands/site/export.py b/animism-align/cli/commands/site/export.py index 41e41ed..6bafadc 100644 --- a/animism-align/cli/commands/site/export.py +++ b/animism-align/cli/commands/site/export.py @@ -24,7 +24,7 @@ MEDIA_ANNOTATION_TYPES = [ help='Whether to rebuild the Javascript bundle') @click.pass_context def cli(ctx, opt_output_dir, opt_sync, opt_js): - """Export a graph""" + """Export an episode""" # ------------------------------------------------ # imports |
