Refactored counting telechat pages to do it only in one place. Count more accurately and make it possible to report more granularly. Added page counts to agenda.json. Commit ready to merge.

- Legacy-Id: 10636
This commit is contained in:
Robert Sparks 2016-01-07 23:31:05 +00:00
parent 2c75e954ad
commit 67f0234cac
5 changed files with 59 additions and 12 deletions

View file

@ -3,7 +3,7 @@ import datetime
from django import forms
from ietf.iesg.models import TelechatDate
from ietf.doc.models import Document
from ietf.iesg.utils import telechat_page_count
class TelechatForm(forms.Form):
telechat_date = forms.TypedChoiceField(coerce=lambda x: datetime.datetime.strptime(x, '%Y-%m-%d').date(), empty_value=None, required=False, help_text="Page counts are the current page counts for the telechat, before this telechat date edit is made.")
@ -20,7 +20,7 @@ class TelechatForm(forms.Form):
self.page_count = {}
choice_display = {}
for d in dates:
self.page_count[d] = sum([doc.pages for doc in Document.objects.filter(docevent__telechatdocevent__telechat_date=d,type='draft').distinct() if doc.telechat_date()==d])
self.page_count[d] = telechat_page_count(d).for_approval
choice_display[d] = '%s (%s pages)' % (d.strftime("%Y-%m-%d"),self.page_count[d])
self.fields['telechat_date'].choices = [("", "(not on agenda)")] + [(d, choice_display[d]) for d in dates]

View file

@ -38,7 +38,7 @@ def get_doc_section(doc):
s += ".3"
else:
s += ".2"
if doc.get_state_slug() != "rfc" and doc.get_state_slug('draft-iesg') not in ("lc", "writeupw", "goaheadw", "iesg-eva", "defer"):
if doc.get_state_slug() != "rfc" and doc.get_state_slug('draft-iesg') not in ("lc", "writeupw", "goaheadw", "iesg-eva", "defer", "approved", "ann", "rfcqueue", "pub"):
s += ".3"
elif doc.returning_item():
s += ".2"

View file

@ -1,15 +1,9 @@
from django import template
from ietf.iesg.utils import telechat_page_count as page_counter
register = template.Library()
@register.filter
def telechat_page_count(telechat):
page_count = 0
for num, section in telechat['sections']:
if num in ('2.1.1','2.1.2','2.2.1','2.2.2','3.1.1','3.1.2','3.2.1','3.2.2',):
for doc in section['docs']:
page_count += getattr(doc,'pages',0)
return page_count
# An alternate implementation:
# sum([doc.pages for doc in Document.objects.filter(docevent__telechatdocevent__telechat_date=d,type='draft').distict() if doc.telechat_date()==d])
return page_counter(telechat['date']).for_approval

49
ietf/iesg/utils.py Normal file
View file

@ -0,0 +1,49 @@
from collections import namedtuple
from ietf.doc.models import Document, TelechatDocEvent, STATUSCHANGE_RELATIONS
from ietf.iesg.agenda import get_doc_section
TelechatPageCount = namedtuple('TelechatPageCount',['for_approval','for_action','related'])
def telechat_page_count(date):
candidates = Document.objects.filter(docevent__telechatdocevent__telechat_date=date).distinct()
docs = [ doc for doc in candidates if doc.latest_event(TelechatDocEvent,type='scheduled_for_telechat').telechat_date==date ]
for_action =[d for d in docs if get_doc_section(d).endswith('.3')]
for_approval = set(docs)-set(for_action)
drafts = [d for d in for_approval if d.type_id == 'draft']
pages_for_approval = sum([d.pages or 0 for d in drafts])
pages_for_action = 0
for d in for_action:
if d.type_id == 'draft':
pages_for_action += d.pages or 0
elif d.type_id == 'statchg':
for rel in d.related_that_doc(STATUSCHANGE_RELATIONS):
pages_for_action += rel.document.pages or 0
elif d.type_id == 'conflrev':
for rel in d.related_that_doc('conflrev'):
pages_for_action += rel.document.pages or 0
else:
pass
related_pages = 0
for d in for_approval-set(drafts):
if d.type_id == 'statchg':
for rel in d.related_that_doc(STATUSCHANGE_RELATIONS):
related_pages += rel.document.pages or 0
elif d.type_id == 'conflrev':
for rel in d.related_that_doc('conflrev'):
related_pages += rel.document.pages or 0
else:
# There's really nothing to rely on to give a reading load estimate for charters
pass
return TelechatPageCount(for_approval=pages_for_approval,
for_action=pages_for_action,
related=related_pages)

View file

@ -40,6 +40,8 @@ import time
import itertools
import json
import debug # pyflakes:ignore
from django import forms
from django.conf import settings
@ -55,6 +57,7 @@ from ietf.doc.utils import update_telechat, augment_events_with_revision
from ietf.group.models import GroupMilestone
from ietf.iesg.agenda import agenda_data, agenda_sections, fill_in_agenda_docs, get_agenda_date
from ietf.iesg.models import TelechatDate
from ietf.iesg.utils import telechat_page_count
from ietf.ietfauth.utils import has_role, role_required, user_is_person
from ietf.person.models import Person
from ietf.doc.views_search import fill_in_search_attributes
@ -92,6 +95,7 @@ def agenda_json(request, date=None):
res = {
"telechat-date": str(data["date"]),
"as-of": str(datetime.datetime.utcnow()),
"page-counts": telechat_page_count(get_agenda_date(date))._asdict(),
"sections": {},
}