Added urls and views for individual meeting documents, in order to be able to serve them directly from the datatracker, instead of taking them from www.ietf.org through CDN. Adjusted the patterns used for href() accordingly. This also avoid different-origin issues. Shifted the url for materials_editable_groups() to an URL more in line to those it links to. Changed the iframe urls for the agenda week view to work for groups with different agendas for different sessions by using href().

- Legacy-Id: 13964
This commit is contained in:
Henrik Levkowetz 2017-07-21 21:23:53 +00:00
parent b56e9483b4
commit a5d8cc85d3
4 changed files with 38 additions and 6 deletions

View file

@ -183,6 +183,12 @@ class MeetingTests(TestCase):
self.assertTrue(session.group.acronym in agenda_content)
self.assertTrue(slot.location.name in agenda_content)
# document-specific urls
for doc in session.materials.exclude(states__slug='deleted'):
url = urlreverse('ietf.meeting.views.materials_document', kwargs=dict(num=meeting.number, document=doc.name))
r = self.client.get(url)
self.assertEqual(unicontent(r), doc.text())
def test_agenda_current_audio(self):
date = datetime.date.today()
meeting = MeetingFactory(type_id='ietf', date=date )

View file

@ -83,7 +83,8 @@ type_ietf_only_patterns_id_optional = [
url(r'^week-view(?:.html)?/?$', views.week_view),
url(r'^room-view(?:.html)?/?$', views.room_view),
url(r'^materials(?:.html)?/?$', views.materials),
url(r'^materials/editable-groups/?$', views.materials_editable_groups),
url(r'^materials/%(document)s$' % settings.URL_REGEXPS, views.materials_document),
url(r'^session/?$', views.materials_editable_groups),
url(r'^proceedings(?:.html)?/?$', views.proceedings),
url(r'^proceedings(?:.html)?/finalize/?$', views.finalize_proceedings),
url(r'^proceedings/acknowledgements/$', views.proceedings_acknowledgements),

View file

@ -65,7 +65,7 @@ from ietf.utils.pipe import pipe
from ietf.utils.pdf import pdf_pages
from ietf.utils.text import xslugify
from ietf.utils.validators import ( validate_file_size, validate_mime_type,
validate_file_extension, validate_no_html_frame, )
validate_file_extension, validate_no_html_frame, get_mime_type)
from .forms import (InterimMeetingModelForm, InterimAnnounceForm, InterimSessionModelForm,
InterimCancelForm, InterimSessionInlineFormSet)
@ -154,6 +154,30 @@ def current_materials(request):
else:
raise Http404
@cache_page(5 * 60)
def materials_document(request, document, num=None, ):
if num is None:
num = get_meeting(num).number
if re.search('-[0-9][0-9]$', document):
name = document[:-3]
else:
name = document
doc = get_object_or_404(Document, name=name)
if not doc.meeting_related():
raise Http404("Not a meeting related document")
if not doc.session_set.filter(meeting__number=num).exists():
raise Http404("No such document for meeting %s" % num)
filename = doc.get_file_name()
basename = doc.get_base_name()
with open(filename, 'rb') as file:
bytes = file.read()
mtype, chset = get_mime_type(bytes)
content_type = "%s; %s" % (mtype, chset)
response = HttpResponse(bytes, content_type=content_type)
response['Content-Disposition'] = 'inline; filename="%s"' % basename
return response
@login_required
def materials_editable_groups(request, num=None):
meeting = get_meeting(num)
@ -799,7 +823,7 @@ def week_view(request, num=None, name=None, owner=None):
item["room"] = a.timeslot.get_location()
if a.session and a.session.agenda():
item["agenda"] = a.session.agenda().get_absolute_url()
item["agenda"] = a.session.agenda().href()
items.append(item)

View file

@ -543,6 +543,7 @@ URL_REGEXPS = {
"charter": r"(?P<name>charter-[-a-z0-9]+)",
"date": r"(?P<date>\d{4}-\d{2}-\d{2})",
"name": r"(?P<name>([A-Za-z0-9_+-]+?|%s))" % DRAFT_NAMES_WITH_DOT,
"document": r"(?P<document>[a-z][-a-z0-9]+)", # regular document names
"rev": r"(?P<rev>[0-9]{1,2}(-[0-9]{2})?)",
"owner": r"(?P<owner>[-A-Za-z0-9\'+._]+@[A-Za-z0-9-._]+)",
"schedule_name": r"(?P<name>[A-Za-z0-9-:_]+)",
@ -594,9 +595,9 @@ DOC_HREFS = {
}
MEETING_DOC_HREFS = {
"agenda": "https://www.ietf.org/proceedings/{meeting.number}/agenda/{doc.external_url}",
"minutes": "https://www.ietf.org/proceedings/{meeting.number}/minutes/{doc.external_url}",
"slides": "https://www.ietf.org/proceedings/{meeting.number}/slides/{doc.external_url}",
"agenda": "/meeting/{meeting.number}/materials/{doc.name}",
"minutes": "/meeting/{meeting.number}/materials/{doc.name}",
"slides": "/meeting/{meeting.number}/materials/{doc.name}",
"recording": "{doc.external_url}",
"bluesheets": "https://www.ietf.org/proceedings/{meeting.number}/bluesheets/{doc.external_url}",
}