Skip to content

Commit 65804be

Browse files
committed
This is the second step towards ADs out of GroupInfo into Role.
The use of group.ad has been scrubbed from the code and templates. - Those places that set group.ad have been directly manipulate Role objects instead - Most places that read group.ad now use a new group.ad_role() that returns a Role object, simplifing some views. Related to ietf-tools#1555 and ietf-tools#1557. Commit ready for merge. - Legacy-Id: 8854
1 parent 4c9db8f commit 65804be

18 files changed

Lines changed: 45 additions & 43 deletions

File tree

ietf/doc/utils_charter.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ def default_action_text(group, charter, by):
125125
secr=group.role_set.filter(name="secr"),
126126
techadv=group.role_set.filter(name="techadv"),
127127
milestones=group.groupmilestone_set.filter(state="charter"),
128-
ad_email=group.ad.role_email("ad") if group.ad else None,
129128
action_type=action,
130129
))
131130

@@ -145,7 +144,6 @@ def default_review_text(group, charter, by):
145144
secr=group.role_set.filter(name="secr"),
146145
techadv=group.role_set.filter(name="techadv"),
147146
milestones=group.groupmilestone_set.filter(state="charter"),
148-
ad_email=group.ad.role_email("ad") if group.ad else None,
149147
review_date=(datetime.date.today() + datetime.timedelta(weeks=1)).isoformat(),
150148
review_type="new" if group.state_id == "proposed" else "recharter",
151149
)

ietf/doc/views_charter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ def submit(request, name=None, option=None):
387387
form.save(group, charter.rev)
388388

389389
if option in ['initcharter','recharter'] and charter.ad == None:
390-
charter.ad = group.ad
390+
charter.ad = getattr(group.ad_role(),'person',None)
391391

392392
charter.time = datetime.datetime.now()
393393
charter.save()

ietf/doc/views_draft.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -534,7 +534,7 @@ def to_iesg(request,name):
534534
notify = doc.notify
535535
if not notify:
536536
notify = get_initial_notify(doc)
537-
ad = doc.ad or doc.group.ad
537+
ad = doc.ad or getattr(doc.group.ad_role(),'person',None)
538538

539539
if request.method == 'POST':
540540

ietf/group/edit.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -238,16 +238,17 @@ def diff(attr, name):
238238
diff('name', "Name")
239239
diff('acronym', "Acronym")
240240
diff('state', "State")
241-
diff('ad', "Shepherding AD")
242241
diff('parent', "IETF Area")
243242
diff('list_email', "Mailing list email")
244243
diff('list_subscribe', "Mailing list subscribe address")
245244
diff('list_archive', "Mailing list archive")
246245

247246
personnel_change_text=""
248247
# update roles
249-
for attr, slug, title in [('chairs', 'chair', "Chairs"), ('secretaries', 'secr', "Secretaries"), ('techadv', 'techadv', "Tech Advisors"), ('delegates', 'delegate', "Delegates")]:
248+
for attr, slug, title in [('ad','ad','Shepherding AD'), ('chairs', 'chair', "Chairs"), ('secretaries', 'secr', "Secretaries"), ('techadv', 'techadv', "Tech Advisors"), ('delegates', 'delegate', "Delegates")]:
250249
new = clean[attr]
250+
if attr == 'ad':
251+
new = [ new.role_email('ad'),] if new else []
251252
old = Email.objects.filter(role__group=group, role__name=slug).select_related("person")
252253
if set(new) != set(old):
253254
changes.append(desc(title,
@@ -298,14 +299,15 @@ def diff(attr, name):
298299
return HttpResponseRedirect(group.about_url())
299300
else: # form.is_valid()
300301
if not new_group:
302+
ad_role = group.ad_role()
301303
init = dict(name=group.name,
302304
acronym=group.acronym,
303305
state=group.state,
304306
chairs=Email.objects.filter(role__group=group, role__name="chair"),
305307
secretaries=Email.objects.filter(role__group=group, role__name="secr"),
306308
techadv=Email.objects.filter(role__group=group, role__name="techadv"),
307309
delegates=Email.objects.filter(role__group=group, role__name="delegate"),
308-
ad=group.ad_id if group.ad else None,
310+
ad=ad_role and ad_role.person and ad_role.person.id,
309311
parent=group.parent.id if group.parent else None,
310312
list_email=group.list_email if group.list_email else None,
311313
list_subscribe=group.list_subscribe if group.list_subscribe else None,

ietf/group/info.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,16 @@ def roles(group, role_name):
6161
return Role.objects.filter(group=group, name=role_name).select_related("email", "person")
6262

6363
def fill_in_charter_info(group, include_drafts=False):
64-
group.areadirector = group.ad.role_email("ad", group.parent) if group.ad else None
64+
group.areadirector = getattr(group.ad_role(),'email',None)
6565

6666
personnel = {}
6767
for r in Role.objects.filter(group=group).select_related("email", "person", "name"):
6868
if r.name_id not in personnel:
6969
personnel[r.name_id] = []
7070
personnel[r.name_id].append(r)
7171

72-
if group.parent and group.parent.type_id == "area" and group.ad and "ad" not in personnel:
73-
ad_roles = list(Role.objects.filter(group=group.parent, name="ad", person=group.ad))
72+
if group.parent and group.parent.type_id == "area" and group.ad_role() and "ad" not in personnel:
73+
ad_roles = list(Role.objects.filter(group=group.parent, name="ad", person=group.ad_role().person))
7474
if ad_roles:
7575
personnel["ad"] = ad_roles
7676

ietf/group/mails.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ def wrap_up_email(to, text):
4444

4545
# first send to management and chairs
4646
to = []
47-
if group.ad:
48-
to.append(group.ad.role_email("ad").formatted_email())
47+
if group.ad_role():
48+
to.append(group.ad_role().email.formatted_email())
4949
elif group.type_id == "rg":
5050
to.append("IRTF Chair <irtf-chair@irtf.org>")
5151

@@ -66,8 +66,8 @@ def email_milestone_review_reminder(group, grace_period=7):
6666
"""Email reminders about milestones needing review to management."""
6767
to = []
6868

69-
if group.ad:
70-
to.append(group.ad.role_email("ad").formatted_email())
69+
if group.ad_role():
70+
to.append(group.ad_role().email.formatted_email())
7171
elif group.type_id == "rg":
7272
to.append("IRTF Chair <irtf-chair@irtf.org>")
7373

ietf/group/models.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,25 @@ def name_with_acronym(self):
3636
res += " %s (%s)" % (self.type, self.acronym)
3737
return res
3838

39+
def ad_role(self):
40+
return self.role_set.filter(name='ad').first()
41+
3942
@property
4043
def ad(self):
41-
ad_role = self.role_set.filter(name__slug='ad').first()
44+
#assert(False) # These methods are deprecated - expect them to go away when the _ad field is removed
45+
ad_role = self.ad_role()
4246
return ad_role and ad_role.person
4347

4448
@ad.setter
4549
def ad(self,value):
46-
self.role_set.filter(name__slug='ad').delete()
50+
#assert(False)
51+
self.role_set.filter(name='ad').delete()
4752
if value:
4853
self.role_set.create(name=RoleName.objects.get(slug='ad'), person=value, email=value.role_email('ad'))
4954

5055
@property
5156
def ad_id(self):
57+
#assert(False)
5258
return self.ad.id
5359

5460
@property
@@ -127,8 +133,8 @@ def json_dict(self, host_scheme):
127133
group1['parent_href'] = urljoin(host_scheme, self.parent.json_url())
128134
# uncomment when people URL handle is created
129135
try:
130-
if self.ad is not None:
131-
group1['ad_href'] = urljoin(host_scheme, self.ad.json_url())
136+
if self.ad_role() is not None:
137+
group1['ad_href'] = urljoin(host_scheme, self.ad_role().person.json_url())
132138
except Person.DoesNotExist:
133139
pass
134140
group1['list_email'] = self.list_email

ietf/group/tests_info.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def test_active_groups(self):
4242
self.assertTrue(group.parent.name in r.content)
4343
self.assertTrue(group.acronym in r.content)
4444
self.assertTrue(group.name in r.content)
45-
self.assertTrue(group.ad.plain_name() in r.content)
45+
self.assertTrue(group.ad_role().person.plain_name() in r.content)
4646

4747
url = urlreverse('ietf.group.info.active_groups', kwargs=dict(group_type="rg"))
4848
r = self.client.get(url)
@@ -77,7 +77,7 @@ def test_wg_summaries(self):
7777
self.assertEqual(r.status_code, 200)
7878
self.assertTrue(group.acronym in r.content)
7979
self.assertTrue(group.name in r.content)
80-
self.assertTrue(group.ad.plain_name() in r.content)
80+
self.assertTrue(group.ad_role().person.plain_name() in r.content)
8181
self.assertTrue(chair.address in r.content)
8282
self.assertTrue("This is a charter." in r.content)
8383

@@ -86,7 +86,7 @@ def test_wg_summaries(self):
8686
self.assertEqual(r.status_code, 200)
8787
self.assertTrue(group.acronym in r.content)
8888
self.assertTrue(group.name in r.content)
89-
self.assertTrue(group.ad.plain_name() in r.content)
89+
self.assertTrue(group.ad_role().person.plain_name() in r.content)
9090
self.assertTrue(chair.address in r.content)
9191
self.assertTrue("This is a charter." in r.content)
9292

@@ -424,7 +424,7 @@ def test_edit_info(self):
424424
group = Group.objects.get(acronym="mars")
425425
self.assertEqual(group.name, "Mars Not Special Interest Group")
426426
self.assertEqual(group.parent, area)
427-
self.assertEqual(group.ad, ad)
427+
self.assertEqual(group.ad_role().person, ad)
428428
for k in ("chair", "secr", "techadv"):
429429
self.assertTrue(group.role_set.filter(name=k, email__address="aread@ietf.org"))
430430
self.assertTrue(group.role_set.filter(name="delegate", email__address="ad2@ietf.org"))
@@ -707,7 +707,7 @@ def test_edit_milestone(self):
707707
self.assertTrue("Changed milestone" in m.milestonegroupevent_set.all()[0].desc)
708708
self.assertEqual(len(outbox), mailbox_before + 2)
709709
self.assertTrue("Milestones changed" in outbox[-2]["Subject"])
710-
self.assertTrue(group.ad.role_email("ad").address in str(outbox[-2]))
710+
self.assertTrue(group.ad_role().email.address in str(outbox[-2]))
711711
self.assertTrue("Milestones changed" in outbox[-1]["Subject"])
712712
self.assertTrue(group.list_email in str(outbox[-1]))
713713

ietf/group/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def get_group_ads_emails(wg):
6161
return get_area_ads_emails(wg.parent)
6262

6363
# As fallback, just return the single ad within the wg
64-
return [wg.ad and wg.ad.email_address()]
64+
return [wg.ad_role() and wg.ad_role().email.address]
6565

6666
def get_group_chairs_emails(wg):
6767
" Get list of area chairs' emails for a given WG "

ietf/iesg/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def agenda_json(request, date=None):
114114
'rev': doc.rev,
115115
'wgname': doc.group.name,
116116
'acronym': doc.group.acronym,
117-
'ad': doc.group.ad.name if doc.group.ad else None,
117+
'ad': doc.group.ad_role().person.name if doc.group.ad_role() else None,
118118
}
119119

120120
# consider moving the charters to "docs" like the other documents
@@ -446,8 +446,8 @@ def milestones_needing_review(request):
446446
# collect milestones, grouped on AD and group
447447
ads = {}
448448
for m in GroupMilestone.objects.filter(state="review").exclude(group__state="concluded").distinct().select_related("group"):
449-
if m.group.ad:
450-
groups = ads.setdefault(m.group.ad, {})
449+
if m.group.ad_role():
450+
groups = ads.setdefault(m.group.ad_role().person, {})
451451
milestones = groups.setdefault(m.group, [])
452452
milestones.append(m)
453453

0 commit comments

Comments
 (0)