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:
parent
b56e9483b4
commit
a5d8cc85d3
|
@ -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 )
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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}",
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue