Skip to content

Commit a5d8cc8

Browse files
committed
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
1 parent b56e948 commit a5d8cc8

4 files changed

Lines changed: 38 additions & 6 deletions

File tree

ietf/meeting/tests_views.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,12 @@ def test_agenda(self):
183183
self.assertTrue(session.group.acronym in agenda_content)
184184
self.assertTrue(slot.location.name in agenda_content)
185185

186+
# document-specific urls
187+
for doc in session.materials.exclude(states__slug='deleted'):
188+
url = urlreverse('ietf.meeting.views.materials_document', kwargs=dict(num=meeting.number, document=doc.name))
189+
r = self.client.get(url)
190+
self.assertEqual(unicontent(r), doc.text())
191+
186192
def test_agenda_current_audio(self):
187193
date = datetime.date.today()
188194
meeting = MeetingFactory(type_id='ietf', date=date )

ietf/meeting/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@
8383
url(r'^week-view(?:.html)?/?$', views.week_view),
8484
url(r'^room-view(?:.html)?/?$', views.room_view),
8585
url(r'^materials(?:.html)?/?$', views.materials),
86-
url(r'^materials/editable-groups/?$', views.materials_editable_groups),
86+
url(r'^materials/%(document)s$' % settings.URL_REGEXPS, views.materials_document),
87+
url(r'^session/?$', views.materials_editable_groups),
8788
url(r'^proceedings(?:.html)?/?$', views.proceedings),
8889
url(r'^proceedings(?:.html)?/finalize/?$', views.finalize_proceedings),
8990
url(r'^proceedings/acknowledgements/$', views.proceedings_acknowledgements),

ietf/meeting/views.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
from ietf.utils.pdf import pdf_pages
6666
from ietf.utils.text import xslugify
6767
from ietf.utils.validators import ( validate_file_size, validate_mime_type,
68-
validate_file_extension, validate_no_html_frame, )
68+
validate_file_extension, validate_no_html_frame, get_mime_type)
6969

7070
from .forms import (InterimMeetingModelForm, InterimAnnounceForm, InterimSessionModelForm,
7171
InterimCancelForm, InterimSessionInlineFormSet)
@@ -154,6 +154,30 @@ def current_materials(request):
154154
else:
155155
raise Http404
156156

157+
@cache_page(5 * 60)
158+
def materials_document(request, document, num=None, ):
159+
if num is None:
160+
num = get_meeting(num).number
161+
if re.search('-[0-9][0-9]$', document):
162+
name = document[:-3]
163+
else:
164+
name = document
165+
doc = get_object_or_404(Document, name=name)
166+
if not doc.meeting_related():
167+
raise Http404("Not a meeting related document")
168+
if not doc.session_set.filter(meeting__number=num).exists():
169+
raise Http404("No such document for meeting %s" % num)
170+
filename = doc.get_file_name()
171+
basename = doc.get_base_name()
172+
with open(filename, 'rb') as file:
173+
bytes = file.read()
174+
175+
mtype, chset = get_mime_type(bytes)
176+
content_type = "%s; %s" % (mtype, chset)
177+
response = HttpResponse(bytes, content_type=content_type)
178+
response['Content-Disposition'] = 'inline; filename="%s"' % basename
179+
return response
180+
157181
@login_required
158182
def materials_editable_groups(request, num=None):
159183
meeting = get_meeting(num)
@@ -799,7 +823,7 @@ def week_view(request, num=None, name=None, owner=None):
799823
item["room"] = a.timeslot.get_location()
800824

801825
if a.session and a.session.agenda():
802-
item["agenda"] = a.session.agenda().get_absolute_url()
826+
item["agenda"] = a.session.agenda().href()
803827

804828
items.append(item)
805829

ietf/settings.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ def skip_unreadable_post(record):
543543
"charter": r"(?P<name>charter-[-a-z0-9]+)",
544544
"date": r"(?P<date>\d{4}-\d{2}-\d{2})",
545545
"name": r"(?P<name>([A-Za-z0-9_+-]+?|%s))" % DRAFT_NAMES_WITH_DOT,
546+
"document": r"(?P<document>[a-z][-a-z0-9]+)", # regular document names
546547
"rev": r"(?P<rev>[0-9]{1,2}(-[0-9]{2})?)",
547548
"owner": r"(?P<owner>[-A-Za-z0-9\'+._]+@[A-Za-z0-9-._]+)",
548549
"schedule_name": r"(?P<name>[A-Za-z0-9-:_]+)",
@@ -594,9 +595,9 @@ def skip_unreadable_post(record):
594595
}
595596

596597
MEETING_DOC_HREFS = {
597-
"agenda": "https://www.ietf.org/proceedings/{meeting.number}/agenda/{doc.external_url}",
598-
"minutes": "https://www.ietf.org/proceedings/{meeting.number}/minutes/{doc.external_url}",
599-
"slides": "https://www.ietf.org/proceedings/{meeting.number}/slides/{doc.external_url}",
598+
"agenda": "/meeting/{meeting.number}/materials/{doc.name}",
599+
"minutes": "/meeting/{meeting.number}/materials/{doc.name}",
600+
"slides": "/meeting/{meeting.number}/materials/{doc.name}",
600601
"recording": "{doc.external_url}",
601602
"bluesheets": "https://www.ietf.org/proceedings/{meeting.number}/bluesheets/{doc.external_url}",
602603
}

0 commit comments

Comments
 (0)