Rewrote the view and template code for the meeting materials list, which was showing nothing. Better to do the rewrite for the new models than trying to dig into why the proxy models doesn't work any more.

- Legacy-Id: 4622
This commit is contained in:
Henrik Levkowetz 2012-07-20 11:33:15 +00:00
parent 356552dac9
commit 9ff6d889aa
4 changed files with 87 additions and 107 deletions

View file

@ -166,9 +166,21 @@ class Session(models.Model):
def agenda(self): def agenda(self):
try: try:
return self.materials.get(type="agenda",states__type="agenda",states__slug="active") return self.materials.get(type="agenda",states__type="agenda",states__slug="active")
except Exception, e: except Exception:
return None return None
def minutes(self):
try:
return self.materials.get(type="minutes",states__type="minutes",states__slug="active")
except Exception:
return None
def slides(self):
try:
return self.materials.filter(type="slides",states__type="slides",states__slug="active")
except Exception:
return []
def __unicode__(self): def __unicode__(self):
if self.meeting.type_id == "interim": if self.meeting.type_id == "interim":
return self.meeting.number return self.meeting.number

View file

@ -5,13 +5,11 @@ import datetime
import os import os
import re import re
import tarfile import tarfile
import pytz
from tempfile import mkstemp from tempfile import mkstemp
from django.shortcuts import render_to_response, get_object_or_404 from django.shortcuts import render_to_response, get_object_or_404
from ietf.idtracker.models import IETFWG, IRTF, Area from ietf.idtracker.models import IETFWG, IRTF, Area
from django.views.generic.list_detail import object_list
from django.http import HttpResponseRedirect, HttpResponse, Http404 from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q from django.db.models import Q
@ -20,20 +18,19 @@ from django.template.loader import render_to_string
from django.conf import settings from django.conf import settings
from django.utils.decorators import decorator_from_middleware from django.utils.decorators import decorator_from_middleware
from django.middleware.gzip import GZipMiddleware from django.middleware.gzip import GZipMiddleware
from django.db.models import Count, Max from django.db.models import Max
from ietf.idtracker.models import InternetDraft
from ietf.idrfc.idrfc_wrapper import IdWrapper
from ietf.utils.pipe import pipe
from ietf.idtracker.models import InternetDraft
from ietf.utils.pipe import pipe
from ietf.utils.history import find_history_active_at from ietf.utils.history import find_history_active_at
from ietf.doc.models import Document, State from ietf.doc.models import Document, State
# Old model -- needs to be removed # Old model -- needs to be removed
from ietf.proceedings.models import Meeting as OldMeeting, MeetingTime, WgMeetingSession, MeetingVenue, IESGHistory, Proceeding, Switches, WgProceedingsActivities, SessionConflict from ietf.proceedings.models import Meeting as OldMeeting, MeetingTime, WgMeetingSession, MeetingVenue, IESGHistory, Proceeding, Switches
# New models # New models
from ietf.meeting.models import Meeting, Room, TimeSlot, Constraint, Session from ietf.meeting.models import Meeting, TimeSlot, Session
from ietf.group.models import Group, GroupManager from ietf.group.models import Group
@decorator_from_middleware(GZipMiddleware) @decorator_from_middleware(GZipMiddleware)
@ -50,49 +47,20 @@ def show_html_materials(request, meeting_num=None):
sub_began = 0 sub_began = 0
if now > begin_date: if now > begin_date:
sub_began = 1 sub_began = 1
# List of WG sessions and Plenary sessions sessions = Session.objects.filter(meeting__number=meeting_num, timeslot__isnull=False)
if settings.USE_DB_REDESIGN_PROXY_CLASSES: plenaries = sessions.filter(name__icontains='plenary')
seen_materials = set() ietf = sessions.filter(group__parent__type__slug = 'area').exclude(group__acronym='edu')
irtf = sessions.filter(group__parent__acronym = 'irtf')
training = sessions.filter(group__acronym='edu')
queryset_list = [] cache_version = Document.objects.filter(session__meeting__number=meeting_num).aggregate(Max('time'))["time__max"]
queryset_irtf = [] #
queryset_interim = [] # currently ignored, have no way of handling interim here
queryset_training = []
for item in WgMeetingSession.objects.filter(meeting=meeting_num):
if not item.session or not item.session.group:
continue
if item.session.group.type_id == "rg":
queryset_irtf.append(item)
elif item.session.group.acronym == "edu":
if item.slides():
queryset_training.append(item)
else:
if item.session.name and not item.slides():
continue
t = tuple(x.pk for x in item.session.materials.all())
if t and t in seen_materials:
continue
seen_materials.add(t)
queryset_list.append(item)
from ietf.doc.models import Document
cache_version = Document.objects.filter(session__meeting__number=meeting_num).aggregate(Max('time'))["time__max"]
else:
queryset_list = WgMeetingSession.objects.filter(Q(meeting=meeting_num, group_acronym_id__gte = -2, status__id=4), Q(irtf__isnull=True) | Q(irtf=0))
queryset_irtf = WgMeetingSession.objects.filter(meeting=meeting_num, group_acronym_id__gte = -2, status__id=4, irtf__gt=0)
queryset_interim = []
queryset_training = []
for item in list(WgMeetingSession.objects.filter(meeting=meeting_num)):
if item.interim_meeting():
item.interim=1
queryset_interim.append(item)
if item.group_acronym_id < -2:
if item.slides():
queryset_training.append(item)
cache_version = WgProceedingsActivities.objects.aggregate(Count('id'))
return render_to_response("meeting/list.html", return render_to_response("meeting/list.html",
{'meeting_num':meeting_num,'object_list': queryset_list, 'irtf_list':queryset_irtf, 'interim_list':queryset_interim, 'training_list':queryset_training, 'begin_date':begin_date, 'cut_off_date':cut_off_date, 'cor_cut_off_date':cor_cut_off_date,'sub_began':sub_began,'cache_version':cache_version}, {'meeting_num':meeting_num,
'plenaries': plenaries, 'ietf':ietf, 'training':training, 'irtf': irtf,
'begin_date':begin_date, 'cut_off_date':cut_off_date,
'cor_cut_off_date':cor_cut_off_date,'sub_began':sub_began,
'cache_version':cache_version},
context_instance=RequestContext(request)) context_instance=RequestContext(request))
def current_materials(request): def current_materials(request):
@ -185,7 +153,7 @@ def agenda_infoREDESIGN(num=None):
except IOError: except IOError:
s = "THE AGENDA HAS NOT BEEN UPLOADED YET" s = "THE AGENDA HAS NOT BEEN UPLOADED YET"
if "technical" in agenda.name.lower(): if "tech" in agenda.name.lower():
plenaryt_agenda = s plenaryt_agenda = s
else: else:
plenaryw_agenda = s plenaryw_agenda = s
@ -278,13 +246,12 @@ def session_agenda(request, num, session):
raise Http404("No agenda for the %s session of IETF %s is available" % (session, num)) raise Http404("No agenda for the %s session of IETF %s is available" % (session, num))
def convert_to_pdf(doc_name): def convert_to_pdf(doc_name):
import subprocess
inpath = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, doc_name + ".txt") inpath = os.path.join(settings.IDSUBMIT_REPOSITORY_PATH, doc_name + ".txt")
outpath = os.path.join(settings.INTERNET_DRAFT_PDF_PATH, doc_name + ".pdf") outpath = os.path.join(settings.INTERNET_DRAFT_PDF_PATH, doc_name + ".pdf")
try: try:
infile = open(inpath, "r") infile = open(inpath, "r")
except Exception, e: except IOError:
return return
t,tempname = mkstemp() t,tempname = mkstemp()
@ -336,7 +303,7 @@ def read_agenda_file(num, doc):
return None return None
def session_draft_list(num, session): def session_draft_list(num, session):
extensions = ["html", "htm", "txt", "HTML", "HTM", "TXT", ] #extensions = ["html", "htm", "txt", "HTML", "HTM", "TXT", ]
result = [] result = []
found = False found = False
@ -357,7 +324,7 @@ def session_draft_list(num, session):
doc_name = draft doc_name = draft
else: else:
id = InternetDraft.objects.get(filename=draft) id = InternetDraft.objects.get(filename=draft)
doc = IdWrapper(id) #doc = IdWrapper(id)
doc_name = draft + "-" + id.revision doc_name = draft + "-" + id.revision
result.append(doc_name) result.append(doc_name)
except InternetDraft.DoesNotExist: except InternetDraft.DoesNotExist:
@ -398,7 +365,7 @@ def session_draft_tarfile(request, num, session):
def pdf_pages(file): def pdf_pages(file):
try: try:
infile = open(file, "r") infile = open(file, "r")
except Exception, e: except IOError:
return 0 return 0
for line in infile: for line in infile:
m = re.match('\] /Count ([0-9]+)',line) m = re.match('\] /Count ([0-9]+)',line)
@ -491,9 +458,9 @@ def ical_agenda(request, num=None):
def csv_agenda(request, num=None): def csv_agenda(request, num=None):
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num) timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE).order_by('group_acronym__acronym') #wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE).order_by('group_acronym__acronym')
rgs = IRTF.objects.all().order_by('acronym') #rgs = IRTF.objects.all().order_by('acronym')
areas = Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym') #areas = Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym')
# we should really use the Python csv module or something similar # we should really use the Python csv module or something similar
# rather than a template file which is one big mess # rather than a template file which is one big mess

View file

@ -21,50 +21,41 @@ Corrections to submissions cutoff date: {{ cor_cut_off_date|date:"F j, Y" }}</p>
{% load cache %} {% load cache %}
{% cache 900 ietf_meeting_materials meeting_num cache_version %} {% cache 900 ietf_meeting_materials meeting_num cache_version %}
{% regroup object_list|dictsort:"area" by area_name as areas %} <!-- Plenaries -->
{% for wgs in areas %} {% if plenaries %}
<h2 class="ietf-divider">{{ wgs.grouper }}</h2> <h2 class="ietf-divider">Plenaries</h2>
{% ifequal wgs.grouper "Plenary Sessions" %} {% for session in plenaries %}
{% for wg in wgs.list|dictsortreversed:"acronym" %} {% include "meeting/list_group.html" %}
{% include "meeting/list_group.html" %}
{% endfor %} {% endfor %}
{% else %} {% endif %}
{% for wg in wgs.list|dictsort:"acronym" %}
{% include "meeting/list_group.html" %}
{% endfor %}
{% endifequal %}
{% endfor %}
<!-- Training Sessions -->
{% if training_list %}
<h2 class="ietf-divider">Training</h2>
{% for wg in training_list|dictsort:"acronym" %}
<table cellpadding="0" cellspacing="0" border="0" width="99%" style="border-bottom:1px solid #cbcbcb;"> <!-- Working groups -->
<tr> {% regroup ietf|dictsort:"group.parent.id" by group.parent.name as areas %}
<td style="width:12em;"><a name="wg-{{ wg.acronym }}"></a><b>{{ wg.acronym|upper }}{% ifequal wg.group_type_str "BOF" %} <font color="red">({{ wg.group_type_str }})</font> {% endifequal %}</b><br/> {% for sessions in areas %}
{% for slide in wg.slides %} <h2 class="ietf-divider">{{ sessions.grouper }}</h2>
<a href="http://www.ietf.org/proceedings/{{ slide.file_loc }}">{{ slide.slide_name|clean_whitespace }}</a><br/> {% for session in sessions.list|dictsort:"group.acronym" %}
{% include "meeting/list_group.html" %}
{% endfor %}
{% endfor %} {% endfor %}
</td></tr></table>
{% endfor %} <!-- Training Sessions -->
{% if training %}
<h2 class="ietf-divider">Training</h2>
{% for session in training %}
{% include "meeting/list_group.html" %}
{% endfor %}
{% endif %} {% endif %}
<!-- End of Training Sessions --> <!-- End of Training Sessions -->
<!-- IRTF Sessions --> <!-- IRTF Sessions -->
{% if irtf_list %} {% if irtf %}
<h2 class="ietf-divider">IRTF</h2> <h2 class="ietf-divider">IRTF</h2>
{% for wg in irtf_list|dictsort:"acronym_lower" %} {% for session in irtf|dictsort:"group.acronym" %}
{% include "meeting/list_group.html" %} {% include "meeting/list_group.html" %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
<!-- End of IRTF Sessions --> <!-- End of IRTF Sessions -->
<!-- Interim Meetings -->
{% if interim_list %}
<h2 class="ietf-divider">Interim Meetings</h2>
{% for wg in interim_list|dictsort:"acronym" %}
{% include "meeting/list_group.html" %}
{% endfor %}
{% endif %}
<!-- End of Imterim Meetings -->
{% endcache %} {% endcache %}

View file

@ -1,14 +1,24 @@
{% load ietf_filters %}<table class="ietf-materials"> {% load ietf_filters %}
<tr> <table class="ietf-materials">
<td style="width:12em;"><a name="wg-{{ wg.acronym }}"></a><b>{% ifequal wg.acronym "plenaryw" %}Operations and Administration<br/>Plenary{%else%}{% ifequal wg.acronym "plenaryt" %}Technical<br/>Plenary{%else%}{{ wg.acronym|upper }}{%endifequal%}{%endifequal%} <tr>
{% ifequal wg.group_type_str "BOF" %} <font color="red">({{ wg.group_type_str }})</font> {% endifequal %}</b><br/> <td style="width:12em;">
</td> <a name="session.group-{{ session.group.acronym }}"></a>
<td> <b>
{% if wg.agenda_file %}<a href="http://www.ietf.org/proceedings/{{ wg.agenda_file }}">Agenda</a>{% else %}<span style="background:#ff8888;padding:0 2px;">No agenda received</span> {% endif %}<br/> {% if session.name %}
{% if wg.minute_file %} <a href="http://www.ietf.org/proceedings/{{ wg.minute_file }}">Minutes</a>{% else %}No minutes received{% endif %}<br/> {{ session.name }}
{% for slide in wg.slides %} {% else %}
<a href="http://www.ietf.org/proceedings/{{ slide.file_loc }}">{{ slide.slide_name|clean_whitespace }}</a><br/> {{session.group.acronym.upper}}
{% endfor %} {% ifequal session.group.state.slug "bof" %} <font color="red">({{ session.group.state.slug }})</font>{% endifequal %}
</td></tr> {% endif %}
</b>
</td>
<td>
{% if session.agenda %}<a href="http://www.ietf.org/proceedings/{{meeting_num}}/{{ session.agenda }}">Agenda</a>{% else %}<span style="background:#ff8888;padding:0 2px;">No agenda received</span> {% endif %}<br/>
{% if session.minutes %}<a href="http://www.ietf.org/proceedings/{{ session.group.minute_file }}">Minutes</a>{% else %}No minutes received{% endif %}<br/>
{% for slide in session.slides %}
<a href="http://www.ietf.org/proceedings/{{meeting_num}}/slides/{{ slide.external_url }}">{{ slide.title|clean_whitespace }}</a><br/>
{% endfor %}
</td>
</tr>
</table> </table>