Added session ical links to document lists (WG docs, search results, etc.) for documents on upcoming meeting agendas. Reduced the query and rendering times of document lists some more through additional prefetch_related().

- Legacy-Id: 14799
This commit is contained in:
Henrik Levkowetz 2018-03-14 19:16:50 +00:00
parent 88c3e9055b
commit 1fd4a4d1a7
2 changed files with 30 additions and 4 deletions

View file

@ -1,10 +1,17 @@
# Copyright The IETF Trust 2016, All Rights Reserved
import datetime
import debug # pyflakes:ignore
from ietf.community.utils import augment_docs_with_tracking_info
from ietf.doc.models import Document, DocAlias, RelatedDocument, DocEvent, TelechatDocEvent
from ietf.doc.expire import expirable_draft
from ietf.community.utils import augment_docs_with_tracking_info
from ietf.meeting.models import SessionPresentation
def wrap_value(v):
return lambda: v
def fill_in_document_table_attributes(docs):
# fill in some attributes for the document table results to save
# some hairy template code and avoid repeated SQL queries
@ -35,6 +42,13 @@ def fill_in_document_table_attributes(docs):
d.telechat_date = wrap_value(d.telechat_date(e))
seen.add(e.doc_id)
# on agenda in upcoming meetings
presentations = SessionPresentation.objects.filter(session__meeting__date__gte=datetime.date.today()-datetime.timedelta(days=15)).select_related('session', 'document')
session_list = [ (p.document, p.session) for p in presentations ]
sessions = dict( (d, []) for (d, s) in session_list )
for (d, s) in session_list:
sessions[d].append(s)
# misc
for d in docs:
# emulate canonical name which is used by a lot of the utils
@ -64,6 +78,7 @@ def fill_in_document_table_attributes(docs):
d.reviewed_by_teams = sorted(set(r.team for r in d.reviewrequest_set.filter(state__in=["requested","accepted","part-completed","completed"])), key=lambda g: g.acronym)
d.sessions = sessions[d] if d in sessions else []
# RFCs
@ -101,10 +116,13 @@ def prepare_document_table(request, docs, query=None, max_results=500):
if not isinstance(docs, list):
# evaluate and fill in attribute results immediately to decrease
# the number of queries
docs = docs.select_related("ad", "std_level", "intended_std_level", "group", "stream")
docs = docs.prefetch_related("states__type", "tags", "groupmilestone_set__group", "reviewrequest_set__team")
docs = docs.select_related("ad", "std_level", "intended_std_level", "group", "stream", "shepherd", )
docs = docs.prefetch_related("states__type", "tags", "groupmilestone_set__group", "reviewrequest_set__team",
"submission_set__checks", "ad__email_set")
docs = list(docs[:max_results])
if docs.count() > max_results:
docs = docs[:max_results]
docs = list(docs)
fill_in_document_table_attributes(docs)
augment_docs_with_tracking_info(docs, request.user)

View file

@ -20,6 +20,14 @@
<span class="fa fa-bookmark-o"></span>
</a>
{% endif %}
{% for session in doc.sessions %}
<br><small>
<a href="{% url 'ietf.meeting.views.ical_agenda' num=session.meeting.number session_id=session.id %}"
title="Calendar entry: document is on the agenda for {{ session.group.acronym }}@{{ session.meeting }}">
<span class="fa fa-calendar"></span>
</a>
</small>
{% endfor %}
</td>
<td class="doc">