|
44 | 44 | from django.utils.html import format_html |
45 | 45 | from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt |
46 | 46 | from django.views.generic import RedirectView |
47 | | - |
| 47 | +from django.core.cache import caches |
48 | 48 |
|
49 | 49 | from ietf.doc.fields import SearchableDocumentsField |
50 | 50 | from ietf.doc.models import Document, State, DocEvent, NewRevisionDocEvent, DocAlias |
|
61 | 61 | from ietf.meeting.helpers import get_all_assignments_from_schedule |
62 | 62 | from ietf.meeting.helpers import get_modified_from_assignments |
63 | 63 | from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting |
64 | | -from ietf.meeting.helpers import get_meeting, get_schedule, schedule_permissions, get_ietf_meeting |
| 64 | +from ietf.meeting.helpers import get_meeting, get_ietf_meeting, get_current_ietf_meeting_num |
| 65 | +from ietf.meeting.helpers import get_schedule, schedule_permissions |
65 | 66 | from ietf.meeting.helpers import preprocess_assignments_for_agenda, read_agenda_file |
66 | 67 | from ietf.meeting.helpers import convert_draft_to_pdf, get_earliest_session_date |
67 | 68 | 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="" |
902 | 903 | else: |
903 | 904 | raise Http404("No such meeting") |
904 | 905 |
|
| 906 | + if name == None and owner == None: |
| 907 | + cache_key = ("meeting:%s:%s%s" % (meeting.number, base, ext))[:228] |
| 908 | + rendered_page = caches['slowpages'].get(cache_key) |
| 909 | + if rendered_page: |
| 910 | + return rendered_page |
| 911 | + |
905 | 912 | if name is None: |
906 | 913 | schedule = get_schedule(meeting, name) |
907 | 914 | else: |
@@ -943,14 +950,26 @@ def agenda(request, num=None, name=None, base=None, ext=None, owner=None, utc="" |
943 | 950 |
|
944 | 951 | p.group_list.sort(key=lambda g: g.acronym) |
945 | 952 |
|
946 | | - return render(request, "meeting/"+base+ext, { |
| 953 | + rendered_page = render(request, "meeting/"+base+ext, { |
947 | 954 | "schedule": schedule, |
948 | 955 | "filtered_assignments": filtered_assignments, |
949 | 956 | "updated": updated, |
950 | 957 | "group_parents": group_parents, |
951 | 958 | "now": datetime.datetime.now(), |
| 959 | + "is_current_meeting": bool(num == get_current_ietf_meeting_num()), |
952 | 960 | }, content_type=mimetype[ext]) |
953 | 961 |
|
| 962 | + # If the agenda is for the current meeting, only cache for 2 minutes |
| 963 | + if name == None and owner == None: |
| 964 | + cache_key = ("meeting:%s:%s%s" % (meeting.number, base, ext))[:228] |
| 965 | + if meeting.number == get_current_ietf_meeting_num(): |
| 966 | + timeout = 60 * 2 |
| 967 | + else: |
| 968 | + timeout = 60 * 60 * 24 |
| 969 | + caches['slowpages'].set(cache_key, rendered_page, timeout) |
| 970 | + |
| 971 | + return rendered_page |
| 972 | + |
954 | 973 | def agenda_csv(schedule, filtered_assignments): |
955 | 974 | response = HttpResponse(content_type="text/csv; charset=%s"%settings.DEFAULT_CHARSET) |
956 | 975 | writer = csv.writer(response, delimiter=str(','), quoting=csv.QUOTE_ALL) |
|
0 commit comments