Removing remaining traces of shim layer usage in meeting

- Legacy-Id: 6817
This commit is contained in:
Ole Laursen 2013-12-06 16:10:10 +00:00
parent 992bf0efea
commit ad9503f1ed
7 changed files with 56 additions and 143 deletions

View file

@ -1,26 +1,23 @@
# Copyright The IETF Trust 2007, All Rights Reserved
#import models
import datetime
import os
import pytz
from django.http import Http404
from django.http import HttpRequest
from django.db.models import Max, Q
from django.conf import settings
from django.core.cache import cache
from django.utils.cache import get_cache_key
from django.shortcuts import get_object_or_404
import debug
from django.shortcuts import get_object_or_404
from ietf.ietfauth.utils import has_role
from ietf.utils.history import find_history_active_at
from ietf.doc.models import Document, State
from ietf.proceedings.models import Meeting as OldMeeting, MeetingTime, IESGHistory, Switches
# New models
from ietf.meeting.models import Meeting
from ietf.group.models import Group
@ -37,70 +34,17 @@ def find_ads_for_meeting(meeting):
if history and history != g:
#print " history[%u]: %s" % (num, history)
if history.state_id == "active":
for x in history.rolehistory_set.filter(name="ad").select_related():
for x in history.rolehistory_set.filter(name="ad").select_related('group', 'person', 'email'):
#print "xh[%u]: %s" % (num, x)
ads.append(IESGHistory().from_role(x, meeting_time))
ads.append(x)
else:
#print " group[%u]: %s" % (num, g)
if g.state_id == "active":
for x in g.role_set.filter(name="ad").select_related('group', 'person'):
for x in g.role_set.filter(name="ad").select_related('group', 'person', 'email'):
#print "xg[%u]: %s (#%u)" % (num, x, x.pk)
ads.append(IESGHistory().from_role(x, meeting_time))
ads.append(x)
return ads
def agenda_info(num=None):
try:
if num != None:
meeting = OldMeeting.objects.get(number=num)
else:
meeting = OldMeeting.objects.all().order_by('-date')[:1].get()
except OldMeeting.DoesNotExist:
raise Http404("No meeting information for meeting %s available" % num)
# now go through the timeslots, only keeping those that are
# sessions/plenary/training and don't occur at the same time
timeslots = []
time_seen = set()
for t in MeetingTime.objects.filter(meeting=meeting, type__in=("session", "plenary", "other")).order_by("time").select_related():
if not t.time in time_seen:
time_seen.add(t.time)
timeslots.append(t)
update = Switches().from_object(meeting)
venue = meeting.meeting_venue
ads = []
meeting_time = datetime.datetime.combine(meeting.date, datetime.time(0, 0, 0))
for g in Group.objects.filter(type="area").order_by("acronym"):
history = find_history_active_at(g, meeting_time)
if history and history != g:
if history.state_id == "active":
ads.extend(IESGHistory().from_role(x, meeting_time) for x in history.rolehistory_set.filter(name="ad").select_related())
else:
if g.state_id == "active":
ads.extend(IESGHistory().from_role(x, meeting_time) for x in g.role_set.filter(name="ad").select_related('group', 'person'))
active_agenda = State.objects.get(used=True, type='agenda', slug='active')
plenary_agendas = Document.objects.filter(session__meeting=meeting, session__slots__type="plenary", type="agenda", ).distinct()
plenaryw_agenda = plenaryt_agenda = "The agenda has not been uploaded yet."
for agenda in plenary_agendas:
if active_agenda in agenda.states.all():
# we use external_url at the moment, should probably regularize
# the filenames to match the document name instead
path = os.path.join(settings.AGENDA_PATH, meeting.number, "agenda", agenda.external_url)
try:
f = open(path)
s = f.read()
f.close()
except IOError:
s = "No agenda file found."
if "tech" in agenda.name.lower():
plenaryt_agenda = s
else:
plenaryw_agenda = s
return timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda
# get list of all areas, + IRTF + IETF (plenaries).
def get_pseudo_areas():
@ -169,7 +113,7 @@ def get_wg_list(scheduledsessions):
def get_meeting(num=None):
if (num == None):
if num == None:
meeting = Meeting.objects.filter(type="ietf").order_by("-date")[:1].get()
else:
meeting = get_object_or_404(Meeting, number=num)
@ -189,6 +133,13 @@ def get_schedule_by_id(meeting, schedid):
schedule = get_object_or_404(meeting.schedule_set, id=int(schedid))
return schedule
def meeting_updated(meeting):
ts = max(meeting.timeslot_set.aggregate(Max('modified'))["modified__max"],
meeting.session_set.aggregate(Max('modified'))["modified__max"])
tz = pytz.timezone(settings.PRODUCTION_TIMEZONE)
ts = tz.localize(ts)
return ts
def agenda_permissions(meeting, schedule, user):
# do this in positive logic.
cansee = False

View file

@ -1056,7 +1056,7 @@ class Session(models.Model):
with open(path) as f:
return f.read()
else:
"No agenda file found"
return "No agenda file found"
else:
return "The agenda has not been uploaded yet."

View file

@ -1,5 +1,5 @@
import sys
from django.test import Client
from ietf.meeting.tests.ttest import AgendaTransactionalTestCase
from ietf.utils import TestCase
from ietf.name.models import SessionStatusName
@ -26,30 +26,6 @@ class AgendaInfoTestCase(TestCase):
s1 = m1.session_set.create(name = "newone", group = g1, requested_by = p1, status = st1)
self.assertEqual(s1.__unicode__(), "IETF-83: pkix (unscheduled)[22090]")
def test_AgendaInfo(self):
from ietf.meeting.views import agenda_info
num = '83'
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
# I think that "timeslots" here, is unique times, not actually
# the timeslots array itself.
self.assertEqual(len(timeslots),26)
self.assertEqual(meeting.number,'83')
self.assertEqual(venue.meeting_num, "83")
# will change as more ADs are added to fixtures
self.assertEqual(len(ads), 8)
def test_AgendaInfoReturnsSortedTimeSlots(self):
from ietf.meeting.views import agenda_info
num = '83'
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
for slotnum in range(0,len(timeslots)-1):
# debug
#sys.stdout.write("%d: %s vs %d: %s\n" % (timeslots[slotnum].pk,
# timeslots[slotnum].time,
# timeslots[slotnum+1].pk,
# timeslots[slotnum+1].time))
self.assertTrue(timeslots[slotnum].time < timeslots[slotnum+1].time)
# this tests that a slot at 11:20 AM on Friday, has slot 10 minutes later
# after it
def test_TimeSlot2408_has_SlotToTheRight(self):
@ -68,17 +44,6 @@ class AgendaInfoTestCase(TestCase):
ss2418 = ScheduledSession.objects.get(pk = 2418)
self.assertFalse(ss2418.slot_to_the_right)
def test_AgendaInfoNotFound(self):
from django.http import Http404
from ietf.meeting.views import agenda_info
num = '83b'
try:
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
# fail!!!
self.assertFalse(True)
except Http404:
pass
def test_DoNotGetSchedule(self):
from django.http import Http404
num = '83'

View file

@ -6,12 +6,12 @@ import re
import tarfile
import debug
import urllib
import json
from tempfile import mkstemp
from django import forms
from django.shortcuts import render_to_response, get_object_or_404
from django.utils import simplejson as json
from django.shortcuts import render_to_response, get_object_or_404, redirect
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.core.urlresolvers import reverse
from django.db.models import Q
@ -24,44 +24,40 @@ from django.db.models import Max
from django.forms.models import modelform_factory
from ietf.utils.pipe import pipe
from ietf.doc.models import Document, State
from ietf.idtracker.models import IETFWG, IRTF, Area
from ietf.ietfauth.utils import role_required, has_role
# Old model -- needs to be removed
from ietf.proceedings.models import Meeting as OldMeeting, WgMeetingSession, Proceeding, Switches
# New models
from ietf.doc.models import Document, State
from ietf.person.models import Person
from ietf.meeting.models import TimeSlot, Session, Schedule
from ietf.meeting.models import Meeting, TimeSlot, Session, Schedule
from ietf.group.models import Group
from ietf.meeting.helpers import agenda_info
from ietf.meeting.helpers import get_areas
from ietf.meeting.helpers import build_all_agenda_slices, get_wg_name_list
from ietf.meeting.helpers import get_scheduledsessions_from_schedule, get_all_scheduledsessions_from_schedule
from ietf.meeting.helpers import get_modified_from_scheduledsessions
from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting
from ietf.meeting.helpers import get_meeting, get_schedule, agenda_permissions
from ietf.meeting.helpers import get_meeting, get_schedule, agenda_permissions, meeting_updated
@decorator_from_middleware(GZipMiddleware)
def materials(request, meeting_num=None):
proceeding = get_object_or_404(Proceeding, meeting_num=meeting_num)
begin_date = proceeding.sub_begin_date
cut_off_date = proceeding.sub_cut_off_date
cor_cut_off_date = proceeding.c_sub_cut_off_date
meeting = get_meeting(meeting_num)
begin_date = meeting.get_submission_start_date()
cut_off_date = meeting.get_submission_cut_off_date()
cor_cut_off_date = meeting.get_submission_correction_date()
now = datetime.date.today()
if settings.SERVER_MODE != 'production' and '_testoverride' in request.REQUEST:
pass
elif now > cor_cut_off_date:
return render_to_response("meeting/materials_upload_closed.html",{'meeting_num':meeting_num,'begin_date':begin_date, 'cut_off_date':cut_off_date, 'cor_cut_off_date':cor_cut_off_date}, context_instance=RequestContext(request))
sub_began = 0
if now > begin_date:
sub_began = 1
return render_to_response("meeting/materials_upload_closed.html", {
'meeting_num': meeting_num,
'begin_date': begin_date,
'cut_off_date': cut_off_date,
'cor_cut_off_date': cor_cut_off_date
}, context_instance=RequestContext(request))
#sessions = Session.objects.filter(meeting__number=meeting_num, timeslot__isnull=False)
meeting = get_meeting(meeting_num)
schedule = get_schedule(meeting,None )
sessions = Session.objects.filter(meeting__number=meeting_num,scheduledsession__schedule=schedule )
schedule = get_schedule(meeting, None)
sessions = Session.objects.filter(meeting__number=meeting_num, scheduledsession__schedule=schedule)
plenaries = sessions.filter(name__icontains='plenary')
ietf = sessions.filter(group__parent__type__slug = 'area').exclude(group__acronym='edu')
irtf = sessions.filter(group__parent__acronym = 'irtf')
@ -69,18 +65,21 @@ def materials(request, meeting_num=None):
iab = sessions.filter(group__parent__acronym = 'iab')
cache_version = Document.objects.filter(session__meeting__number=meeting_num).aggregate(Max('time'))["time__max"]
#
return render_to_response("meeting/materials.html",
{'meeting_num':meeting_num,
'plenaries': plenaries, 'ietf':ietf, 'training':training, 'irtf': irtf, 'iab':iab,
'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))
return render_to_response("meeting/materials.html", {
'meeting_num': meeting_num,
'plenaries': plenaries, 'ietf': ietf, 'training': training, 'irtf': irtf, 'iab': iab,
'cut_off_date': cut_off_date,
'cor_cut_off_date': cor_cut_off_date,
'submission_started': now > begin_date,
'cache_version': cache_version,
}, context_instance=RequestContext(request))
def current_materials(request):
meeting = OldMeeting.objects.exclude(number__startswith='interim-').order_by('-meeting_num')[0]
return HttpResponseRedirect( reverse(materials, args=[meeting.meeting_num]) )
meetings = Meeting.objects.exclude(number__startswith='interim-').order_by('-number')
if meetings:
return redirect(materials, meetings[0].number)
else:
raise Http404
def get_user_agent(request):
if settings.SERVER_MODE != 'production' and '_testiphone' in request.REQUEST:
@ -231,9 +230,9 @@ def edit_agenda(request, num=None, schedule_name=None):
saveasurl=reverse(edit_agenda,
args=[meeting.number, schedule.name])
cansee,canedit = agenda_permissions(meeting, schedule, user)
can_see, can_edit = agenda_permissions(meeting, schedule, user)
if not cansee:
if not can_see:
#sys.stdout.write("visible: %s public: %s owner: %s request from: %s\n" % (
# schedule.visible, schedule.public, schedule.owner, requestor))
return HttpResponse(render_to_string("meeting/private_agenda.html",
@ -338,7 +337,7 @@ def agenda(request, num=None, name=None, base=None, ext=None):
mimetype = {".html":"text/html", ".txt": "text/plain", ".ics":"text/calendar", ".csv":"text/csv"}
meeting = get_meeting(num)
schedule = get_schedule(meeting, name)
updated = Switches().from_object(meeting).updated()
updated = meeting_updated(meeting)
return HttpResponse(render_to_string("meeting/"+base+ext,
{"schedule":schedule, "updated": updated}, RequestContext(request)), mimetype=mimetype[ext])
@ -536,7 +535,7 @@ def week_view(request, num=None):
def ical_agenda(request, num=None, name=None, ext=None):
meeting = get_meeting(num)
schedule = get_schedule(meeting, name)
updated = Switches().from_object(meeting).updated()
updated = meeting_updated(meeting)
q = request.META.get('QUERY_STRING','') or ""
filter = set(urllib.unquote(q).lower().split(','))

View file

@ -8,7 +8,6 @@ from django.shortcuts import render_to_response
from ietf.group.models import Group, Role
from ietf.group.utils import get_charter_text
from ietf.meeting.models import Session, TimeSlot, Meeting
from ietf.meeting.views import agenda_info
from ietf.doc.models import Document, RelatedDocument, DocEvent
from itertools import chain
from ietf.secr.proceedings.models import Registration
@ -374,7 +373,6 @@ def gen_acknowledgement(context):
def gen_agenda(context):
meeting = context['meeting']
#timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(meeting.number)
timeslots = TimeSlot.objects.filter(meeting=meeting)
# sort by area:group then time

View file

@ -57,10 +57,10 @@ function setup_slots(){
{% endfor %}
{% for ad in area_directors %}
area_directors["{{ad.area}}"] = [];
area_directors["{{ad.group.acronym}}"] = [];
{% endfor %}
{% for ad in area_directors %}
area_directors["{{ad.area}}"].push(find_person_by_href("{{ad.defurl}}"));
area_directors["{{ad.group.acronym}}"].push(find_person_by_href("{{ad.person.defurl}}"));
{% endfor %}
{% autoescape off %}

View file

@ -10,7 +10,7 @@ table.ietf-materials td { padding:0.5em 0; }
{% block content %}
<h1>IETF {{ meeting_num }} Meeting Materials</h1>
{% if sub_began %}
{% if submission_started %}
<p>Submission cutoff date: {{ cut_off_date|date:"F j, Y" }}<br/>
Corrections to submissions cutoff date: {{ cor_cut_off_date|date:"F j, Y" }}</p>
{% endif %}