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')