Skip to content

Commit 16ae35a

Browse files
committed
Rewrote html and text agenda templates to take schedule as data.
- Legacy-Id: 6495
1 parent da8c38f commit 16ae35a

5 files changed

Lines changed: 130 additions & 85 deletions

File tree

ietf/meeting/models.py

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import pytz, datetime
44
from urlparse import urljoin
55
import copy
6+
import os
7+
68
import debug
79

810
from django.db import models
@@ -463,6 +465,11 @@ def __unicode__(self):
463465
def base_url(self):
464466
return "/meeting/%s/agenda/%s" % (self.meeting.number, self.name)
465467

468+
# temporary property to pacify the places where Schedule.scheduledsession_set is used
469+
@property
470+
def scheduledsession_set(self):
471+
return self.assignments
472+
466473
# def url_edit(self):
467474
# return "/meeting/%s/agenda/%s/edit" % (self.meeting.number, self.name)
468475
#
@@ -584,6 +591,15 @@ def calc_badness1(self, assignments):
584591
self.badness = badness
585592
return badness
586593

594+
def area_list(self):
595+
return ( self.assignments.filter(session__group__type__slug__in=['wg', 'rg', 'ag'],
596+
session__group__parent__isnull=False)
597+
.order_by('session__group__parent__acronym')
598+
.values_list('session__group__parent__acronym', flat=True)
599+
.distinct() )
600+
601+
def groups(self):
602+
return Group.objects.filter(type__slug__in=['wg', 'rg', 'ag'], session__scheduledsession__schedule=self).distinct().order_by('parent__acronym', 'acronym')
587603

588604
class ScheduledSession(models.Model):
589605
"""
@@ -593,13 +609,16 @@ class ScheduledSession(models.Model):
593609
"""
594610
timeslot = models.ForeignKey('TimeSlot', null=False, blank=False, help_text=u"")
595611
session = models.ForeignKey('Session', null=True, default=None, help_text=u"Scheduled session")
596-
schedule = models.ForeignKey('Schedule', null=False, blank=False, help_text=u"Who made this agenda")
612+
schedule = models.ForeignKey('Schedule', null=False, blank=False, related_name='assignments')
597613
extendedfrom = models.ForeignKey('ScheduledSession', null=True, default=None, help_text=u"Timeslot this session is an extension of")
598614
modified = models.DateTimeField(default=datetime.datetime.now)
599615
notes = models.TextField(blank=True)
600616
badness = models.IntegerField(default=0, blank=True, null=True)
601617
pinned = models.BooleanField(default=False, help_text="Do not move session during automatic placement")
602618

619+
class Meta:
620+
ordering = ["timeslot__time", "session__group__parent__name", "session__group__acronym", "session__name", ]
621+
603622
# use to distinguish this from FakeScheduledSession in placement.py
604623
faked = "real"
605624

@@ -724,7 +743,6 @@ def json_dict(self, selfurl):
724743
ss["pinned"] = self.pinned
725744
return ss
726745

727-
728746
class Constraint(models.Model):
729747
"""
730748
Specifies a constraint on the scheduling.
@@ -1142,3 +1160,20 @@ def badness_fast(self, timeslot, scheduleslot, session_pk_list):
11421160
self.badness_log(1, "badgroup: %s badness = %u\n" % (self.group.acronym, badness))
11431161
return badness
11441162

1163+
def agenda_text(self):
1164+
doc = self.agenda()
1165+
if doc:
1166+
path = os.path.join(settings.AGENDA_PATH, self.meeting.number, "agenda", doc.external_url)
1167+
if os.path.exists(path):
1168+
with open(path) as f:
1169+
return f.read()
1170+
else:
1171+
"No agenda file found"
1172+
else:
1173+
return "The agenda has not been uploaded yet."
1174+
1175+
def type(self):
1176+
if self.group.type.slug in [ "wg" ]:
1177+
return "BOF" if self.group.state.slug in ["bof", "bof-conc"] else "WG"
1178+
else:
1179+
return ""

ietf/meeting/urls.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77

88
urlpatterns = patterns('',
99
(r'^(?P<meeting_num>\d+)/materials.html$', views.materials),
10-
(r'^agenda/$', views.agenda_html_request),
10+
(r'^agenda/$', views.agenda),
1111
(r'^agenda-utc(?:.html)?$', views.html_agenda_utc),
12-
(r'^agenda(?:.html)?$', views.agenda_html_request),
12+
(r'^agenda(?:.html)?$', views.agenda),
1313
(r'^agenda/edit$', views.edit_agenda),
1414
(r'^requests.html$', redirect_to, {"url": '/meeting/requests', "permanent": True}),
1515
(r'^requests$', views.meeting_requests),
16-
(r'^agenda.txt$', views.text_agenda),
16+
(r'^agenda(?P<ext>.txt)$', views.agenda),
1717
(r'^agenda/agenda.ics$', views.ical_agenda),
1818
(r'^agenda.ics$', views.ical_agenda),
1919
(r'^agenda.csv$', views.csv_agenda),
@@ -22,12 +22,12 @@
2222
(r'^(?P<num>\d+)/schedule/edit$', views.edit_agenda),
2323
(r'^(?P<num>\d+)/schedule/(?P<schedule_name>[A-Za-z0-9-:_]+)/edit$', views.edit_agenda),
2424
(r'^(?P<num>\d+)/schedule/(?P<schedule_name>[A-Za-z0-9-:_]+)/details$', views.edit_agenda_properties),
25-
(r'^(?P<num>\d+)/schedule/(?P<schedule_name>[A-Za-z0-9-:_]+)(?:.html)?/?$', views.agenda_html_request),
26-
(r'^(?P<num>\d+)/agenda(?:.html)?/?$', views.agenda_html_request),
25+
(r'^(?P<num>\d+)/schedule/(?P<name>[A-Za-z0-9-:_]+)(?P<ext>.html)?/?$', views.agenda),
26+
(r'^(?P<num>\d+)/agenda(?P<ext>.html)?/?$', views.agenda),
2727
(r'^(?P<num>\d+)/agenda-utc(?:.html)?/?$', views.html_agenda_utc),
2828
(r'^(?P<num>\d+)/requests.html$', redirect_to, {"url": '/meeting/%(num)s/requests', "permanent": True}),
2929
(r'^(?P<num>\d+)/requests$', views.meeting_requests),
30-
(r'^(?P<num>\d+)/agenda.txt$', views.text_agenda),
30+
(r'^(?P<num>\d+)/agenda(?P<ext>.txt)$', views.agenda),
3131
(r'^(?P<num>\d+)/agenda.ics$', views.ical_agenda),
3232
(r'^(?P<num>\d+)/agenda.csv$', views.csv_agenda),
3333
(r'^(?P<num>\d+)/agendas/edit$', views.edit_agendas),

ietf/meeting/views.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -432,15 +432,13 @@ def iphone_agenda(request, num, name):
432432
"wg_list" : wgs, "rg_list" : rgs, "area_list" : areas},
433433
context_instance=RequestContext(request))
434434

435-
436-
def text_agenda(request, num=None, name=None):
437-
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
438-
plenaryw_agenda = " "+plenaryw_agenda.strip().replace("\n", "\n ")
439-
plenaryt_agenda = " "+plenaryt_agenda.strip().replace("\n", "\n ")
440-
return HttpResponse(render_to_string("meeting/agenda.txt",
441-
{"timeslots":timeslots, "update":update, "meeting":meeting, "venue":venue, "ads":ads,
442-
"plenaryw_agenda":plenaryw_agenda, "plenaryt_agenda":plenaryt_agenda, },
443-
RequestContext(request)), mimetype="text/plain")
435+
def agenda(request, num=None, name=None, ext=".html"):
436+
mimetype = {".html":"text/html", ".txt": "text/plain", ".ics":"text/calendar", ".csv":"text/csv"}
437+
meeting = get_meeting(num)
438+
schedule = get_schedule(meeting, name)
439+
updated = Switches().from_object(meeting).updated()
440+
return HttpResponse(render_to_string("meeting/agenda"+ext,
441+
{"schedule":schedule, "updated": updated}, RequestContext(request)), mimetype=mimetype[ext])
444442

445443
def read_agenda_file(num, doc):
446444
# XXXX FIXME: the path fragment in the code below should be moved to

0 commit comments

Comments
 (0)