From d8413d5d28f0d4752dc11f574a1c25363579919b Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Sat, 19 Dec 2015 01:52:13 +0000 Subject: [PATCH] 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 --- ietf/meeting/helpers.py | 9 --------- ietf/meeting/models.py | 9 +++++++++ ietf/meeting/resources.py | 3 ++- ietf/meeting/views.py | 8 ++++---- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index bf9708fd6..7e31d7e53 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -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( diff --git a/ietf/meeting/models.py b/ietf/meeting/models.py index 0629d9155..5d8ac477a 100644 --- a/ietf/meeting/models.py +++ b/ietf/meeting/models.py @@ -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", ] diff --git a/ietf/meeting/resources.py b/ietf/meeting/resources.py index 96150d69e..423a5bb70 100644 --- a/ietf/meeting/resources.py +++ b/ietf/meeting/resources.py @@ -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() diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 528402809..00cced523 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -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