diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index eb279a66f..f69c5e696 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -200,18 +200,22 @@ def preprocess_assignments_for_agenda(assignments_queryset, meeting): return assignments -def read_agenda_file(num, doc): +def read_session_file(type, num, doc): # XXXX FIXME: the path fragment in the code below should be moved to # settings.py. The *_PATH settings should be generalized to format() # style python format, something like this: # DOC_PATH_FORMAT = { "agenda": "/foo/bar/agenda-{meeting.number}/agenda-{meeting-number}-{doc.group}*", } - path = os.path.join(settings.AGENDA_PATH, "%s/agenda/%s" % (num, doc.external_url)) + # + path = os.path.join(settings.AGENDA_PATH, "%s/%s/%s" % (num, type, doc.external_url)) if os.path.exists(path): with open(path) as f: return f.read(), path else: return None, path +def read_agenda_file(num, doc): + return read_session_file('agenda', num, doc) + def convert_draft_to_pdf(doc_name): inpath = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, doc_name + ".txt") outpath = os.path.join(settings.INTERNET_DRAFT_PDF_PATH, doc_name + ".pdf") diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index f4a913fc8..9f39bdde4 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -251,6 +251,12 @@ class MeetingTests(TestCase): self.assertEqual(r.status_code, 302) self.assertTrue(meeting.number in r["Location"]) + # session minutes + r = self.client.get(urlreverse("ietf.meeting.views.session_minutes", + kwargs=dict(num=meeting.number, session=session.group.acronym))) + self.assertEqual(r.status_code, 200) + self.assertTrue("1. More work items underway" in unicontent(r)) + # test with explicit meeting number in url r = self.client.get(urlreverse("ietf.meeting.views.materials", kwargs=dict(num=meeting.number))) self.assertEqual(r.status_code, 200) diff --git a/ietf/meeting/urls.py b/ietf/meeting/urls.py index f08516973..40a05ccf2 100644 --- a/ietf/meeting/urls.py +++ b/ietf/meeting/urls.py @@ -52,6 +52,7 @@ type_ietf_only_patterns = [ url(r'^agenda/(?P[A-Za-z0-9-]+)-drafts.pdf$', views.session_draft_pdf), url(r'^agenda/(?P[A-Za-z0-9-]+)-drafts.tgz$', views.session_draft_tarfile), url(r'^agenda/(?P[A-Za-z0-9-]+)/?$', views.session_agenda), + url(r'^minutes/(?P[A-Za-z0-9-]+)/?$', views.session_minutes), url(r'^sessions.json', ajax.sessions_json), url(r'^session/(?P\d+).json', ajax.session_json), url(r'^session/(?P\d+)/constraints.json', ajax.session_constraints), diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index e30d3401b..d8490b020 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -47,7 +47,7 @@ from ietf.meeting.helpers import get_all_assignments_from_schedule from ietf.meeting.helpers import get_modified_from_assignments from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting from ietf.meeting.helpers import get_meeting, get_schedule, agenda_permissions, get_meetings -from ietf.meeting.helpers import preprocess_assignments_for_agenda, read_agenda_file +from ietf.meeting.helpers import preprocess_assignments_for_agenda, read_agenda_file, read_session_file from ietf.meeting.helpers import convert_draft_to_pdf, get_earliest_session_date from ietf.meeting.helpers import can_view_interim_request, can_approve_interim_request from ietf.meeting.helpers import can_edit_interim_request @@ -612,25 +612,25 @@ def agenda_by_type_ics(request,num=None,type=None): updated = meeting.updated() return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":assignments},content_type="text/calendar") -def session_agenda(request, num, session): - d = Document.objects.filter(type="agenda", session__meeting__number=num) - if session == "plenaryt": +def session_document(request, num, acronym, type="agenda"): + d = Document.objects.filter(type=type, session__meeting__number=num) + if acronym == "plenaryt": d = d.filter(session__name__icontains="technical", session__slots__type="plenary") - elif session == "plenaryw": + elif acronym == "plenaryw": d = d.filter(session__name__icontains="admin", session__slots__type="plenary") else: - d = d.filter(session__group__acronym=session) + d = d.filter(session__group__acronym=acronym) if d: - agenda = d[0] + doc = d[0] html5_preamble = "%s" html5_postamble = "" - content, path = read_agenda_file(num, agenda) + content, path = read_session_file(type, num, doc) _, ext = os.path.splitext(path) ext = ext.lstrip(".").lower() if not content: - content = "Could not read agenda file '%s'" % path + content = "Could not read %s file '%s'" % (type, path) return HttpResponse(content, content_type="text/plain; charset=%s"%settings.DEFAULT_CHARSET) if ext == "txt": @@ -641,23 +641,29 @@ def session_agenda(request, num, session): content=re.sub("(\r\n|\r)", "\n", content) d = PyQuery(content) d("head title").empty() - d("head title").append(str(agenda)) + d("head title").append(str(doc)) d('meta[http-equiv]').remove() content = "" + d.html() else: - content = "

Unrecognized agend file '%s'

" % agenda.external_url - content = (html5_preamble % agenda) + content + html5_postamble + content = "

Unrecognized %s file '%s'

" % (type, doc.external_url) + content = (html5_preamble % doc) + content + html5_postamble return HttpResponse(content) - raise Http404("No agenda for the %s session of IETF %s is available" % (session, num)) + raise Http404("No %s for the %s session of IETF %s is available" % (type, acronym, num)) + +def session_agenda(request, num, session): + return session_document(request, num, acronym=session, type='agenda') + +def session_minutes(request, num, session): + return session_document(request, num, acronym=session, type='minutes') def session_draft_list(num, session): try: - agendas = Document.objects.filter(type="agenda", + agendas = Document.objects.filter(type=type, session__meeting__number=num, session__group__acronym=session, - states=State.objects.get(type="agenda", slug="active")).distinct() + states=State.objects.get(type=type, slug="active")).distinct() except Document.DoesNotExist: raise Http404