Skip to content

Commit 3c88cf8

Browse files
committed
Replaced some group-specific agenda and minutes urls with session-specific urls, and more consistently pointed at explicitly named meeting materilas. Related to [13964].
- Legacy-Id: 13968 Note: SVN reference [13964] has been migrated to Git commit a5d8cc8
1 parent d00921b commit 3c88cf8

9 files changed

Lines changed: 36 additions & 45 deletions

File tree

ietf/doc/models.py

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,10 @@ def href(self, meeting=None):
225225
else:
226226
info = dict(doc=self)
227227

228-
self._cached_href = format.format(**info)
228+
href = format.format(**info)
229+
if href.startswith('/'):
230+
href = settings.IDTRACKER_BASE_URL + href
231+
self._cached_href = href
229232
return self._cached_href
230233

231234
def set_state(self, state):
@@ -346,13 +349,9 @@ def has_rfc_editor_note(self):
346349
return e != None and (e.text != "")
347350

348351
def meeting_related(self):
349-
answer = False
350352
if self.type_id in ("agenda","minutes","bluesheets","slides","recording"):
351-
answer = (self.name.split("-")[1] == "interim"
352-
or (self if isinstance(self, Document) else self.doc).session_set.exists())
353-
if self.type_id in ("slides",):
354-
answer = answer and self.get_state_slug('reuse_policy')=='single'
355-
return answer
353+
return self.type_id != "slides" or self.get_state_slug('reuse_policy')=='single'
354+
return False
356355

357356
def relations_that(self, relationship):
358357
"""Return the related-document objects that describe a given relationship targeting self."""
@@ -554,20 +553,15 @@ def get_absolute_url(self):
554553
name = self.name
555554
if self.type_id == "draft" and self.get_state_slug() == "rfc":
556555
name = self.canonical_name()
557-
elif self.type_id in ('slides','agenda','minutes','bluesheets','recording'):
556+
elif self.type_id in ('slides','bluesheets','recording'):
558557
session = self.session_set.first()
559558
if session:
560559
meeting = session.meeting
561560
if self.type_id == 'recording':
562561
url = self.external_url
563562
else:
564-
if self.type_id == 'agenda':
565-
url = urlreverse('ietf.meeting.views.session_agenda', kwargs={'num':meeting.number, 'session':session.group.acronym})
566-
elif self.type_id == 'minutes':
567-
url = urlreverse('ietf.meeting.views.session_minutes', kwargs={'num':meeting.number, 'session':session.group.acronym})
568-
else:
569-
filename = self.external_url
570-
url = '%sproceedings/%s/%s/%s' % (settings.IETF_HOST_URL,meeting.number,self.type_id,filename)
563+
filename = self.external_url
564+
url = '%sproceedings/%s/%s/%s' % (settings.IETF_HOST_URL,meeting.number,self.type_id,filename)
571565
return url
572566
return urlreverse('ietf.doc.views_doc.document_main', kwargs={ 'name': name }, urlconf="ietf.urls")
573567

ietf/meeting/tests_views.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def write_materials_files(self, meeting, session):
7272
"This is a slideshow")
7373

7474

75-
def test_agenda(self):
75+
def test_meeting_agenda(self):
7676
meeting = make_meeting_test_data()
7777
session = Session.objects.filter(meeting=meeting, group__acronym="mars").first()
7878
slot = TimeSlot.objects.get(sessionassignments__session=session,sessionassignments__schedule=meeting.agenda)
@@ -171,8 +171,8 @@ def test_agenda(self):
171171
self.assertTrue("BEGIN:VTIMEZONE" in agenda_content)
172172
self.assertTrue("END:VTIMEZONE" in agenda_content)
173173

174-
self.assertTrue(session.agenda().get_absolute_url() in unicontent(r))
175-
self.assertTrue(session.materials.filter(type='slides').exclude(states__type__slug='slides',states__slug='deleted').first().get_absolute_url() in unicontent(r))
174+
self.assertTrue(session.agenda().href() in unicontent(r))
175+
self.assertTrue(session.materials.filter(type='slides').exclude(states__type__slug='slides',states__slug='deleted').first().href() in unicontent(r))
176176
# TODO - the ics view uses .all on a queryset in a view so it's showing the deleted slides.
177177
#self.assertFalse(session.materials.filter(type='slides',states__type__slug='slides',states__slug='deleted').first().get_absolute_url() in unicontent(r))
178178

@@ -183,12 +183,6 @@ 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-
192186
def test_agenda_current_audio(self):
193187
date = datetime.date.today()
194188
meeting = MeetingFactory(type_id='ietf', date=date )
@@ -276,14 +270,14 @@ def do_test_materials(self, meeting, session):
276270
self.write_materials_files(meeting, session)
277271

278272
# session agenda
279-
r = self.client.get(urlreverse("ietf.meeting.views.session_agenda",
280-
kwargs=dict(num=meeting.number, session=session.group.acronym)))
273+
r = self.client.get(urlreverse("ietf.meeting.views.materials_document",
274+
kwargs=dict(num=meeting.number, document=session.agenda())))
281275
self.assertEqual(r.status_code, 200)
282276
self.assertTrue("1. WG status" in unicontent(r))
283277

284278
# session minutes
285-
r = self.client.get(urlreverse("ietf.meeting.views.session_minutes",
286-
kwargs=dict(num=meeting.number, session=session.group.acronym)))
279+
r = self.client.get(urlreverse("ietf.meeting.views.materials_document",
280+
kwargs=dict(num=meeting.number, document=session.minutes())))
287281
self.assertEqual(r.status_code, 200)
288282
self.assertTrue("1. More work items underway" in unicontent(r))
289283

@@ -322,6 +316,12 @@ def do_test_materials(self, meeting, session):
322316
# FIXME: missing tests of .pdf/.tar generation (some code can
323317
# probably be lifted from similar tests in iesg/tests.py)
324318

319+
# document-specific urls
320+
for doc in session.materials.exclude(states__slug='deleted'):
321+
url = urlreverse('ietf.meeting.views.materials_document', kwargs=dict(num=meeting.number, document=doc.name))
322+
r = self.client.get(url)
323+
self.assertEqual(unicontent(r), doc.text())
324+
325325
def test_materials_editable_groups(self):
326326
meeting = make_meeting_test_data()
327327

ietf/meeting/urls.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@
5050
url(r'^agendas.json$', ajax.agenda_infosurl),
5151
url(r'^agenda/(?P<session>[A-Za-z0-9-]+)-drafts.pdf$', views.session_draft_pdf),
5252
url(r'^agenda/(?P<session>[A-Za-z0-9-]+)-drafts.tgz$', views.session_draft_tarfile),
53-
url(r'^agenda/(?P<session>[A-Za-z0-9-]+)/?$', views.session_agenda),
54-
url(r'^minutes/(?P<session>[A-Za-z0-9-]+)/?$', views.session_minutes),
5553
url(r'^sessions.json', ajax.sessions_json),
5654
url(r'^session/(?P<sessionid>\d+).json', ajax.session_json),
5755
url(r'^session/(?P<sessionid>\d+)/constraints.json', ajax.session_constraints),
@@ -63,8 +61,7 @@
6361
type_interim_patterns = [
6462
url(r'^agenda/(?P<session>[A-Za-z0-9-]+)-drafts.pdf$', views.session_draft_pdf),
6563
url(r'^agenda/(?P<session>[A-Za-z0-9-]+)-drafts.tgz$', views.session_draft_tarfile),
66-
url(r'^agenda/(?P<session>[A-Za-z0-9-]+)/?$', views.session_agenda),
67-
url(r'^minutes/(?P<session>[A-Za-z0-9-]+)/?$', views.session_minutes),
64+
url(r'^materials/%(document)s$' % settings.URL_REGEXPS, views.materials_document),
6865
]
6966

7067
type_ietf_only_patterns_id_optional = [

ietf/meeting/views.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
from ietf.secr.proceedings.utils import handle_upload_file
6161
from ietf.secr.proceedings.proc_utils import (get_progress_stats, post_process, import_audio_files,
6262
import_youtube_video_urls)
63+
from ietf.utils import log
6364
from ietf.utils.mail import send_mail_message
6465
from ietf.utils.pipe import pipe
6566
from ietf.utils.pdf import pdf_pages
@@ -160,11 +161,7 @@ def current_materials(request):
160161
def materials_document(request, document, num=None, ):
161162
if num is None:
162163
num = get_meeting(num).number
163-
if re.search('-[0-9][0-9]$', document):
164-
name = document[:-3]
165-
else:
166-
name = document
167-
doc = get_object_or_404(Document, name=name)
164+
doc = get_object_or_404(Document, name=document)
168165
if not doc.meeting_related():
169166
raise Http404("Not a meeting related document")
170167
if not doc.session_set.filter(meeting__number=num).exists():
@@ -625,6 +622,7 @@ def agenda_by_type_ics(request,num=None,type=None):
625622
return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":assignments},content_type="text/calendar")
626623

627624
def session_document(request, num, acronym, type="agenda"):
625+
log.unreachable("2017-07-22")
628626
d = Document.objects.filter(type=type, session__meeting__number=num)
629627
if acronym == "plenaryt":
630628
d = d.filter(session__name__icontains="technical", session__slots__type="plenary")
@@ -665,9 +663,11 @@ def session_document(request, num, acronym, type="agenda"):
665663
raise Http404("No %s for the %s session of IETF %s is available" % (type, acronym, num))
666664

667665
def session_agenda(request, num, session):
666+
log.unreachable("2017-07-22")
668667
return session_document(request, num, acronym=session, type='agenda')
669668

670669
def session_minutes(request, num, session):
670+
log.unreachable("2017-07-22")
671671
return session_document(request, num, acronym=session, type='minutes')
672672

673673
def session_draft_list(num, session):
@@ -1522,7 +1522,7 @@ def upload_session_slides(request, session_id, num, name):
15221522
name += '-%s' % (session.docname_token(),)
15231523
else:
15241524
name = 'slides-%s-%s' % (session.meeting.number, session.docname_token())
1525-
name = name + '-' + slugify(title)
1525+
name = name + '-' + slugify(title).replace('_', '-')
15261526
if Document.objects.filter(name=name).exists():
15271527
doc = Document.objects.get(name=name)
15281528
doc.rev = '%02d' % (int(doc.rev)+1)

ietf/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +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
546+
"document": r"(?P<document>[a-z][-a-z0-9_]+)", # regular document names
547547
"rev": r"(?P<rev>[0-9]{1,2}(-[0-9]{2})?)",
548548
"owner": r"(?P<owner>[-A-Za-z0-9\'+._]+@[A-Za-z0-9-._]+)",
549549
"schedule_name": r"(?P<name>[A-Za-z0-9-:_]+)",

ietf/templates/meeting/agenda.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ <h2>
226226
<span class="hidden-xs">
227227
{% if item.timeslot.type.slug == 'other' %}
228228
{% for slide in item.session.slides %}
229-
<a href="{{slide.get_absolute_url}}">{{ slide.title|clean_whitespace }}</a>
229+
<a href="{{slide.href}}">{{ slide.title|clean_whitespace }}</a>
230230
<br>
231231
{% endfor %}
232232
{% endif %}

ietf/templates/meeting/agenda.ics

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ CLASS:PUBLIC
1111
DTSTART{% if schedule.meeting.time_zone %};TZID="{{schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.time|date:"Ymd" }}T{{item.timeslot.time|date:"Hi"}}00
1212
DTEND{% if schedule.meeting.time_zone %};TZID="{{schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.end_time|date:"Ymd" }}T{{item.timeslot.end_time|date:"Hi"}}00
1313
DTSTAMP:{{ item.timeslot.modified|date:"Ymd" }}T{{ item.timeslot.modified|date:"His" }}Z
14-
{% if item.session.agenda %}URL:{{item.session.agenda.get_absolute_url}}
14+
{% if item.session.agenda %}URL:{{item.session.agenda.href}}
1515
DESCRIPTION:{{item.timeslot.name|ics_esc}}\n{% if item.session.agenda_note %}
1616
Note: {{item.session.agenda_note|ics_esc}}\n{% endif %}{% for material in item.session.materials.all %}
1717
\n{{material.type}}{% if material.type.name != "Agenda" %}
1818
({{material.title|ics_esc}}){% endif %}:
19-
{{material.get_absolute_url}}\n{% endfor %}
19+
{{material.href}}\n{% endfor %}
2020
{% endif %}END:VEVENT
2121
{% endif %}{% endfor %}END:VCALENDAR{% endautoescape %}

ietf/templates/meeting/room-view.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
{% for ss in assignments %}
2525
if (room_names.indexOf("{{ss.timeslot.get_hidden_location}}") >= 0 )
2626
{
27-
items.push({room_index:room_names.indexOf("{{ss.timeslot.get_hidden_location}}"),day:{{ss.day}}, delta_from_beginning:{{ss.delta_from_beginning}},time:"{{ss.timeslot.time|date:"Hi"}}-{{ss.timeslot.end_time|date:"Hi"}}", verbose_time:"{{ss.timeslot.time|date:"D M d Hi"}}-{{ss.timeslot.end_time|date:"Hi"}}",duration:{{ss.timeslot.duration.total_seconds}}, type:"{{ss.timeslot.type}}", {% if ss.session.name %}name:"{{ss.session.name|escapejs}}",{% if ss.session.group.acronym %} wg:"{{ss.session.group.acronym}}",{%endif%}{% else %}{% if ss.timeslot.type.name == "Break" %}name:"{{ss.timeslot.name|escapejs}}", area:"break", wg:"break",{% elif ss.timeslot.type.slug == "unavail" %}name:"Unavailable",{% else %}name:"{{ss.session.group.name|escapejs}}{%if ss.session.group.state.name == "BOF"%} BOF{%endif%}",wg:"{{ss.session.group.acronym}}",state:"{{ss.session.group.state}}",area:"{{ss.session.group.parent.acronym}}",{% endif %}{% endif %} dayname:"{{ ss.timeslot.time|date:"l"|upper }}, {{ ss.timeslot.time|date:"F j, Y" }}"{% if ss.session.agenda %}, agenda:"{{ss.session.agenda.get_absolute_url}}"{% endif %} });
27+
items.push({room_index:room_names.indexOf("{{ss.timeslot.get_hidden_location}}"),day:{{ss.day}}, delta_from_beginning:{{ss.delta_from_beginning}},time:"{{ss.timeslot.time|date:"Hi"}}-{{ss.timeslot.end_time|date:"Hi"}}", verbose_time:"{{ss.timeslot.time|date:"D M d Hi"}}-{{ss.timeslot.end_time|date:"Hi"}}",duration:{{ss.timeslot.duration.total_seconds}}, type:"{{ss.timeslot.type}}", {% if ss.session.name %}name:"{{ss.session.name|escapejs}}",{% if ss.session.group.acronym %} wg:"{{ss.session.group.acronym}}",{%endif%}{% else %}{% if ss.timeslot.type.name == "Break" %}name:"{{ss.timeslot.name|escapejs}}", area:"break", wg:"break",{% elif ss.timeslot.type.slug == "unavail" %}name:"Unavailable",{% else %}name:"{{ss.session.group.name|escapejs}}{%if ss.session.group.state.name == "BOF"%} BOF{%endif%}",wg:"{{ss.session.group.acronym}}",state:"{{ss.session.group.state}}",area:"{{ss.session.group.parent.acronym}}",{% endif %}{% endif %} dayname:"{{ ss.timeslot.time|date:"l"|upper }}, {{ ss.timeslot.time|date:"F j, Y" }}"{% if ss.session.agenda %}, agenda:"{{ss.session.agenda.href}}"{% endif %} });
2828
}
2929
{% endfor %}
3030
{% endautoescape %}

ietf/templates/meeting/upcoming.ics

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ CLASS:PUBLIC
1111
DTSTART{% if item.schedule.meeting.time_zone %};TZID="{{item.schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.time|date:"Ymd" }}T{{item.timeslot.time|date:"Hi"}}00
1212
DTEND{% if item.schedule.meeting.time_zone %};TZID="{{item.schedule.meeting.time_zone}}"{%endif%}:{{ item.timeslot.end_time|date:"Ymd" }}T{{item.timeslot.end_time|date:"Hi"}}00
1313
DTSTAMP:{{ item.timeslot.modified|date:"Ymd" }}T{{ item.timeslot.modified|date:"His" }}Z
14-
{% if item.session.agenda %}URL:{{item.session.agenda.get_absolute_url}}
14+
{% if item.session.agenda %}URL:{{item.session.agenda.href}}
1515
DESCRIPTION:{{item.timeslot.name|ics_esc}}\n{% if item.session.agenda_note %}
1616
Note: {{item.session.agenda_note|ics_esc}}\n{% endif %}{% for material in item.session.materials.all %}
1717
\n{{material.type}}{% if material.type.name != "Agenda" %}
1818
({{material.title|ics_esc}}){% endif %}:
19-
{{material.get_absolute_url}}\n{% endfor %}
19+
{{material.href}}\n{% endfor %}
2020
{% endif %}END:VEVENT
2121
{% endfor %}END:VCALENDAR{% endautoescape %}

0 commit comments

Comments
 (0)