Merged in [16601] from rjsparks@nostrum.com:

A management command to correct the state of several slide presentations uploaded during IETF105, and perform some missed powerpoint to pdf conversions.
 - Legacy-Id: 16659
Note: SVN reference [16601] has been migrated to Git commit a14188d95cf200dfbdd93485b89808f3336b0649
This commit is contained in:
Henrik Levkowetz 2019-08-19 17:50:56 +00:00
parent b2be7975c9
commit 509e0da7ab

View file

@ -0,0 +1,67 @@
# Copyright The IETF Trust 2019, All Rights Reserved
# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals
import os
from collections import Counter
from django.core.management.base import BaseCommand
from ietf.doc.models import DocEvent
from ietf.meeting.models import Meeting, SessionPresentation
from ietf.person.models import Person
from ietf.secr.proceedings.proc_utils import is_powerpoint, post_process
class Command(BaseCommand):
help = ('Fix uploaded_filename and generate pdf from pptx')
def add_arguments(self, parser):
parser.add_argument('--dry-run', action='store_true', dest='dry-run', default=False, help='Report on changes that would be made without making them')
def handle(self, *args, **options):
ietf105 = Meeting.objects.get(number=105)
slides_path = os.path.join(ietf105.get_materials_path(),'slides')
system_person = Person.objects.get(name="(System)")
counts = Counter()
for sp in SessionPresentation.objects.filter(session__meeting__number=105,document__type='slides'): #.filter(document__name='slides-105-manet-dlep-multicast-support-discussion'):
slides = sp.document
self.stderr.write("DEBUG: Processing %s" % slides)
if not os.path.exists(os.path.join(slides_path,slides.uploaded_filename)):
name, ext = os.path.splitext(slides.uploaded_filename)
target_filename = '%s-%s%s' % (name[:name.rfind('-ss')], slides.rev,ext)
if os.path.exists(os.path.join(slides_path,target_filename)):
slides.uploaded_filename = target_filename
if not options['dry-run']:
e = DocEvent.objects.create(doc=slides, rev=slides.rev, by=system_person, type='changed_document', desc='Corrected uploaded_filename')
slides.save_with_history([e])
counts['uploaded_filename repair succeeded'] += 1
else:
self.stderr.write("Unable to repair %s" % slides)
counts['uploaded_filename repair failed'] += 1
continue
else:
counts['uploaded_filename already ok'] += 1
if is_powerpoint(slides):
base, _ = os.path.splitext(slides.uploaded_filename)
if os.path.exists(os.path.join(slides_path,base+'.pdf')):
self.stderr.write("PDF already exists for %s " % slides)
counts['PDF already exists for a repaired file'] += 1
else:
if not options['dry-run']:
post_process(slides)
counts['PDF conversions'] += 1
if options['dry-run']:
self.stdout.write("This is a dry-run. Nothing has actually changed. In a normal run, the output would say the following:")
for label,count in counts.iteritems():
self.stdout.write("%s : %d" % (label,count) )