From 1a6f72071e725128382183a3112a4dd38b95c8af Mon Sep 17 00:00:00 2001 From: Adam Roach Date: Sat, 23 Jul 2011 15:37:09 +0000 Subject: [PATCH] Added csv output format for meeting agenda information, to assist external applications (e.g., Android app, iPhone app) in harvesting and displaying meeting agenda info. - Legacy-Id: 3240 --- ietf/meeting/urls.py | 2 ++ ietf/meeting/views.py | 11 +++++++++++ ietf/settings.py | 2 +- ietf/templates/meeting/agenda.csv | 5 +++++ 4 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 ietf/templates/meeting/agenda.csv diff --git a/ietf/meeting/urls.py b/ietf/meeting/urls.py index b2bbadf86..1d61e3bff 100644 --- a/ietf/meeting/urls.py +++ b/ietf/meeting/urls.py @@ -10,11 +10,13 @@ urlpatterns = patterns('', (r'^agenda.txt$', views.text_agenda), (r'^agenda/agenda.ics$', views.ical_agenda), (r'^agenda.ics$', views.ical_agenda), + (r'^agenda.csv$', views.csv_agenda), (r'^agenda/week-view.html$', views.week_view), (r'^week-view.html$', views.week_view), (r'^(?P\d+)/agenda(?:.html)?/?$', views.html_agenda), (r'^(?P\d+)/agenda.txt$', views.text_agenda), (r'^(?P\d+)/agenda.ics$', views.ical_agenda), + (r'^(?P\d+)/agenda.csv$', views.csv_agenda), (r'^(?P\d+)/week-view.html$', views.week_view), (r'^(?P\d+)/agenda/(?P[A-Za-z0-9-]+)-drafts.pdf$', views.session_draft_pdf), (r'^(?P\d+)/agenda/(?P[A-Za-z0-9-]+)-drafts.tgz$', views.session_draft_tarfile), diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 6067ad746..b66e3a483 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -349,3 +349,14 @@ def ical_agenda(request, num=None): {"filter":set(filter), "timeslots":timeslots, "update":update, "meeting":meeting, "venue":venue, "ads":ads, "plenaryw_agenda":plenaryw_agenda, "plenaryt_agenda":plenaryt_agenda, }, RequestContext(request)), mimetype="text/calendar") + +def csv_agenda(request, num=None): + timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num) + wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE).order_by('group_acronym__acronym') + rgs = IRTF.objects.all().order_by('acronym') + areas = Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym') + + return HttpResponse(render_to_string("meeting/agenda.csv", + {"timeslots":timeslots, "update":update, "meeting":meeting, "venue":venue, "ads":ads, + "plenaryw_agenda":plenaryw_agenda, "plenaryt_agenda":plenaryt_agenda, }, + RequestContext(request)), mimetype="text/csv") diff --git a/ietf/settings.py b/ietf/settings.py index 1db68e555..fec29f3a3 100644 --- a/ietf/settings.py +++ b/ietf/settings.py @@ -155,7 +155,7 @@ IDTRACKER_BASE_URL = "http://datatracker.ietf.org" # Valid values: # 'production', 'test', 'development' # Override this in settings_local.py if it's not true -SERVER_MODE = 'production' +SERVER_MODE = 'development' # The name of the method to use to invoke the test suite TEST_RUNNER = 'ietf.utils.test_runner.run_tests' diff --git a/ietf/templates/meeting/agenda.csv b/ietf/templates/meeting/agenda.csv new file mode 100644 index 000000000..03058617b --- /dev/null +++ b/ietf/templates/meeting/agenda.csv @@ -0,0 +1,5 @@ +{% load humanize %}{% autoescape off %}{% load ietf_filters %}"Date","Start","End","Session","Room","Area","Acronym","Type","Description","Session ID","Agenda","Slides" +{% for slot in timeslots %}{% ifchanged %}{% if slot.reg_info %}"{{ slot.meeting_date|date:"Y-m-d" }}","{{ slot.registration.time_desc|slice:":4" }}","{{ slot.registration.time_desc|slice:"5:9" }}","Registration","{{ venue.reg_area_name }}","","","","{{ slot.registration.name }}","r{{slot.day_id}}","","" +{% endif %}{% endifchanged %}{% if slot.session_name %}{% if slot.break_info %}"{{ slot.meeting_date|date:"Y-m-d" }}","{{ slot.break_info.time_desc|slice:":4" }}","{{ slot.break_info.time_desc|slice:"5:9" }}","Break","{{ venue.break_area_name }}","","","","{{ slot.break_info.name }}","b{{slot.time_id}}","","" +{% endif %}{% endif %}{% for session in slot.sessions_by_area %}"{{ slot.meeting_date|date:"Y-m-d" }}","{{ slot.time_desc|slice:":4" }}","{{ slot.time_desc|slice:"5:9" }}","{{ slot.session_name }}","{{ session.info.room_id.room_name }}","{{ session.info.area|upper }}","{{ session.info.acronym }}","{{ session.info.group_type_str }}","{{ session.info.acronym_name }}","{{session.info.session_id}}-{{session.info.ordinality}}","{% if session.info.agenda_file %}http://datatracker.ietf.org/meeting/{{ session.info.agenda_file }}{% endif %}","{% if session.info.slides %}{% for slide in session.info.slides %}http://www.ietf.org/proceedings/{{ slide.file_loc }}{% if not forloop.last %}|{% endif %}{% endfor %}{% endif %}" +{% endfor %}{% endfor %}{% endautoescape %}