Changed a helper function meeting_updated() to a method on Meeting, and provided it as a synthetic attribute on the /api/v1/meeting/meeting/ endpoints of the JSON API.

- Legacy-Id: 10611
This commit is contained in:
Henrik Levkowetz 2015-12-19 01:52:13 +00:00
parent d1e245f042
commit d8413d5d28
4 changed files with 15 additions and 14 deletions

View file

@ -1,7 +1,6 @@
# Copyright The IETF Trust 2007, All Rights Reserved
import datetime
import pytz
import os
import re
from tempfile import mkstemp
@ -148,14 +147,6 @@ def get_schedule_by_name(meeting, owner, name):
else:
return meeting.schedule_set.filter(name = name).first()
def meeting_updated(meeting):
meeting_time = datetime.datetime(*(meeting.date.timetuple()[:7]))
ts = max(meeting.timeslot_set.aggregate(Max('modified'))["modified__max"] or meeting_time,
meeting.session_set.aggregate(Max('modified'))["modified__max"] or meeting_time)
tz = pytz.timezone(settings.PRODUCTION_TIMEZONE)
ts = tz.localize(ts)
return ts
def preprocess_assignments_for_agenda(assignments_queryset, meeting):
# prefetch some stuff to prevent a myriad of small, inefficient queries
assignments_queryset = assignments_queryset.select_related(

View file

@ -13,6 +13,7 @@ from timedeltafield import TimedeltaField
import debug # pyflakes:ignore
from django.db import models
from django.db.models import Max
from django.conf import settings
# mostly used by json_dict()
#from django.template.defaultfilters import slugify, date as date_format, time as time_format
@ -264,6 +265,14 @@ class Meeting(models.Model):
self.agenda = agenda
self.save()
def updated(self):
meeting_time = datetime.datetime(*(self.date.timetuple()[:7]))
ts = max(self.timeslot_set.aggregate(Max('modified'))["modified__max"] or meeting_time,
self.session_set.aggregate(Max('modified'))["modified__max"] or meeting_time)
tz = pytz.timezone(settings.PRODUCTION_TIMEZONE)
ts = tz.localize(ts)
return ts
class Meta:
ordering = ["-date", ]

View file

@ -1,6 +1,6 @@
# Autogenerated by the mkresources management command 2014-11-13 23:15
from tastypie.resources import ModelResource
from tastypie.fields import ToOneField, ToManyField
from tastypie.fields import ToOneField, ToManyField, DateTimeField
from tastypie.constants import ALL, ALL_WITH_RELATIONS
from ietf import api
@ -12,6 +12,7 @@ from ietf.name.resources import MeetingTypeNameResource
class MeetingResource(ModelResource):
type = ToOneField(MeetingTypeNameResource, 'type')
agenda = ToOneField('ietf.meeting.resources.ScheduleResource', 'agenda', null=True)
updated = DateTimeField(attribute='updated')
class Meta:
queryset = Meeting.objects.all()
serializer = api.Serializer()

View file

@ -32,7 +32,7 @@ from ietf.meeting.helpers import build_all_agenda_slices, get_wg_name_list
from ietf.meeting.helpers import get_all_assignments_from_schedule
from ietf.meeting.helpers import get_modified_from_assignments
from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting
from ietf.meeting.helpers import get_meeting, get_schedule, agenda_permissions, meeting_updated, get_meetings
from ietf.meeting.helpers import get_meeting, get_schedule, agenda_permissions, get_meetings
from ietf.meeting.helpers import preprocess_assignments_for_agenda, read_agenda_file
from ietf.meeting.helpers import convert_draft_to_pdf
from ietf.utils.pipe import pipe
@ -380,7 +380,7 @@ def agenda(request, num=None, name=None, base=None, ext=None):
base = base.replace("-utc", "")
return render(request, "meeting/no-"+base+ext, {'meeting':meeting }, content_type=mimetype[ext])
updated = meeting_updated(meeting)
updated = meeting.updated()
filtered_assignments = schedule.assignments.exclude(timeslot__type__in=['lead','offagenda'])
filtered_assignments = preprocess_assignments_for_agenda(filtered_assignments, meeting)
@ -528,7 +528,7 @@ def agenda_by_type_ics(request,num=None,type=None):
assignments = schedule.assignments.order_by('session__type__slug','timeslot__time')
if type:
assignments = assignments.filter(session__type__slug=type)
updated = meeting_updated(meeting)
updated = meeting.updated()
return render(request,"meeting/agenda.ics",{"schedule":schedule,"updated":updated,"assignments":assignments},content_type="text/calendar")
def session_agenda(request, num, session):
@ -771,7 +771,7 @@ def room_view(request, num=None):
def ical_agenda(request, num=None, name=None, ext=None):
meeting = get_meeting(num)
schedule = get_schedule(meeting, name)
updated = meeting_updated(meeting)
updated = meeting.updated()
if schedule is None:
raise Http404