Skip to content

Commit 495169d

Browse files
committed
Merged in [13474] from rjsparks@nostrum.com:
Allow the nomcom to collect feedback on arbitrary topics. Fixes ietf-tools#2256 and ietf-tools#1846. - Legacy-Id: 13506 Note: SVN reference [13474] has been migrated to Git commit 4813177
2 parents 5b2087f + 4813177 commit 495169d

26 files changed

Lines changed: 980 additions & 63 deletions

ietf/dbtemplate/fixtures/nomcom_templates.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,14 @@ The questionaire is repeated below for your convenience.
172172
--------</field>
173173
<field to="group.group" name="group" rel="ManyToOneRel"><None></None></field>
174174
</object>
175+
<object pk="12" model="dbtemplate.dbtemplate">
176+
<field type="CharField" name="path">/nomcom/defaults/topic/description</field>
177+
<field type="CharField" name="title">Description of Topic</field>
178+
<field type="TextField" name="variables">$topic: Topic'</field>
179+
<field to="name.dbtemplatetypename" name="type" rel="ManyToOneRel">rst</field>
180+
<field type="TextField" name="content">This is a description of the topic "$topic"
181+
182+
Describe the topic and add any information/instructions for the responder here.
183+
</field>
184+
</object>
175185
</django-objects>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.7 on 2017-05-24 09:30
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations
6+
7+
def forward(apps, schema_editor):
8+
DBTemplate = apps.get_model('dbtemplate','DBTemplate')
9+
DBTemplate.objects.create(
10+
path='/nomcom/defaults/topic/description',
11+
title='Description of Topic',
12+
variables='$topic: Topic',
13+
type_id='rst',
14+
content="""This is a description of the topic "$topic"
15+
16+
Describe the topic and add any information/instructions for the responder here.
17+
""",
18+
)
19+
20+
def reverse(apps, schema_editor):
21+
DBTemplate = apps.get_model('dbtemplate','DBTemplate')
22+
DBTemplate.objects.filter(path='/nomcom/defaults/topic/description').delete()
23+
24+
class Migration(migrations.Migration):
25+
26+
dependencies = [
27+
('dbtemplate', '0004_team_review_content_templates'),
28+
]
29+
30+
operations = [
31+
migrations.RunPython(forward,reverse),
32+
]
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.7 on 2017-05-24 14:54
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations
6+
7+
def forward(apps, schema_migration):
8+
DBTemplate = apps.get_model('dbtemplate','DBTemplate')
9+
t = DBTemplate.objects.get(path='/nomcom/defaults/email/feedback_receipt.txt')
10+
t.variables="""$about: What this feedback is about
11+
$comments: Comments on whatever the feedback is about
12+
"""
13+
t.content="""Hi,
14+
15+
Your input regarding $about has been received and registered.
16+
17+
The following comments have been registered:
18+
19+
--------------------------------------------------------------------------
20+
$comments
21+
--------------------------------------------------------------------------
22+
23+
Thank you,
24+
"""
25+
t.save()
26+
27+
def reverse(apps, schema_migration):
28+
DBTemplate = apps.get_model('dbtemplate','DBTemplate')
29+
t = DBTemplate.objects.get(path='/nomcom/defaults/email/feedback_receipt.txt')
30+
t.variables="""$nominee: Full name of the nominee
31+
$position: Nomination position
32+
$comments: Comments on this candidate
33+
"""
34+
t.content="""Hi,
35+
36+
Your input regarding $nominee for the position of
37+
$position has been received and registered.
38+
39+
The following comments have been registered:
40+
41+
--------------------------------------------------------------------------
42+
$comments
43+
--------------------------------------------------------------------------
44+
45+
Thank you,
46+
"""
47+
t.save()
48+
class Migration(migrations.Migration):
49+
50+
dependencies = [
51+
('dbtemplate', '0005_add_default_topic_description'),
52+
]
53+
54+
operations = [
55+
migrations.RunPython(forward, reverse)
56+
]

ietf/name/fixtures/names.json

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2787,6 +2787,7 @@
27872787
],
27882788
"desc": "Recipients when an interim meeting is announced",
27892789
"to": [
2790+
"group_stream_announce",
27902791
"ietf_announce"
27912792
]
27922793
},
@@ -2813,6 +2814,7 @@
28132814
],
28142815
"desc": "Recipients when an interim meeting is cancelled",
28152816
"to": [
2817+
"group_stream_announce",
28162818
"ietf_announce"
28172819
]
28182820
},
@@ -6184,17 +6186,27 @@
61846186
"desc": "Experimental room setup (boardroom and classroom) subject to availability",
61856187
"name": "Boardroom Layout",
61866188
"order": 0,
6187-
"used": true
6189+
"used": false
61886190
},
61896191
"model": "name.roomresourcename",
61906192
"pk": "boardroom"
61916193
},
6194+
{
6195+
"fields": {
6196+
"desc": "Flipchars",
6197+
"name": "Flipcharts",
6198+
"order": 0,
6199+
"used": true
6200+
},
6201+
"model": "name.roomresourcename",
6202+
"pk": "flipcharts"
6203+
},
61926204
{
61936205
"fields": {
61946206
"desc": "The room will have a meetecho wrangler",
61956207
"name": "Meetecho Support",
61966208
"order": 0,
6197-
"used": true
6209+
"used": false
61986210
},
61996211
"model": "name.roomresourcename",
62006212
"pk": "meetecho"
@@ -6204,7 +6216,7 @@
62046216
"desc": "The room will have a second computer projector",
62056217
"name": "second LCD projector",
62066218
"order": 0,
6207-
"used": true
6219+
"used": false
62086220
},
62096221
"model": "name.roomresourcename",
62106222
"pk": "proj2"
@@ -6214,11 +6226,21 @@
62146226
"desc": "The room will have a computer projector",
62156227
"name": "LCD projector",
62166228
"order": 0,
6217-
"used": true
6229+
"used": false
62186230
},
62196231
"model": "name.roomresourcename",
62206232
"pk": "project"
62216233
},
6234+
{
6235+
"fields": {
6236+
"desc": "Experimental Room Setup (U-Shape and classroom, subject to availability)",
6237+
"name": "Experimental Room Setup (U-Shape and classroom)",
6238+
"order": 0,
6239+
"used": true
6240+
},
6241+
"model": "name.roomresourcename",
6242+
"pk": "u-shape"
6243+
},
62226244
{
62236245
"fields": {
62246246
"desc": "",
@@ -6538,5 +6560,35 @@
65386560
},
65396561
"model": "name.timeslottypename",
65406562
"pk": "unavail"
6563+
},
6564+
{
6565+
"fields": {
6566+
"desc": "Anyone who can log in",
6567+
"name": "General",
6568+
"order": 0,
6569+
"used": true
6570+
},
6571+
"model": "name.topicaudiencename",
6572+
"pk": "general"
6573+
},
6574+
{
6575+
"fields": {
6576+
"desc": "Members of this nomcom",
6577+
"name": "Nomcom Members",
6578+
"order": 0,
6579+
"used": true
6580+
},
6581+
"model": "name.topicaudiencename",
6582+
"pk": "nomcom"
6583+
},
6584+
{
6585+
"fields": {
6586+
"desc": "Anyone who has accepted a Nomination for an open position",
6587+
"name": "Nominees",
6588+
"order": 0,
6589+
"used": true
6590+
},
6591+
"model": "name.topicaudiencename",
6592+
"pk": "nominees"
65416593
}
65426594
]
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.7 on 2017-05-24 08:25
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations, models
6+
7+
def forward(apps, schema_editor):
8+
TopicAudienceName = apps.get_model('name','TopicAudienceName')
9+
# """General, Nominee, Nomcom Member"""
10+
TopicAudienceName.objects.create(
11+
slug='general',
12+
name='General',
13+
desc='Anyone who can log in',
14+
)
15+
TopicAudienceName.objects.create(
16+
slug='nominees',
17+
name='Nominees',
18+
desc='Anyone who has accepted a Nomination for an open position',
19+
)
20+
TopicAudienceName.objects.create(
21+
slug='nomcom',
22+
name='Nomcom Members',
23+
desc='Members of this nomcom',
24+
)
25+
26+
def reverse(apps, schema_editor):
27+
pass
28+
29+
class Migration(migrations.Migration):
30+
31+
dependencies = [
32+
('name', '0019_add_docrelationshipname_downref_approval'),
33+
]
34+
35+
operations = [
36+
migrations.CreateModel(
37+
name='TopicAudienceName',
38+
fields=[
39+
('slug', models.CharField(max_length=32, primary_key=True, serialize=False)),
40+
('name', models.CharField(max_length=255)),
41+
('desc', models.TextField(blank=True)),
42+
('used', models.BooleanField(default=True)),
43+
('order', models.IntegerField(default=0)),
44+
],
45+
options={
46+
'ordering': ['order', 'name'],
47+
'abstract': False,
48+
},
49+
),
50+
migrations.RunPython(forward,reverse),
51+
]

ietf/name/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,5 @@ class ReviewResultName(NameModel):
9797
"""Almost ready, Has issues, Has nits, Not Ready,
9898
On the right track, Ready, Ready with issues,
9999
Ready with nits, Serious Issues"""
100-
100+
class TopicAudienceName(NameModel):
101+
"""General, Nominee, Nomcom Member"""

ietf/name/resources.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
ConstraintName, MeetingTypeName, DocRelationshipName, RoomResourceName, IprLicenseTypeName,
1515
LiaisonStatementTagName, FeedbackTypeName, LiaisonStatementState, StreamName,
1616
BallotPositionName, DBTemplateTypeName, NomineePositionStateName,
17-
ReviewRequestStateName, ReviewTypeName, ReviewResultName)
17+
ReviewRequestStateName, ReviewTypeName, ReviewResultName,
18+
TopicAudienceName, )
1819

1920

2021
class TimeSlotTypeNameResource(ModelResource):
@@ -456,3 +457,17 @@ class Meta:
456457
}
457458
api.name.register(ReviewResultNameResource())
458459

460+
class TopicAudienceNameResource(ModelResource):
461+
class Meta:
462+
cache = SimpleCache()
463+
queryset = TopicAudienceName.objects.all()
464+
#resource_name = 'topicaudiencename'
465+
filtering = {
466+
"slug": ALL,
467+
"name": ALL,
468+
"desc": ALL,
469+
"used": ALL,
470+
"order": ALL,
471+
}
472+
api.name.register(TopicAudienceNameResource())
473+

ietf/nomcom/factories.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import factory
22
import random
33

4-
from ietf.nomcom.models import NomCom, Position, Feedback, Nominee, NomineePosition
4+
from ietf.nomcom.models import NomCom, Position, Feedback, Nominee, NomineePosition, Topic
55
from ietf.group.factories import GroupFactory
66
from ietf.person.factories import PersonFactory
77

@@ -122,6 +122,17 @@ def populate_personnel(obj, create, extracted, **kwargs): # pylint: disable=no-s
122122
p = PersonFactory()
123123
obj.group.role_set.create(name_id=role,person=p,email=p.email_set.first())
124124

125+
@factory.post_generation
126+
def populate_topics(obj, create, extracted, **kwargs): # pylint: disable=no-self-argument
127+
'''
128+
Create a set of topics unless the factory is called with populate_topics=False
129+
'''
130+
if extracted is None:
131+
extracted = True
132+
if create and extracted:
133+
for i in range(3):
134+
TopicFactory(nomcom=obj)
135+
125136
class PositionFactory(factory.DjangoModelFactory):
126137
class Meta:
127138
model = Position
@@ -155,3 +166,13 @@ class Meta:
155166
subject = factory.Faker('sentence')
156167
comments = factory.Faker('paragraph')
157168
type_id = 'comment'
169+
170+
class TopicFactory(factory.DjangoModelFactory):
171+
class Meta:
172+
model = Topic
173+
174+
nomcom = factory.SubFactory(NomComFactory)
175+
subject = factory.Faker('sentence')
176+
accepting_feedback = True
177+
audience_id = 'general'
178+

0 commit comments

Comments
 (0)