From 5dc4931f873ffe5eab4bba90341b97651ef5328f Mon Sep 17 00:00:00 2001 From: Russ Housley Date: Thu, 21 May 2020 14:42:37 +0000 Subject: [PATCH] Add /meeting//agenda pages to the slowpages cache. While I was in the template, I also did a recent ticket. Fixes #2992. - Legacy-Id: 17864 --- ietf/meeting/helpers.py | 13 ++++++++++--- ietf/meeting/views.py | 25 ++++++++++++++++++++++--- ietf/templates/meeting/agenda.html | 7 ++----- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/ietf/meeting/helpers.py b/ietf/meeting/helpers.py index e283f76db..8fb35bf22 100644 --- a/ietf/meeting/helpers.py +++ b/ietf/meeting/helpers.py @@ -129,12 +129,19 @@ def get_meeting(num=None,type_in=['ietf',]): else: raise Http404("No such meeting found: %s" % num) +def get_current_ietf_meeting(): + meetings = Meeting.objects.filter(type='ietf',date__gte=datetime.datetime.today()-datetime.timedelta(days=31)).order_by('date') + return meetings.first() + +def get_current_ietf_meeting_num(): + return get_current_ietf_meeting().number + def get_ietf_meeting(num=None): if num: - meetings = Meeting.objects.filter(number=num) + meeting = Meeting.objects.filter(number=num).first() else: - meetings = Meeting.objects.filter(type='ietf',date__gte=datetime.datetime.today()-datetime.timedelta(days=31)).order_by('date') - return meetings.first() + meeting = get_current_ietf_meeting() + return meeting def get_schedule(meeting, name=None): if name is None: diff --git a/ietf/meeting/views.py b/ietf/meeting/views.py index 849298b0b..698b50ca9 100644 --- a/ietf/meeting/views.py +++ b/ietf/meeting/views.py @@ -44,7 +44,7 @@ from django.views.decorators.cache import cache_page from django.utils.html import format_html from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt from django.views.generic import RedirectView - +from django.core.cache import caches from ietf.doc.fields import SearchableDocumentsField from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent, DocAlias @@ -61,7 +61,8 @@ 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, schedule_permissions, get_ietf_meeting +from ietf.meeting.helpers import get_meeting, get_ietf_meeting, get_current_ietf_meeting_num +from ietf.meeting.helpers import get_schedule, schedule_permissions from ietf.meeting.helpers import preprocess_assignments_for_agenda, read_agenda_file from ietf.meeting.helpers import convert_draft_to_pdf, get_earliest_session_date from ietf.meeting.helpers import can_view_interim_request, can_approve_interim_request @@ -902,6 +903,12 @@ def agenda(request, num=None, name=None, base=None, ext=None, owner=None, utc="" else: raise Http404("No such meeting") + if name == None and owner == None: + cache_key = ("meeting:%s:%s%s" % (meeting.number, base, ext))[:228] + rendered_page = caches['slowpages'].get(cache_key) + if rendered_page: + return rendered_page + if name is None: schedule = get_schedule(meeting, name) else: @@ -943,14 +950,26 @@ def agenda(request, num=None, name=None, base=None, ext=None, owner=None, utc="" p.group_list.sort(key=lambda g: g.acronym) - return render(request, "meeting/"+base+ext, { + rendered_page = render(request, "meeting/"+base+ext, { "schedule": schedule, "filtered_assignments": filtered_assignments, "updated": updated, "group_parents": group_parents, "now": datetime.datetime.now(), + "is_current_meeting": bool(num == get_current_ietf_meeting_num()), }, content_type=mimetype[ext]) + # If the agenda is for the current meeting, only cache for 2 minutes + if name == None and owner == None: + cache_key = ("meeting:%s:%s%s" % (meeting.number, base, ext))[:228] + if meeting.number == get_current_ietf_meeting_num(): + timeout = 60 * 2 + else: + timeout = 60 * 60 * 24 + caches['slowpages'].set(cache_key, rendered_page, timeout) + + return rendered_page + def agenda_csv(schedule, filtered_assignments): response = HttpResponse(content_type="text/csv; charset=%s"%settings.DEFAULT_CHARSET) writer = csv.writer(response, delimiter=str(','), quoting=csv.QUOTE_ALL) diff --git a/ietf/templates/meeting/agenda.html b/ietf/templates/meeting/agenda.html index 8897ae8e0..fce7b0286 100644 --- a/ietf/templates/meeting/agenda.html +++ b/ietf/templates/meeting/agenda.html @@ -44,15 +44,13 @@
- {# cache this part for 5 minutes -- it takes 3-6 seconds to generate #} - {% load cache %} - {% cache 300 ietf_meeting_agenda_utc schedule.meeting.number request.path %} -

Agenda

+ {% if is_current_meeting %}

Note: IETF agendas are subject to change, up to and during a meeting.

+ {% endif %} {% if schedule.meeting.agenda_info_note %}

@@ -353,7 +351,6 @@

- {% endcache %} {% endblock %} {% block js %}