Removed premature save of upload document state (doing it after verifying that the save to file worked instead). Tweaked materials documents revision extraction regexes. Added a test on no change of materials rev after failed upload. Corrected the naming of materials in make_meeting_test_data. Refined the test crawl of meeting materials pages.

- Legacy-Id: 14865
This commit is contained in:
Henrik Levkowetz 2018-03-19 01:05:52 +00:00
parent 306431319a
commit 1ece5f1f3b
4 changed files with 34 additions and 12 deletions

View file

@ -1,5 +1,10 @@
import datetime
from django.utils.text import slugify
import debug # pyflakes:ignore
from ietf.doc.factories import DocumentFactory
from ietf.group.models import Group
from ietf.meeting.models import (Meeting, Room, TimeSlot, Session, Schedule, SchedTimeSessAssignment,
@ -28,18 +33,29 @@ def make_interim_meeting(group,date,status='sched'):
session=session,
schedule=session.meeting.agenda)
# agenda
doc = DocumentFactory.create(name='agenda-%s'%meeting.number, type_id='agenda', title="Agenda",
external_url="agenda-%s.txt"%meeting.number, group=group, rev='00', states=[('draft','active')])
name = "agenda-%s-%s-%s" % (meeting.number, group.acronym, "01")
rev = '00'
file = "%s-%s.txt" % (name, rev)
doc = DocumentFactory.create(name=name, type_id='agenda', title="Agenda",
external_url=file, group=group, rev=rev, states=[('draft','active')])
pres = SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
session.sessionpresentation_set.add(pres)
# minutes
doc = DocumentFactory.create(name='minutes-%s'%meeting.number, type_id='minutes', title="Minutes",
external_url="minutes-%s.txt"%meeting.number, group=group, rev='00', states=[('draft','active')])
name = "minutes-%s-%s" % (meeting.number, time.strftime("%Y%m%d%H%M"))
rev = '00'
file = "%s-%s.txt" % (name, rev)
doc = DocumentFactory.create(name=name, type_id='minutes', title="Minutes",
external_url=file, group=group, rev=rev, states=[('draft','active')])
pres = SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
session.sessionpresentation_set.add(pres)
# slides
doc = DocumentFactory.create(name='slides-%s-1-active'%meeting.number, type_id='slides', title="Slideshow",
external_url="slides-%s.txt"%meeting.number, group=group, rev='00',
title = "Slideshow"
name = "slides-%s-sessa-%s" % (meeting.number, slugify(title))
rev = '00'
file = "%s-%s.txt" % (name, rev)
doc = DocumentFactory.create(name=name, type_id='slides', title=title,
external_url=file, group=group, rev=rev,
states=[('slides','active'), ('reuse_policy', 'single')])
pres = SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
session.sessionpresentation_set.add(pres)

View file

@ -1619,6 +1619,8 @@ class MaterialsTests(TestCase):
def follow(url):
seen.add(url)
r = self.client.get(url)
if r.status_code != 200:
debug.show('url')
self.assertEqual(r.status_code, 200)
if not ('.' in url and url.rsplit('.', 1)[1] in ['tgz', 'pdf', ]):
if r.content:
@ -1774,6 +1776,8 @@ class MaterialsTests(TestCase):
test_file.name = "some.html"
r = self.client.post(url,dict(file=test_file))
self.assertContains(r, 'Could not identify the file encoding')
doc = Document.objects.get(pk=doc.pk)
self.assertEqual(doc.rev,'02')
# Verify that we don't have dead links
url = url=urlreverse('ietf.meeting.views.session_details', kwargs={'num':session.meeting.number, 'acronym': session.group.acronym})

View file

@ -161,6 +161,8 @@ def materials_document(request, document, num=None, ext=None):
num = get_meeting(num).number
if (re.search('^\w+-\d+-.+-\d\d$', document) or
re.search('^\w+-interim-\d+-.+-\d\d-\d\d$', document) or
re.search('^\w+-interim-\d+-.+-sess[a-z]-\d\d$', document) or
re.search('^minutes-interim-\d+-.+-\d\d$', document) or
re.search('^slides-interim-\d+-.+-\d\d$', document)):
name, rev = document.rsplit('-', 1)
else:
@ -1293,7 +1295,6 @@ def upload_session_minutes(request, session_id, num):
filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
doc.external_url = filename
e = NewRevisionDocEvent.objects.create(doc=doc, by=request.user.person, type='new_revision', desc='New revision available: %s'%doc.rev, rev=doc.rev)
doc.save_with_history([e])
# The way this function builds the filename it will never trigger the file delete in handle_file_upload.
save_error = handle_upload_file(file, filename, session.meeting, 'minutes', request=request, encoding=form.file_encoding[file.name])
if save_error:
@ -1397,7 +1398,6 @@ def upload_session_agenda(request, session_id, num):
filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
doc.external_url = filename
e = NewRevisionDocEvent.objects.create(doc=doc,by=request.user.person,type='new_revision',desc='New revision available: %s'%doc.rev,rev=doc.rev)
doc.save_with_history([e])
# The way this function builds the filename it will never trigger the file delete in handle_file_upload.
save_error = handle_upload_file(file, filename, session.meeting, 'agenda', request=request, encoding=form.file_encoding[file.name])
if save_error:
@ -1503,7 +1503,6 @@ def upload_session_slides(request, session_id, num, name):
filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
doc.external_url = filename
e = NewRevisionDocEvent.objects.create(doc=doc,by=request.user.person,type='new_revision',desc='New revision available: %s'%doc.rev,rev=doc.rev)
doc.save_with_history([e])
# The way this function builds the filename it will never trigger the file delete in handle_file_upload.
save_error = handle_upload_file(file, filename, session.meeting, 'slides', request=request, encoding=form.file_encoding[file.name])
if save_error:

View file

@ -323,7 +323,10 @@ def blue_sheet(request, meeting_id):
form = UploadBlueSheetForm(request.POST,request.FILES)
if form.is_valid():
file = request.FILES['file']
handle_upload_file(file,file.name,meeting,'bluesheets')
save_error = handle_upload_file(file,file.name,meeting,'bluesheets')
if save_error:
form.add_error(None, save_error)
else:
messages.success(request, 'File Uploaded')
return redirect('ietf.secr.meetings.views.blue_sheet', meeting_id=meeting.number)
else: