Skip to content

Commit 5c5d534

Browse files
committed
Add person foreign key on Role to link the role and person directly instead of through Email, this will allow us to use non-personal emails on roles
- Legacy-Id: 3418
1 parent 7f5fd62 commit 5c5d534

26 files changed

Lines changed: 109 additions & 88 deletions

File tree

ietf/announcements/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def nomcomREDESIGN(request):
5252
e = n.latest_event(type="concluded")
5353
n.end_year = e.time.year if e else ""
5454

55-
chair = n.role_set.get(name="chair").email
55+
chair = n.role_set.get(name="chair").person
5656
announcements = Message.objects.filter(related_groups=n).order_by('-time')
5757
for a in announcements:
5858
a.to_name = address_re.sub("", a.to)

ietf/idrfc/idrfc_wrapper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ def _init(self):
710710
return
711711

712712
from redesign.person.models import Person
713-
active_ads = Person.objects.filter(email__role__name="ad", email__role__group__state="active").distinct()
713+
active_ads = Person.objects.filter(role__name="ad", role__group__state="active").distinct()
714714

715715
positions = []
716716
seen = {}

ietf/idrfc/mails.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ def generate_approval_mail_approved(request, doc):
313313
made_by = "This document is the product of the %s." % doc.group.name_with_wg
314314

315315
director = doc.ad
316-
other_director = Person.objects.filter(email__role__group__role__email__person=director, email__role__group__role__name="ad").exclude(pk=director.pk)
316+
other_director = Person.objects.filter(role__group__role__person=director, role__group__role__name="ad").exclude(pk=director.pk)
317317

318318
if doc.group.type_id != "individ" and other_director:
319319
contacts = "The IESG contact persons are %s and %s." % (director.name, other_director[0].name)
@@ -497,7 +497,7 @@ def generate_issue_ballot_mailREDESIGN(request, doc):
497497
full_status = full_intended_status(doc.intended_std_level.name)
498498
status = full_status.replace("a ", "").replace("an ", "")
499499

500-
active_ads = Person.objects.filter(email__role__name="ad", email__role__group__state="active").distinct()
500+
active_ads = Person.objects.filter(role__name="ad", role__group__state="active").distinct()
501501

502502
e = doc.latest_event(type="started_iesg_process")
503503
positions = BallotPositionDocEvent.objects.filter(doc=doc, type="changed_ballot_position", time__gte=e.time).order_by("-time", '-id').select_related('ad')

ietf/idrfc/views_edit.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ class EditInfoFormREDESIGN(forms.Form):
382382
intended_std_level = forms.ModelChoiceField(IntendedStdLevelName.objects.all(), empty_label=None, required=True)
383383
status_date = forms.DateField(required=False, help_text="Format is YYYY-MM-DD")
384384
via_rfc_editor = forms.BooleanField(required=False, label="Via IRTF or RFC Editor")
385-
ad = forms.ModelChoiceField(Person.objects.filter(email__role__name="ad", email__role__group__state="active").order_by('name'), label="Responsible AD", empty_label=None, required=True)
385+
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'), label="Responsible AD", empty_label=None, required=True)
386386
create_in_state = forms.ModelChoiceField(IesgDocStateName.objects.filter(slug__in=("pub-req", "watching")), empty_label=None, required=True)
387387
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas", required=False)
388388
note = forms.CharField(widget=forms.Textarea, label="IESG note", required=False)

ietf/idrfc/views_search.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,9 @@ class SearchForm(forms.Form):
298298
def __init__(self, *args, **kwargs):
299299
super(SearchForm, self).__init__(*args, **kwargs)
300300
responsible = Document.objects.values_list('ad', flat=True).distinct()
301-
active_ads = list(Person.objects.filter(email__role__name="ad",
302-
email__role__group__type="area",
303-
email__role__group__state="active").distinct())
301+
active_ads = list(Person.objects.filter(role__name="ad",
302+
role__group__type="area",
303+
role__group__state="active").distinct())
304304
inactive_ads = list(Person.objects.filter(pk__in=responsible)
305305
.exclude(pk__in=[x.pk for x in active_ads]))
306306
extract_last_name = lambda x: x.name_parts()[3]
@@ -382,8 +382,8 @@ def add(allow, states):
382382
docs = docs.filter(group__acronym=query["group"])
383383
elif by == "area":
384384
docs = docs.filter(Q(group__parent=query["area"]) |
385-
Q(ad__email__role__name="ad",
386-
ad__email__role__group=query["area"]))
385+
Q(ad__role__name="ad",
386+
ad__role__group=query["area"]))
387387
elif by == "ad":
388388
docs = docs.filter(ad=query["ad"])
389389
elif by == "state":
@@ -571,9 +571,9 @@ def by_ad(request, name):
571571
ad_name = None
572572
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
573573
responsible = Document.objects.values_list('ad', flat=True).distinct()
574-
for p in Person.objects.filter(Q(email__role__name="ad",
575-
email__role__group__type="area",
576-
email__role__group__state="active")
574+
for p in Person.objects.filter(Q(role__name="ad",
575+
role__group__type="area",
576+
role__group__state="active")
577577
| Q(pk__in=responsible)):
578578
if name == p.name.lower().replace(" ", "."):
579579
ad_id = p.id

ietf/idtracker/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,7 @@ class Role(models.Model):
10601060
IAB_EXCUTIVE_DIRECTOR = 4
10611061
IRTF_CHAIR = 5
10621062
IAD_CHAIR = 6
1063+
RSOC_CHAIR = 7
10631064

10641065
# This __str__ makes it odd to use as a ForeignKey.
10651066
def __str__(self):

ietf/ietfauth/decorators.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,8 @@ def has_role(user, role_names):
8484
return False
8585

8686
role_qs = {
87-
"Area Director": Q(email__person=person, name="ad", group__state="active"),
88-
"Secretariat": Q(email__person=person, name="secr", group__acronym="secretariat")
87+
"Area Director": Q(person=person, name="ad", group__type="area", group__state="active"),
88+
"Secretariat": Q(person=person, name="secr", group__acronym="secretariat")
8989
}
9090

9191
filter_expr = Q()
@@ -108,4 +108,5 @@ def decorate(view_func):
108108
return decorate
109109

110110
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
111+
# overwrite group_required
111112
group_required = lambda *group_names: role_required(*[n.replace("Area_Director", "Area Director") for n in group_names])

ietf/ietfauth/views.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def profile(request):
7777
person = None
7878
try:
7979
person = request.user.get_profile()
80-
roles = Role.objects.filter(email__person=person).distinct()
80+
roles = Role.objects.filter(person=person)
8181
except Person.DoesNotExist:
8282
pass
8383

ietf/ietfworkflows/accounts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ def is_wgchair(person):
2121
return bool(person.wgchair_set.all())
2222

2323
def is_wgchairREDESIGN(person):
24-
return bool(Role.objects.filter(name="chair", group__type="wg", group__state="active", email__person=person))
24+
return bool(Role.objects.filter(name="chair", group__type="wg", group__state="active", person=person))
2525

2626

2727
def is_wgdelegate(person):
2828
return bool(person.wgdelegate_set.all())
2929

3030
def is_delegateREDESIGN(person):
31-
return bool(Role.objects.filter(name="delegate", group__type="wg", group__state="active", email__person=person))
31+
return bool(Role.objects.filter(name="delegate", group__type="wg", group__state="active", person=person))
3232

3333

3434
def is_chair_of_draft(user, draft):
@@ -47,7 +47,7 @@ def is_chair_of_draftREDESIGN(user, draft):
4747
if not user.is_authenticated() or not user.get_profile() or not draft.group:
4848
return False
4949

50-
return bool(Role.objects.filter(name="chair", group=draft.group, email__person=user.get_profile()))
50+
return bool(Role.objects.filter(name="chair", group=draft.group, person=user.get_profile()))
5151

5252
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
5353
from ietf.wgchairs.accounts import is_secretariat, get_person_for_user

ietf/liaisons/accountsREDESIGN.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,27 @@ def get_person_for_user(user):
4343

4444

4545
def is_areadirector(person):
46-
return bool(Role.objects.filter(email__person=person, name="ad", group__state="active", group__type="area"))
46+
return bool(Role.objects.filter(person=person, name="ad", group__state="active", group__type="area"))
4747

4848

4949
def is_wgchair(person):
50-
return bool(Role.objects.filter(email__person=person, name="chair", group__state="active", group__type="wg"))
50+
return bool(Role.objects.filter(person=person, name="chair", group__state="active", group__type="wg"))
5151

5252

5353
def is_wgsecretary(person):
54-
return bool(Role.objects.filter(email__person=person, name="sec", group__state="active", group__type="wg"))
54+
return bool(Role.objects.filter(person=person, name="sec", group__state="active", group__type="wg"))
5555

5656

5757
def is_ietfchair(person):
58-
return bool(Role.objects.filter(email__person=person, name="chair", group__acronym="ietf"))
58+
return bool(Role.objects.filter(person=person, name="chair", group__acronym="ietf"))
5959

6060

6161
def is_iabchair(person):
62-
return bool(Role.objects.filter(email__person=person, name="chair", group__acronym="iab"))
62+
return bool(Role.objects.filter(person=person, name="chair", group__acronym="iab"))
6363

6464

6565
def is_iab_executive_director(person):
66-
return bool(Role.objects.filter(email__person=person, name="execdir", group__acronym="iab"))
66+
return bool(Role.objects.filter(person=person, name="execdir", group__acronym="iab"))
6767

6868

6969
def can_add_outgoing_liaison(user):
@@ -80,15 +80,15 @@ def can_add_outgoing_liaison(user):
8080

8181

8282
def is_sdo_liaison_manager(person):
83-
return bool(Role.objects.filter(email__person=person, name="liaiman", group__type="sdo"))
83+
return bool(Role.objects.filter(person=person, name="liaiman", group__type="sdo"))
8484

8585

8686
def is_sdo_authorized_individual(person):
87-
return bool(Role.objects.filter(email__person=person, name="auth", group__type="sdo"))
87+
return bool(Role.objects.filter(person=person, name="auth", group__type="sdo"))
8888

8989

9090
def is_secretariat(user):
91-
return user.is_authenticated() and bool(Role.objects.filter(email__person__user=user, name="secr", group__acronym="secretariat"))
91+
return user.is_authenticated() and bool(Role.objects.filter(person__user=user, name="secr", group__acronym="secretariat"))
9292

9393

9494
def can_add_incoming_liaison(user):
@@ -109,13 +109,13 @@ def can_add_liaison(user):
109109

110110
def is_sdo_manager_for_outgoing_liaison(person, liaison):
111111
if liaison.from_group and liaison.from_group.type_id == "sdo":
112-
return bool(liaison.from_group.role_set.filter(name="liaiman", email__person=person))
112+
return bool(liaison.from_group.role_set.filter(name="liaiman", person=person))
113113
return False
114114

115115

116116
def is_sdo_manager_for_incoming_liaison(person, liaison):
117117
if liaison.to_group and liaison.to_group.type_id == "sdo":
118-
return bool(liaison.to_group.role_set.filter(name="liaiman", email__person=person))
118+
return bool(liaison.to_group.role_set.filter(name="liaiman", person=person))
119119
return False
120120

121121

0 commit comments

Comments
 (0)