From 248c2dd055a6e57814a2e516db70a8363811f106 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Fri, 6 Apr 2018 15:17:18 +0000 Subject: [PATCH] Added back the on-agenda calendar links to document lists, now in an implementation with better performance characteristics. - Legacy-Id: 15020 --- ietf/doc/utils_search.py | 29 ++++++++++++------- .../doc/search/search_result_row.html | 6 ++-- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/ietf/doc/utils_search.py b/ietf/doc/utils_search.py index b7f931a34..55ccb56c8 100644 --- a/ietf/doc/utils_search.py +++ b/ietf/doc/utils_search.py @@ -6,7 +6,7 @@ import debug # pyflakes:ignore from ietf.community.utils import augment_docs_with_tracking_info from ietf.doc.models import Document, DocAlias, RelatedDocument, DocEvent, TelechatDocEvent, BallotDocEvent from ietf.doc.expire import expirable_draft - +from ietf.meeting.models import SessionPresentation, Meeting, Session def wrap_value(v): return lambda: v @@ -26,6 +26,21 @@ def fill_in_telechat_date(docs, doc_dict=None, doc_ids=None): d.telechat_date = wrap_value(d.telechat_date(e)) seen.add(e.doc_id) +def fill_in_document_sessions(docs, doc_dict, doc_ids): + beg_date = datetime.date.today()-datetime.timedelta(days=7) + end_date = datetime.date.today()+datetime.timedelta(days=30) + meetings = Meeting.objects.filter(date__gte=beg_date, date__lte=end_date).prefetch_related('session_set') + # get sessions + sessions = Session.objects.filter(meeting_id__in=[ m.id for m in meetings ]) + # get presentations + presentations = SessionPresentation.objects.filter(session_id__in=[ s.id for s in sessions ]) + session_list = [ (p.document_id, p.session) for p in presentations ] + for d in doc_dict.values(): + d.sessions = [] + for (i, s) in session_list: + if i in doc_ids: + doc_dict[i].sessions.append(s) + def fill_in_document_table_attributes(docs, have_telechat_date=False): # fill in some attributes for the document table results to save # some hairy template code and avoid repeated SQL queries @@ -58,14 +73,8 @@ def fill_in_document_table_attributes(docs, have_telechat_date=False): fill_in_telechat_date(docs, doc_dict, doc_ids) # on agenda in upcoming meetings - sessions = {} -# debug.mark() -# presentations = SessionPresentation.objects.filter(session__meeting__date__gte=datetime.date.today()-datetime.timedelta(days=7)).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) -# debug.clock('presentations') + # get meetings + fill_in_document_sessions(docs, doc_dict, doc_ids) # misc for d in docs: @@ -95,8 +104,6 @@ def fill_in_document_table_attributes(docs, have_telechat_date=False): d.milestones = [ m for (t, m) in sorted(((m.time, m) for m in d.groupmilestone_set.all() if m.state_id == "active")) ] d.reviewed_by_teams = sorted(set(r.team.acronym for r in d.reviewrequest_set.filter(state__in=["requested","accepted","part-completed","completed"]).distinct().select_related('team'))) - d.sessions = sessions[d] if d in sessions else [] - e = d.latest_event_cache.get('started_iesg_proces', None) d.balloting_started = e.time if e else datetime.datetime.min diff --git a/ietf/templates/doc/search/search_result_row.html b/ietf/templates/doc/search/search_result_row.html index c191242bc..4302556b9 100644 --- a/ietf/templates/doc/search/search_result_row.html +++ b/ietf/templates/doc/search/search_result_row.html @@ -19,14 +19,14 @@ +
{% endif %} {% for session in doc.sessions %} -
- + {# font-size set to make the width of fa-calendar come out the same as fa-bookmark-o above: #} + - {% endfor %}