diff --git a/ietf/meeting/migrations/0047_import_shared_audio_files.py b/ietf/meeting/migrations/0047_import_shared_audio_files.py new file mode 100644 index 000000000..f06bdeeb9 --- /dev/null +++ b/ietf/meeting/migrations/0047_import_shared_audio_files.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.5 on 2017-03-07 11:59 +from __future__ import unicode_literals + +import os + +from django.db import migrations +from ietf.secr.proceedings.proc_utils import import_audio_files + + +def purge_missing_files(apps, meeting): + Document = apps.get_model('doc', 'Document') + url = 'https://www.ietf.org/audio/ietf{}'.format(meeting.number) + documents = Document.objects.filter(external_url__startswith=url) + for document in documents: + filename = document.external_url.split('/')[-1] + if not os.path.exists(os.path.join('/a/www/audio/ietf{}'.format(meeting.number),filename)): + print "Removing missing recording: {} ({})".format(filename,document.pk) + document.delete() + +def forward(apps, schema_editor): + Meeting = apps.get_model('meeting', 'Meeting') + Document = apps.get_model('doc', 'Document') + for meeting in Meeting.objects.filter(number__in=range(94,98)): + print '\nMeeting #{}:'.format(meeting.number) + purge_missing_files(apps, meeting) + before = Document.objects.filter(type='recording').count() + import_audio_files(meeting) + after = Document.objects.filter(type='recording').count() + print ' {} Documents Added'.format(after - before) + +def backward(apps, schema_editor): + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('meeting', '0046_auto_20170201_0857'), + ] + + operations = [ + migrations.RunPython(forward, backward) + ] diff --git a/ietf/meeting/utils.py b/ietf/meeting/utils.py index 2c08fb509..7ad52c0be 100644 --- a/ietf/meeting/utils.py +++ b/ietf/meeting/utils.py @@ -11,6 +11,7 @@ import debug # pyflakes:ignore from ietf.dbtemplate.models import DBTemplate from ietf.meeting.models import Session from ietf.group.utils import can_manage_materials +from ietf.secr.proceedings.proc_utils import import_audio_files def group_sessions(sessions): @@ -122,6 +123,7 @@ def finalize(meeting): sp.rev = '00' sp.save() + import_audio_files(meeting) create_proceedings_templates(meeting) meeting.proceedings_final = True meeting.save() diff --git a/ietf/secr/proceedings/proc_utils.py b/ietf/secr/proceedings/proc_utils.py index d22bd5c90..6e25388fd 100644 --- a/ietf/secr/proceedings/proc_utils.py +++ b/ietf/secr/proceedings/proc_utils.py @@ -7,21 +7,23 @@ from urllib2 import urlopen import datetime import glob import os +import re import shutil import subprocess import debug # pyflakes:ignore from django.conf import settings +from django.core.exceptions import ObjectDoesNotExist from django.http import HttpRequest from django.shortcuts import render_to_response, render from django.db.utils import ConnectionDoesNotExist -from ietf.doc.models import Document, RelatedDocument, DocEvent, NewRevisionDocEvent, State +from ietf.doc.models import Document, DocAlias, RelatedDocument, DocEvent, NewRevisionDocEvent, State from ietf.group.models import Group, Role from ietf.group.utils import get_charter_text from ietf.meeting.helpers import get_schedule -from ietf.meeting.models import Session, Meeting, SchedTimeSessAssignment, SessionPresentation +from ietf.meeting.models import Session, Meeting, SchedTimeSessAssignment, SessionPresentation, TimeSlot from ietf.person.models import Person from ietf.secr.proceedings.models import InterimMeeting # proxy model from ietf.secr.proceedings.models import Registration @@ -29,36 +31,86 @@ from ietf.secr.utils.document import get_rfc_num from ietf.secr.utils.group import groups_by_session from ietf.secr.utils.meeting import get_proceedings_path, get_materials, get_session from ietf.utils.log import log +from ietf.utils.mail import send_mail + +AUDIO_FILE_RE = re.compile(r'ietf(?P[\d]+)-(?P.*)-(?P