guest role; guide section ticking
This commit is contained in:
@@ -114,6 +114,52 @@ def build_cli():
|
||||
click.echo(' imported as /guides/{} (draft, revision {})'
|
||||
.format(guide.slug, guide.revision))
|
||||
|
||||
@guides_cli.command('fix-images')
|
||||
@click.option('--apply/--dry-run', default=False,
|
||||
help='Write to the database. The default reports only.')
|
||||
@with_appcontext
|
||||
def fix_images(apply):
|
||||
"""Attach images a guide references but nothing owns.
|
||||
|
||||
An image pasted into a guide that had not been saved yet was uploaded
|
||||
with no guideid, and nothing ever attached it. Editors and the uploader
|
||||
could see it; every other reader got "Image unavailable" on a published
|
||||
guide. Saving a guide attaches its images now, but a guide nobody edits
|
||||
again would stay broken, so this repairs what is already stored.
|
||||
"""
|
||||
orphans = GuideImage.query.filter(GuideImage.guideid.is_(None)).all()
|
||||
if not orphans:
|
||||
click.echo('No unattached images.')
|
||||
return
|
||||
|
||||
wanted = {}
|
||||
for guide in Guide.query.all():
|
||||
for block in guide.blocks or []:
|
||||
if isinstance(block, dict) and block.get('imageid') is not None:
|
||||
try:
|
||||
wanted.setdefault(int(block['imageid']), guide)
|
||||
except (TypeError, ValueError):
|
||||
continue
|
||||
|
||||
fixed = 0
|
||||
for image in orphans:
|
||||
guide = wanted.get(image.guideimageid)
|
||||
if guide is None:
|
||||
click.echo(' image {} is referenced by no guide - left alone'
|
||||
.format(image.guideimageid))
|
||||
continue
|
||||
click.echo(' image {} -> guide {} ({})'.format(
|
||||
image.guideimageid, guide.guideid, guide.slug))
|
||||
if apply:
|
||||
image.guideid = guide.guideid
|
||||
fixed += 1
|
||||
|
||||
if not apply:
|
||||
click.echo('{} would be attached. Pass --apply to write.'.format(fixed))
|
||||
return
|
||||
db.session.commit()
|
||||
click.echo('{} image(s) attached.'.format(fixed))
|
||||
|
||||
@guides_cli.command('export')
|
||||
@click.option('--out', 'outdir', required=True,
|
||||
type=click.Path(file_okay=False),
|
||||
|
||||
Reference in New Issue
Block a user