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 import datetime
from django.utils.text import slugify
import debug # pyflakes:ignore
from ietf.doc.factories import DocumentFactory from ietf.doc.factories import DocumentFactory
from ietf.group.models import Group from ietf.group.models import Group
from ietf.meeting.models import (Meeting, Room, TimeSlot, Session, Schedule, SchedTimeSessAssignment, 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, session=session,
schedule=session.meeting.agenda) schedule=session.meeting.agenda)
# agenda # agenda
doc = DocumentFactory.create(name='agenda-%s'%meeting.number, type_id='agenda', title="Agenda", name = "agenda-%s-%s-%s" % (meeting.number, group.acronym, "01")
external_url="agenda-%s.txt"%meeting.number, group=group, rev='00', states=[('draft','active')]) 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) pres = SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
session.sessionpresentation_set.add(pres) session.sessionpresentation_set.add(pres)
# minutes # minutes
doc = DocumentFactory.create(name='minutes-%s'%meeting.number, type_id='minutes', title="Minutes", name = "minutes-%s-%s" % (meeting.number, time.strftime("%Y%m%d%H%M"))
external_url="minutes-%s.txt"%meeting.number, group=group, rev='00', states=[('draft','active')]) 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) pres = SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
session.sessionpresentation_set.add(pres) session.sessionpresentation_set.add(pres)
# slides # slides
doc = DocumentFactory.create(name='slides-%s-1-active'%meeting.number, type_id='slides', title="Slideshow", title = "Slideshow"
external_url="slides-%s.txt"%meeting.number, group=group, rev='00',
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')]) states=[('slides','active'), ('reuse_policy', 'single')])
pres = SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev) pres = SessionPresentation.objects.create(session=session, document=doc, rev=doc.rev)
session.sessionpresentation_set.add(pres) session.sessionpresentation_set.add(pres)

View file

@ -1619,6 +1619,8 @@ class MaterialsTests(TestCase):
def follow(url): def follow(url):
seen.add(url) seen.add(url)
r = self.client.get(url) r = self.client.get(url)
if r.status_code != 200:
debug.show('url')
self.assertEqual(r.status_code, 200) self.assertEqual(r.status_code, 200)
if not ('.' in url and url.rsplit('.', 1)[1] in ['tgz', 'pdf', ]): if not ('.' in url and url.rsplit('.', 1)[1] in ['tgz', 'pdf', ]):
if r.content: if r.content:
@ -1774,6 +1776,8 @@ class MaterialsTests(TestCase):
test_file.name = "some.html" test_file.name = "some.html"
r = self.client.post(url,dict(file=test_file)) r = self.client.post(url,dict(file=test_file))
self.assertContains(r, 'Could not identify the file encoding') 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 # 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}) 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 num = get_meeting(num).number
if (re.search('^\w+-\d+-.+-\d\d$', document) or 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+-.+-\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)): re.search('^slides-interim-\d+-.+-\d\d$', document)):
name, rev = document.rsplit('-', 1) name, rev = document.rsplit('-', 1)
else: else:
@ -1293,7 +1295,6 @@ def upload_session_minutes(request, session_id, num):
filename = '%s-%s%s'% ( doc.name, doc.rev, ext) filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
doc.external_url = filename 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) 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. # 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]) save_error = handle_upload_file(file, filename, session.meeting, 'minutes', request=request, encoding=form.file_encoding[file.name])
if save_error: if save_error:
@ -1397,7 +1398,6 @@ def upload_session_agenda(request, session_id, num):
filename = '%s-%s%s'% ( doc.name, doc.rev, ext) filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
doc.external_url = filename 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) 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. # 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]) save_error = handle_upload_file(file, filename, session.meeting, 'agenda', request=request, encoding=form.file_encoding[file.name])
if save_error: 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) filename = '%s-%s%s'% ( doc.name, doc.rev, ext)
doc.external_url = filename 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) 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. # 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]) save_error = handle_upload_file(file, filename, session.meeting, 'slides', request=request, encoding=form.file_encoding[file.name])
if save_error: if save_error:

View file

@ -323,9 +323,12 @@ def blue_sheet(request, meeting_id):
form = UploadBlueSheetForm(request.POST,request.FILES) form = UploadBlueSheetForm(request.POST,request.FILES)
if form.is_valid(): if form.is_valid():
file = request.FILES['file'] file = request.FILES['file']
handle_upload_file(file,file.name,meeting,'bluesheets') save_error = handle_upload_file(file,file.name,meeting,'bluesheets')
messages.success(request, 'File Uploaded') if save_error:
return redirect('ietf.secr.meetings.views.blue_sheet', meeting_id=meeting.number) 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: else:
form = UploadBlueSheetForm() form = UploadBlueSheetForm()