Skip to content

Commit a33f972

Browse files
committed
Merged in [17201] from rjsparks@nostrum.com:
Make it easier for the nomcom chair to manage generic IESG requirements. Fixes ietf-tools#2794. - Legacy-Id: 17216 Note: SVN reference [17201] has been migrated to Git commit c9d944b
2 parents e80daea + c9d944b commit a33f972

11 files changed

Lines changed: 113 additions & 13 deletions

File tree

ietf/dbtemplate/fixtures/nomcom_templates.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,10 @@ The questionaire is repeated below for your convenience.
181181
Describe the topic and add any information/instructions for the responder here.
182182
</field>
183183
</object>
184+
<object pk="13" model="dbtemplate.dbtemplate">
185+
<field type="CharField" name="path">/nomcom/defaults/iesg_requirements</field>
186+
<field type="CharField" name="title">Generic IESG Requirements</field>
187+
<field to="name.dbtemplatetypename" name="type" rel="ManyToOneRel">rst</field>
188+
<field type="TextField" name="content">Generic IESG Requirements Yo!</field>
189+
</object>
184190
</django-objects>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Copyright The IETF Trust 2020, All Rights Reserved
2+
# -*- coding: utf-8 -*-
3+
# Generated by Django 1.11.27 on 2020-01-07 09:25
4+
from __future__ import unicode_literals
5+
6+
from django.db import migrations
7+
8+
def forward(apps, schema_editor):
9+
DBTemplate = apps.get_model('dbtemplate', 'DBTemplate')
10+
DBTemplate.objects.create(path='/nomcom/defaults/iesg_requirements', type_id='rst', title='Generic IESG requirements',
11+
content="""=============================
12+
IESG MEMBER DESIRED EXPERTISE
13+
=============================
14+
15+
Place this year's Generic IESG Member Desired Expertise here.
16+
17+
This template uses reStructured text for formatting. Feel free to use it (to change the above header for example).
18+
""")
19+
20+
def reverse(apps, schema_editor):
21+
DBTemplate = apps.get_model('dbtemplate', 'DBTemplate')
22+
DBTemplate.objects.filter(path='/nomcom/defaults/iesg_requirements').delete()
23+
24+
class Migration(migrations.Migration):
25+
26+
dependencies = [
27+
('dbtemplate', '0007_adjust_review_assigned'),
28+
]
29+
30+
operations = [
31+
migrations.RunPython(forward, reverse)
32+
]

ietf/nomcom/forms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2012-2019, All Rights Reserved
1+
# Copyright The IETF Trust 2012-2020, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

44

@@ -603,7 +603,7 @@ class PositionForm(forms.ModelForm):
603603

604604
class Meta:
605605
model = Position
606-
fields = ('name', 'is_open', 'accepting_nominations', 'accepting_feedback')
606+
fields = ('name', 'is_iesg_position', 'is_open', 'accepting_nominations', 'accepting_feedback')
607607

608608
def __init__(self, *args, **kwargs):
609609
self.nomcom = kwargs.pop('nomcom', None)

ietf/nomcom/management/commands/make_dummy_nomcom.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2017-2019, All Rights Reserved
1+
# Copyright The IETF Trust 2017-2020, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

44

@@ -56,7 +56,7 @@ def handle(self, *args, **options):
5656
e.person.user.set_password('password')
5757
e.person.user.save()
5858
NomineePositionFactory(nominee__nomcom=nc, nominee__person=e.person,
59-
position__nomcom=nc, position__name='Dummy Area Director',
59+
position__nomcom=nc, position__name='Dummy Area Director', position__is_iesg_position=True,
6060
)
6161

6262
self.stdout.write("%s\n" % key)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Copyright The IETF Trust 2020, All Rights Reserved
2+
# -*- coding: utf-8 -*-
3+
# Generated by Django 1.11.27 on 2020-01-07 14:41
4+
from __future__ import unicode_literals
5+
6+
from django.db import migrations, models
7+
8+
9+
class Migration(migrations.Migration):
10+
11+
dependencies = [
12+
('nomcom', '0006_auto_20190716_1216'),
13+
]
14+
15+
operations = [
16+
migrations.AddField(
17+
model_name='position',
18+
name='is_iesg_position',
19+
field=models.BooleanField(default=False, verbose_name='Is IESG Position'),
20+
),
21+
]

ietf/nomcom/models.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2012-2019, All Rights Reserved
1+
# Copyright The IETF Trust 2012-2020, All Rights Reserved
22
# -*- coding: utf-8 -*-
33
from __future__ import absolute_import, print_function, unicode_literals
44

@@ -202,6 +202,11 @@ class Position(models.Model):
202202
is_open = models.BooleanField(verbose_name='Is open', default=False, help_text="Set is_open when the nomcom is working on a position. Clear it when an appointment is confirmed.")
203203
accepting_nominations = models.BooleanField(verbose_name='Is accepting nominations', default=False)
204204
accepting_feedback = models.BooleanField(verbose_name='Is accepting feedback', default=False)
205+
# To generalize the generic requirements code, change this to a FK to a
206+
# NameModel subclass which enumerates the generic requirement DBtemplates
207+
# under /nomcom/defaults/, e.g., iesg_requirements; and use that to fetch
208+
# the generic template in .get_requirements():
209+
is_iesg_position = models.BooleanField(verbose_name='Is IESG Position', default=False)
205210

206211
objects = PositionManager()
207212

@@ -235,10 +240,19 @@ def get_questionnaire(self):
235240
return render_to_string(self.questionnaire.path, {'position': self})
236241

237242
def get_requirement(self):
238-
rendered = render_to_string(self.requirement.path, {'position': self})
243+
specific_reqs = render_to_string(self.requirement.path, {'position': self})
239244
if self.requirement.type_id=='plain':
240-
rendered = linebreaks(rendered)
241-
return rendered
245+
specific_reqs = linebreaks(specific_reqs)
246+
247+
generic_iesg_template = DBTemplate.objects.filter(group=self.nomcom.group,path__endswith='iesg_requirements').first()
248+
249+
if self.is_iesg_position and generic_iesg_template:
250+
generic_iesg_reqs = render_to_string(generic_iesg_template.path, {})
251+
if generic_iesg_template.type_id=='plain':
252+
generic_iesg_reqs = linebreaks(generic_iesg_reqs)
253+
return render_to_string("nomcom/iesg_position_requirements.html", dict(position=self, generic_iesg_reqs=generic_iesg_reqs, specific_reqs=specific_reqs))
254+
else:
255+
return specific_reqs
242256

243257
@python_2_unicode_compatible
244258
class Topic(models.Model):

ietf/nomcom/test_data.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2012-2019, All Rights Reserved
1+
# Copyright The IETF Trust 2012-2020, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

44

@@ -141,7 +141,8 @@ def nomcom_test_data():
141141
name=name,
142142
is_open=True,
143143
accepting_nominations=True,
144-
accepting_feedback=True)
144+
accepting_feedback=True,
145+
is_iesg_position=POSITIONS.index(name) < 9)
145146

146147
ChangeStateGroupEvent.objects.get_or_create(group=group,
147148
type="changed_state",

ietf/nomcom/utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright The IETF Trust 2012-2019, All Rights Reserved
1+
# Copyright The IETF Trust 2012-2020, All Rights Reserved
22
# -*- coding: utf-8 -*-
33

44

@@ -47,6 +47,7 @@
4747
NOMINATION_RECEIPT_TEMPLATE = 'email/nomination_receipt.txt'
4848
FEEDBACK_RECEIPT_TEMPLATE = 'email/feedback_receipt.txt'
4949
DESCRIPTION_TEMPLATE = 'topic/description'
50+
IESG_GENERIC_REQUIREMENTS_TEMPLATE = 'iesg_requirements'
5051

5152
DEFAULT_NOMCOM_TEMPLATES = [HOME_TEMPLATE,
5253
INEXISTENT_PERSON_TEMPLATE,
@@ -55,7 +56,9 @@
5556
NOMINEE_ACCEPT_REMINDER_TEMPLATE,
5657
NOMINEE_QUESTIONNAIRE_REMINDER_TEMPLATE,
5758
NOMINATION_RECEIPT_TEMPLATE,
58-
FEEDBACK_RECEIPT_TEMPLATE]
59+
FEEDBACK_RECEIPT_TEMPLATE,
60+
IESG_GENERIC_REQUIREMENTS_TEMPLATE,
61+
]
5962

6063

6164
def get_nomcom_by_year(year):
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<div class="panel panel-default">
2+
<div class="panel-heading"><a data-toggle="collapse" href="#generic_iesg_reqs" id="generic_iesg_reqs_header">General IESG Requirements</a></div>
3+
<div id="generic_iesg_reqs" class="panel-body collapse in">
4+
{{generic_iesg_reqs|safe}}
5+
</div>
6+
</div>
7+
<div class="panel panel-default">
8+
<div class="panel-heading">{{position.name}} Specific Requirements</div>
9+
<div class="panel-body">
10+
{{specific_reqs|safe}}
11+
</div>
12+
</div>

ietf/templates/nomcom/list_positions.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ <h2>Positions in {{ nomcom.group }}</h2>
2020
<div class="panel-heading"><h3>{{ group.grouper| yesno:"Open Positions,Closed Positions"}}</h3></div>
2121
<div class="panel-body">
2222
{% for position in group.list %}
23-
<h4>{{ position.name }}</h4>
23+
<h4>{{ position.name }}{% if position.is_iesg_position %} (IESG){% endif %}</h4>
2424
{% if group.grouper %}
2525
<dl class="dl-horizontal">
2626
<dt>Accepting</dt>

0 commit comments

Comments
 (0)