Skip to content

Commit e469add

Browse files
authored
feat: move IETF Activity reports from external text based to HTML pages (ietf-tools#5180)
* feat: move IETF Activity reports from external text based to HTML pages * fix: use date_today(), fix fencepost problem * fix: use is_meeting_report template variable instead of is_monthly_report
1 parent caf80ef commit e469add

17 files changed

Lines changed: 111 additions & 297 deletions

ietf/bin/report_id_activity

Lines changed: 0 additions & 22 deletions
This file was deleted.

ietf/bin/report_progress_report

Lines changed: 0 additions & 24 deletions
This file was deleted.

ietf/iesg/tests.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ def test_photos(self):
9696
ads = Role.objects.filter(group__type='area', group__state='active', name_id='ad')
9797
self.assertEqual(len(q('.photo')), ads.count())
9898

99+
def test_ietf_activity(self):
100+
url = urlreverse("ietf.iesg.views.ietf_activity")
101+
r = self.client.get(url)
102+
self.assertEqual(r.status_code, 200)
103+
104+
99105
class IESGAgendaTests(TestCase):
100106
def setUp(self):
101107
super().setUp()
@@ -542,4 +548,4 @@ def test_reschedule(self):
542548
self.assertTrue(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat"))
543549
self.assertEqual(draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").telechat_date, d)
544550
self.assertTrue(not draft.latest_event(TelechatDocEvent, "scheduled_for_telechat").returning_item)
545-
self.assertEqual(draft.docevent_set.count(), events_before + 1)
551+
self.assertEqual(draft.docevent_set.count(), events_before + 1)

ietf/iesg/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
url(r'^past/documents/$', views.past_documents),
5656
url(r'^agenda/telechat-(?:%(date)s-)?docs.tgz' % settings.URL_REGEXPS, views.telechat_docs_tarfile),
5757
url(r'^discusses/$', views.discusses),
58+
url(r'^ietf-activity/$', views.ietf_activity),
5859
url(r'^milestones/$', views.milestones_needing_review),
5960
url(r'^photos/$', views.photos),
60-
]
61+
]

ietf/iesg/views.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import os
4242
import tarfile
4343
import time
44+
from dateutil import relativedelta
4445

4546
from django import forms
4647
from django.conf import settings
@@ -62,6 +63,7 @@
6263
from ietf.iesg.utils import telechat_page_count
6364
from ietf.ietfauth.utils import has_role, role_required, user_is_person
6465
from ietf.person.models import Person
66+
from ietf.secr.proceedings.proc_utils import get_activity_stats
6567
from ietf.doc.utils_search import fill_in_document_table_attributes, fill_in_telechat_date
6668
from ietf.utils.timezone import date_today, datetime_from_date
6769

@@ -528,4 +530,34 @@ def photos(request):
528530
role.last_initial = role.person.last_name()[0]
529531
return render(request, 'iesg/photos.html', {'group_type': 'IESG', 'role': '', 'roles': roles })
530532

531-
533+
def month_choices():
534+
choices = [(str(n).zfill(2), str(n).zfill(2)) for n in range(1, 13)]
535+
return choices
536+
537+
def year_choices():
538+
this_year = date_today().year
539+
choices = [(str(n), str(n)) for n in range(this_year, 2009, -1)]
540+
return choices
541+
542+
class ActivityForm(forms.Form):
543+
month = forms.ChoiceField(choices=month_choices, help_text='Month', required=True)
544+
year = forms.ChoiceField(choices=year_choices, help_text='Year', required=True)
545+
546+
def ietf_activity(request):
547+
# default date range for last month
548+
today = date_today()
549+
edate = today.replace(day=1)
550+
sdate = (edate - datetime.timedelta(days=1)).replace(day=1)
551+
if request.method == 'GET':
552+
form = ActivityForm(request.GET)
553+
if form.is_valid():
554+
month = form.cleaned_data['month']
555+
year = form.cleaned_data['year']
556+
sdate = datetime.date(int(year), int(month), 1)
557+
edate = sdate + relativedelta.relativedelta(months=1)
558+
559+
# always pass back an unbound form to avoid annoying is-valid styling
560+
form = ActivityForm(initial={'month': str(sdate.month).zfill(2), 'year': sdate.year})
561+
context = get_activity_stats(sdate, edate)
562+
context['form'] = form
563+
return render(request, "iesg/ietf_activity_report.html", context)

ietf/meeting/tests_views.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7530,7 +7530,7 @@ def test_proceedings(self):
75307530
)
75317531
self.assertNotEqual(
75327532
pq('a[href="{}"]'.format(
7533-
urlreverse('ietf.meeting.views.proceedings_progress_report', kwargs=dict(num=meeting.number)))
7533+
urlreverse('ietf.meeting.views.proceedings_activity_report', kwargs=dict(num=meeting.number)))
75347534
),
75357535
[],
75367536
'Should have a link to activity report',
@@ -7696,14 +7696,14 @@ def test_proceedings_overview(self, mock):
76967696
response = self.client.get(url)
76977697
self.assertContains(response, 'The Internet Engineering Task Force')
76987698

7699-
def test_proceedings_progress_report(self):
7699+
def test_proceedings_activity_report(self):
77007700
make_meeting_test_data()
77017701
MeetingFactory(type_id='ietf', date=datetime.date(2016,4,3), number="96")
77027702
MeetingFactory(type_id='ietf', date=datetime.date(2016,7,14), number="97")
77037703

7704-
url = urlreverse('ietf.meeting.views.proceedings_progress_report',kwargs={'num':97})
7704+
url = urlreverse('ietf.meeting.views.proceedings_activity_report',kwargs={'num':97})
77057705
response = self.client.get(url)
7706-
self.assertContains(response, 'Progress Report')
7706+
self.assertContains(response, 'Activity Report')
77077707

77087708
def test_feed(self):
77097709
meeting = make_meeting_test_data()

ietf/meeting/urls.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ def get_redirect_url(self, *args, **kwargs):
9292
url(r'^proceedings/acknowledgements/$', views.proceedings_acknowledgements),
9393
url(r'^proceedings/attendees/$', views.proceedings_attendees),
9494
url(r'^proceedings/overview/$', views.proceedings_overview),
95-
url(r'^proceedings/progress-report/$', views.proceedings_progress_report),
95+
url(r'^proceedings/activity-report/$', views.proceedings_activity_report),
9696
url(r'^proceedings/materials/$', views_proceedings.material_details),
9797
url(r'^proceedings/materials/(?P<material_type>[a-z_]+)/$', views_proceedings.edit_material),
9898
url(r'^proceedings/materials/(?P<material_type>[a-z_]+)/new/$', views_proceedings.upload_material),

ietf/meeting/views.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
from ietf.meeting.utils import new_doc_for_session, write_doc_for_session
8585
from ietf.message.utils import infer_message
8686
from ietf.name.models import SlideSubmissionStatusName, ProceedingsMaterialTypeName, SessionPurposeName
87-
from ietf.secr.proceedings.proc_utils import (get_progress_stats, post_process, import_audio_files,
87+
from ietf.secr.proceedings.proc_utils import (get_activity_stats, post_process, import_audio_files,
8888
create_recording)
8989
from ietf.utils import markdown
9090
from ietf.utils.decorators import require_api_key
@@ -3803,18 +3803,19 @@ def proceedings_overview(request, num=None):
38033803
'template': template,
38043804
})
38053805

3806-
def proceedings_progress_report(request, num=None):
3807-
'''Display Progress Report (stats since last meeting)'''
3806+
def proceedings_activity_report(request, num=None):
3807+
'''Display Activity Report (stats since last meeting)'''
38083808
if not (num and num.isdigit()):
38093809
raise Http404
38103810
meeting = get_meeting(num)
38113811
if meeting.proceedings_format_version == 1:
38123812
return HttpResponseRedirect(f'{settings.PROCEEDINGS_V1_BASE_URL.format(meeting=meeting)}/progress-report.html')
38133813
sdate = meeting.previous_meeting().date
38143814
edate = meeting.date
3815-
context = get_progress_stats(sdate,edate)
3815+
context = get_activity_stats(sdate,edate)
38163816
context['meeting'] = meeting
3817-
return render(request, "meeting/proceedings_progress_report.html", context)
3817+
context['is_meeting_report'] = True
3818+
return render(request, "meeting/proceedings_activity_report.html", context)
38183819

38193820
class OldUploadRedirect(RedirectView):
38203821
def get_redirect_url(self, **kwargs):

ietf/secr/proceedings/proc_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,10 @@ def send_audio_import_warning(unmatched_files):
199199
# End Recording Functions
200200
# -------------------------------------------------
201201

202-
def get_progress_stats(sdate, edate):
202+
def get_activity_stats(sdate, edate):
203203
'''
204204
This function takes a date range and produces a dictionary of statistics / objects for
205-
use in a progress report. Generally the end date will be the date of the last meeting
205+
use in an activity report. Generally the end date will be the date of the last meeting
206206
and the start date will be the date of the meeting before that.
207207
208208
Data between midnight UTC on the specified dates are included in the stats.

ietf/secr/proceedings/reports.py

Lines changed: 0 additions & 106 deletions
This file was deleted.

0 commit comments

Comments
 (0)