summaryrefslogtreecommitdiff
path: root/animism-align/cli/commands/admin/fix_uploads.py
blob: 8eaa5059c749ff45f8f7a1c4b53738d7a5128eb2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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')