summaryrefslogtreecommitdiff
path: root/animism-align/cli
diff options
context:
space:
mode:
authorJules Laplace <julescarbon@gmail.com>2021-03-11 16:07:31 +0100
committerJules Laplace <julescarbon@gmail.com>2021-03-11 16:07:31 +0100
commite000a6316401773f7efea332f973b609b4b88bd3 (patch)
tree93b56517e65f360a360803ab43795e2542df54c5 /animism-align/cli
parente28171ff3679e8e172d438c796751bf823dfe7f8 (diff)
should store uploads per-episode now
Diffstat (limited to 'animism-align/cli')
-rw-r--r--animism-align/cli/app/controllers/upload_controller.py10
-rw-r--r--animism-align/cli/app/sql/models/upload.py6
-rw-r--r--animism-align/cli/app/sql/versions/202103111524_add_episode_id_to_uploads.py29
-rw-r--r--animism-align/cli/commands/admin/fix_uploads.py45
-rw-r--r--animism-align/cli/commands/site/export.py2
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