From a98e00508cf0f6b0bf517e905b483484d6ed1dab Mon Sep 17 00:00:00 2001 From: Robert Sparks Date: Mon, 27 Jul 2020 20:41:59 +0000 Subject: [PATCH] Better handle materials with names that end with a string that looks like a version (-nn). May address #3040. Commit ready for merge. - Legacy-Id: 18285 --- ietf/meeting/tests_views.py | 10 ++++++++++ ietf/meeting/views.py | 9 ++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index cdaa4f417..1f72dbbc2 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -448,6 +448,16 @@ class MeetingTests(TestCase): self.assertContains(r, meeting.number) self.assertContains(r, "You cannot manage the meeting materials for any groups") + @override_settings(MEETING_MATERIALS_SERVE_LOCALLY=True) + def test_materials_name_endswith_hyphen_number_number(self): + sp = SessionPresentationFactory(document__name='slides-junk-15',document__type_id='slides',document__states=[('reuse_policy','single')]) + sp.document.uploaded_filename = '%s-%s.pdf'%(sp.document.name,sp.document.rev) + sp.document.save() + self.write_materials_file(sp.session.meeting, sp.document, 'Fake slide contents') + url = urlreverse("ietf.meeting.views.materials_document", kwargs=dict(document=sp.document.name,num=sp.session.meeting.number)) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + def test_proceedings(self): meeting = make_meeting_test_data() session = Session.objects.filter(meeting=meeting, group__acronym="mars").first() diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index a4e7f60dc..b1b94c0b9 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -200,7 +200,14 @@ def materials_document(request, document, num=None, ext=None): name, rev = document.rsplit('-', 1) else: name, rev = document, None - doc = get_object_or_404(Document, name=name) + # This view does not allow the use of DocAliases. Right now we are probably only creating one (identity) alias, but that may not hold in the future. + doc = Document.objects.filter(name=name).first() + # Handle edge case where the above name, rev splitter misidentifies the end of a document name as a revision mumber + if not doc: + name = name + '-' + rev + rev = None + 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():