4141from django .core .urlresolvers import reverse as urlreverse
4242
4343from ietf .doc .views_search import SearchForm , retrieve_search_results
44- from ietf .ipr .models import IprDetail
45- from ietf .group .models import Group , GroupURL
44+ from ietf .group .models import Group , GroupURL , Role
4645from ietf .doc .models import State , DocAlias , RelatedDocument
4746from ietf .doc .utils import get_chartering_type
48- from ietf .person .models import Email
4947from ietf .group .utils import get_charter_text
5048from ietf .doc .templatetags .ietf_filters import clean_whitespace
5149from ietf .ietfauth .utils import has_role
5250
51+ def roles (group , role_name ):
52+ return Role .objects .filter (group = group , name = role_name ).select_related ("email" , "person" )
5353
5454def fill_in_charter_info (group , include_drafts = False ):
5555 group .areadirector = group .ad .role_email ("ad" , group .parent ) if group .ad else None
56- group .chairs = Email . objects . filter ( role__group = group , role__name = "chair" ). select_related ( "person " )
57- group .techadvisors = Email . objects . filter ( role__group = group , role__name = "techadv" ). select_related ( "person " )
58- group .editors = Email . objects . filter ( role__group = group , role__name = "editor" ). select_related ( "person " )
59- group .secretaries = Email . objects . filter ( role__group = group , role__name = "secr" ). select_related ( "person " )
56+ group .chairs = roles ( group , "chair" )
57+ group .techadvisors = roles ( group , "techadv" )
58+ group .editors = roles ( group , "editor" )
59+ group .secretaries = roles ( group , "secr" )
6060 milestone_state = "charter" if group .state_id == "proposed" else "active"
6161 group .milestones = group .groupmilestone_set .filter (state = milestone_state ).order_by ('due' )
6262
@@ -77,19 +77,16 @@ def fill_in_charter_info(group, include_drafts=False):
7777 a .rel = RelatedDocument .objects .filter (source = a .document ).distinct ()
7878 a .invrel = RelatedDocument .objects .filter (target = a ).distinct ()
7979
80- def extract_last_name (email ):
81- return email .person .name_parts ()[3 ]
82-
83- def extract_group_chairs (group ):
84- return sorted (Email .objects .filter (role__group = group , role__name = "chair" ).select_related ("person" ), key = extract_last_name )
80+ def extract_last_name (role ):
81+ return role .person .name_parts ()[3 ]
8582
8683def wg_summary_area (request ):
8784 areas = Group .objects .filter (type = "area" , state = "active" ).order_by ("name" )
8885 for area in areas :
89- area .ads = sorted (Email . objects . filter ( role__group = area , role__name = "ad" ). select_related ( "person " ), key = extract_last_name )
86+ area .ads = sorted (roles ( area , "ad" ), key = extract_last_name )
9087 area .groups = Group .objects .filter (parent = area , type = "wg" , state = "active" ).order_by ("acronym" )
9188 for group in area .groups :
92- group .chairs = extract_group_chairs ( group )
89+ group .chairs = sorted ( roles ( group , "chair" ), key = extract_last_name )
9390
9491 areas = [a for a in areas if a .groups ]
9592
@@ -101,7 +98,7 @@ def wg_summary_acronym(request):
10198 areas = Group .objects .filter (type = "area" , state = "active" ).order_by ("name" )
10299 groups = Group .objects .filter (type = "wg" , state = "active" ).order_by ("acronym" ).select_related ("parent" )
103100 for group in groups :
104- group .chairs = extract_group_chairs ( group )
101+ group .chairs = sorted ( roles ( group , "chair" ), key = extract_last_name )
105102 return render_to_response ('wginfo/1wg-summary-by-acronym.txt' ,
106103 { 'areas' : areas ,
107104 'groups' : groups },
@@ -110,7 +107,7 @@ def wg_summary_acronym(request):
110107def wg_charters (request ):
111108 areas = Group .objects .filter (type = "area" , state = "active" ).order_by ("name" )
112109 for area in areas :
113- area .ads = sorted (Email . objects . filter ( role__group = area , role__name = "ad" ). select_related ( "person " ), key = extract_last_name )
110+ area .ads = sorted (roles ( area , "ad" ), key = extract_last_name )
114111 area .groups = Group .objects .filter (parent = area , type = "wg" , state = "active" ).order_by ("name" )
115112 for group in area .groups :
116113 fill_in_charter_info (group , include_drafts = True )
@@ -123,7 +120,7 @@ def wg_charters_by_acronym(request):
123120 areas = dict ((a .id , a ) for a in Group .objects .filter (type = "area" , state = "active" ).order_by ("name" ))
124121
125122 for area in areas .itervalues ():
126- area .ads = sorted (Email . objects . filter ( role__group = area , role__name = "ad" ). select_related ( "person " ), key = extract_last_name )
123+ area .ads = sorted (roles ( area , "ad" ), key = extract_last_name )
127124
128125 groups = Group .objects .filter (type = "wg" , state = "active" ).exclude (parent = None ).order_by ("acronym" )
129126 for group in groups :
@@ -137,20 +134,13 @@ def active_wgs(request):
137134 areas = Group .objects .filter (type = "area" , state = "active" ).order_by ("name" )
138135 for area in areas :
139136 # dig out information for template
140- area .ads = []
141- for e in Email .objects .filter (role__group = area , role__name = "ad" ).select_related ("person" ):
142- e .incoming = False
143- area .ads .append (e )
144-
145- for e in Email .objects .filter (role__group = area , role__name = "pre-ad" ).select_related ("person" ):
146- e .incoming = True
147- area .ads .append (e )
137+ area .ads = (list (sorted (roles (area , "ad" ), key = extract_last_name ))
138+ + list (sorted (roles (area , "pre-ad" ), key = extract_last_name )))
148139
149- area .ads .sort (key = lambda e : (e .incoming , extract_last_name (e )))
150- area .wgs = Group .objects .filter (parent = area , type = "wg" , state = "active" ).order_by ("acronym" )
140+ area .groups = Group .objects .filter (parent = area , type = "wg" , state = "active" ).order_by ("acronym" )
151141 area .urls = area .groupurl_set .all ().order_by ("name" )
152- for wg in area .wgs :
153- wg .chairs = extract_group_chairs ( wg )
142+ for group in area .groups :
143+ group .chairs = sorted ( roles ( group , "chair" ), key = extract_last_name )
154144
155145 return render_to_response ('wginfo/active_wgs.html' , {'areas' :areas }, RequestContext (request ))
156146
@@ -275,7 +265,7 @@ def group_charter(request, acronym):
275265 group = get_object_or_404 (Group , type = "wg" , acronym = acronym )
276266
277267 fill_in_charter_info (group , include_drafts = False )
278- group .delegates = Email . objects . filter ( role__group = group , role__name = "delegate" ). select_related ( "person " )
268+ group .delegates = roles ( group , "delegate" )
279269
280270 e = group .latest_event (type__in = ("changed_state" , "requested_close" ,))
281271 requested_close = group .state_id != "conclude" and e and e .type == "requested_close"
0 commit comments