Removing remaining traces of shim layer usage in meeting
- Legacy-Id: 6817
This commit is contained in:
parent
992bf0efea
commit
ad9503f1ed
|
@ -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
|
||||
|
|
|
@ -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."
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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(','))
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 %}
|
||||
|
|
|
@ -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 %}
|
||||
|
|
Loading…
Reference in a new issue