Skip to content

Commit be1c255

Browse files
committed
Merged in [8854] from rjsparks@nostrum.com:
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. - Legacy-Id: 8888 Note: SVN reference [8854] has been migrated to Git commit 65804be
2 parents f6e97e7 + 65804be commit be1c255

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
@@ -47,8 +47,8 @@ def wrap_up_email(to, text):
4747

4848
# first send to management and chairs
4949
to = []
50-
if group.ad:
51-
to.append(group.ad.role_email("ad").formatted_email())
50+
if group.ad_role():
51+
to.append(group.ad_role().email.formatted_email())
5252
elif group.type_id == "rg":
5353
to.append("IRTF Chair <irtf-chair@irtf.org>")
5454

@@ -71,8 +71,8 @@ def email_milestone_review_reminder(group, grace_period=7):
7171
"""Email reminders about milestones needing review to management."""
7272
to = []
7373

74-
if group.ad:
75-
to.append(group.ad.role_email("ad").formatted_email())
74+
if group.ad_role():
75+
to.append(group.ad_role().email.formatted_email())
7676
elif group.type_id == "rg":
7777
to.append("IRTF Chair <irtf-chair@irtf.org>")
7878

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"))
@@ -714,7 +714,7 @@ def test_edit_milestone(self):
714714
self.assertTrue("Changed milestone" in m.milestonegroupevent_set.all()[0].desc)
715715
self.assertEqual(len(outbox), mailbox_before + 2)
716716
self.assertTrue("Milestones changed" in outbox[-2]["Subject"])
717-
self.assertTrue(group.ad.role_email("ad").address in str(outbox[-2]))
717+
self.assertTrue(group.ad_role().email.address in str(outbox[-2]))
718718
self.assertTrue("Milestones changed" in outbox[-1]["Subject"])
719719
self.assertTrue(group.list_email in str(outbox[-1]))
720720

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)