Skip to content

Commit d0f2859

Browse files
committed
Move NomCom announcements view to nomcom/, move message view to
message/, add tests, add redirects, fix a couple of small bugs in the announcements view - Legacy-Id: 6769
1 parent 78d9bff commit d0f2859

14 files changed

Lines changed: 125 additions & 102 deletions

File tree

ietf/announcements/models.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

ietf/announcements/urls.py

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

ietf/announcements/views.py

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

ietf/message/views.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from django.shortcuts import render_to_response, get_object_or_404
2+
from django.template import RequestContext
3+
4+
from ietf.group.models import Group
5+
from ietf.message.models import Message
6+
7+
8+
def message(request, message_id, group_type):
9+
possible_messages = Message.objects.filter(related_groups__type=group_type)
10+
11+
message = get_object_or_404(possible_messages, id=message_id)
12+
13+
return render_to_response("message/message.html",
14+
dict(message=message),
15+
context_instance=RequestContext(request))

ietf/nomcom/redirect_ann_urls.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from django.conf.urls.defaults import patterns
2+
from django.views.generic.simple import redirect_to
3+
4+
urlpatterns = patterns('',
5+
(r'^nomcom/$', 'django.views.generic.simple.redirect_to', { 'url': "/nomcom/ann/", 'permanent': True }),
6+
(r'^nomcom/(?P<message_id>\d+)/$', 'django.views.generic.simple.redirect_to', { 'url': "/nomcom/ann/%(message_id)s/", 'permanent': True }),
7+
)

ietf/nomcom/test_data.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from django.conf import settings
77

88
from ietf.utils.pipe import pipe
9-
from ietf.group.models import Group, Role
9+
from ietf.group.models import Group, Role, ChangeStateGroupEvent
1010
from ietf.person.models import Email, Person
1111
from ietf.name.models import RoleName
1212
from ietf.nomcom.models import NomCom, Position, Nominee
@@ -101,6 +101,7 @@ def nomcom_test_data():
101101
state_id='active',
102102
type_id='nomcom',
103103
acronym='nomcom%s' % NOMCOM_YEAR)
104+
104105
nomcom, created = NomCom.objects.get_or_create(group=group)
105106

106107
cert_file, privatekey_file = generate_cert()
@@ -159,3 +160,9 @@ def nomcom_test_data():
159160
description=description,
160161
is_open=True,
161162
incumbent=email)
163+
164+
ChangeStateGroupEvent.objects.get_or_create(group=group,
165+
type="changed_state",
166+
state_id="active",
167+
time=group.time,
168+
by=Person.objects.all()[0])

ietf/nomcom/tests.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
from django.core.urlresolvers import reverse
99
from django.core.files import File
1010
from django.contrib.formtools.preview import security_hash
11+
from django.contrib.auth.models import User
1112

1213
from ietf.utils.test_utils import login_testing_unauthorized
1314
from ietf.utils.mail import outbox
1415

1516

1617
from ietf.person.models import Email, Person
17-
from django.contrib.auth.models import User
18+
from ietf.group.models import Group
19+
from ietf.message.models import Message
1820

1921
from ietf.nomcom.test_data import nomcom_test_data, generate_cert, check_comments, \
2022
COMMUNITY_USER, CHAIR_USER, \
@@ -365,6 +367,25 @@ def test_index_view(self):
365367
"""Verify home view"""
366368
self.check_url_status(self.index_url, 200)
367369

370+
def test_announcements_view(self):
371+
nomcom = Group.objects.get(acronym="nomcom%s" % self.year, type="nomcom")
372+
msg = Message.objects.create(
373+
by=Person.objects.all()[0],
374+
subject="This is a test",
375+
to="test@example.com",
376+
frm="nomcomchair@example.com",
377+
body="Hello World!",
378+
content_type="",
379+
)
380+
msg.related_groups.add(nomcom)
381+
382+
r = self.client.get(reverse('ietf.nomcom.views.announcements'))
383+
self.assertEqual(r.status_code, 200)
384+
self.assertTrue(("Messages from %s" % nomcom.time.year) in r.content)
385+
self.assertTrue(nomcom.role_set.filter(name="chair")[0].person.email_address() in r.content)
386+
self.assertTrue(msg.subject in r.content)
387+
388+
368389
def test_requirements_view(self):
369390
"""Verify requirements view"""
370391
self.check_url_status(self.requirements_url, 200)

ietf/nomcom/urls.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
urlpatterns = patterns('ietf.nomcom.views',
88
url(r'^$', 'index'),
9+
url(r'^ann/$', 'announcements'),
910
url(r'^(?P<year>\d{4})/private/$', 'private_index', name='nomcom_private_index'),
1011
url(r'^(?P<year>\d{4})/private/key/$', 'private_key', name='nomcom_private_key'),
1112
url(r'^(?P<year>\d{4})/private/nominate/$', 'private_nominate', name='nomcom_private_nominate'),
@@ -42,3 +43,7 @@
4243
url(r'^ajax/position-text/(?P<position_id>\d+)/$', 'ajax_position_text', name='nomcom_ajax_position_text'),
4344

4445
)
46+
47+
urlpatterns += patterns('',
48+
url(r'^ann/(?P<message_id>\d+)/$', 'ietf.message.views.message', {'group_type': "nomcom" }, "nomcom_announcement"),
49+
)

ietf/nomcom/views.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# -*- coding: utf-8 -*-
22

3-
import datetime
3+
import datetime, re
44

55
from django.views.generic.create_update import delete_object
66
from django.conf import settings
@@ -20,7 +20,8 @@
2020
from ietf.dbtemplate.models import DBTemplate
2121
from ietf.dbtemplate.views import template_edit
2222
from ietf.name.models import NomineePositionState, FeedbackType
23-
from ietf.group.models import Group
23+
from ietf.group.models import Group, GroupEvent
24+
from ietf.message.models import Message
2425

2526
from ietf.nomcom.decorators import nomcom_private_key_required
2627
from ietf.nomcom.forms import (NominateForm, FeedbackForm, QuestionnaireForm,
@@ -53,7 +54,7 @@ def index(request):
5354
else:
5455
nomcom.url = None
5556
if year >= 2002:
56-
nomcom.ann_url = "/ann/nomcom/#%4d" % year
57+
nomcom.ann_url = "/nomcom/ann/#%4d" % year
5758
else:
5859
nomcom.ann_url = None
5960
return render_to_response('nomcom/index.html',
@@ -70,6 +71,41 @@ def year_index(request, year):
7071
'selected': 'index',
7172
'template': template}, RequestContext(request))
7273

74+
def announcements(request):
75+
address_re = re.compile("<.*>")
76+
77+
nomcoms = Group.objects.filter(type="nomcom")
78+
79+
regimes = []
80+
81+
for n in nomcoms:
82+
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="active").order_by('time')[:1]
83+
n.start_year = e[0].time.year if e else 0
84+
e = GroupEvent.objects.filter(group=n, type="changed_state", changestategroupevent__state="conclude").order_by('time')[:1]
85+
n.end_year = e[0].time.year if e else n.start_year + 1
86+
87+
r = n.role_set.select_related().filter(name="chair")
88+
chair = None
89+
if r:
90+
chair = r[0]
91+
92+
announcements = Message.objects.filter(related_groups=n).order_by('-time')
93+
for a in announcements:
94+
a.to_name = address_re.sub("", a.to)
95+
96+
if not announcements:
97+
continue
98+
99+
regimes.append(dict(chair=chair,
100+
announcements=announcements,
101+
group=n))
102+
103+
regimes.sort(key=lambda x: x["group"].start_year, reverse=True)
104+
105+
return render_to_response("nomcom/announcements.html",
106+
{ 'curr_chair' : regimes[0]["chair"] if regimes else None,
107+
'regimes' : regimes },
108+
context_instance=RequestContext(request))
73109

74110
@role_required("Nomcom")
75111
def private_key(request, year):

ietf/settings.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,6 @@
166166
'ietf.group',
167167
'ietf.doc',
168168
'ietf.message',
169-
'ietf.announcements',
170169
'ietf.idindex',
171170
'ietf.idtracker',
172171
'ietf.ietfauth',

0 commit comments

Comments
 (0)