Skip to content

Commit 401cab1

Browse files
committed
add sort_key functionality back, support multi-campaign status view
1 parent 2a3c910 commit 401cab1

2 files changed

Lines changed: 22 additions & 5 deletions

File tree

Appraise/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,8 @@
188188
name='pairwise-assessment-document',
189189
),
190190
re_path(
191-
r'^campaign-status/(?P<campaign_name>[a-zA-Z0-9]+)/'
192-
r'(?P<sort_key>[0123456])?/?$',
191+
r'^campaign-status/(?P<campaign_name>[a-zA-Z0-9]+(,[a-zA-Z0-9]+))*/'
192+
r'(?P<sort_key>[a-zA-Z0-9_])?/?$',
193193
campaign_views.campaign_status,
194194
name='campaign_status',
195195
),

Campaign/views.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
LOGGER = _get_logger(name=__name__)
3333

3434

35-
def campaign_status(request, campaign_name):
35+
def campaign_status(request, campaign_name, sort_key=None):
3636
"""
3737
Campaign status view with completion details.
3838
"""
@@ -41,6 +41,19 @@ def campaign_status(request, campaign_name):
4141
request.user.username or "Anonymous",
4242
)
4343

44+
if "," in campaign_name:
45+
responses = [campaign_status(request, name, sort_key) for name in campaign_name.split(",")]
46+
if not all([response.headers["Content-Type"] == responses[0].headers["Content-Type"] for response in responses]):
47+
return HttpResponse(
48+
'ERROR: You are mixing unrelated campaigns (views.py:campaign_status).',
49+
content_type='text/plain',
50+
)
51+
else:
52+
return HttpResponse(
53+
"\n\n".join([response.content.decode('utf-8') for response in responses]),
54+
content_type=responses[0].headers["Content-Type"],
55+
)
56+
4457
# Get Campaign instance for campaign name
4558
try:
4659
campaign = _get_campaign_instance(campaign_name)
@@ -66,7 +79,11 @@ def campaign_status(request, campaign_name):
6679
# special handling for ESA
6780
if "esa" in campaign_opts:
6881
return campaign_status_esa(campaign)
82+
else:
83+
return campaign_status_plain(request, campaign, result_type, campaign_opts, sort_key)
84+
6985

86+
def campaign_status_plain(request, campaign, result_type, campaign_opts, sort_key):
7087
_out = []
7188
for team in campaign.teams.all():
7289
for user in team.members.all():
@@ -202,7 +219,7 @@ def campaign_status(request, campaign_name):
202219

203220
_out.append(_item)
204221

205-
_out.sort(key=lambda x: x[2])
222+
_out.sort(key=lambda x: x[sort_key if sort_key else 2])
206223

207224
_header = (
208225
'username',
@@ -250,7 +267,7 @@ def campaign_status_esa(campaign) -> str:
250267
out_str += "<tr>" + "".join(
251268
f"<th>{x}</th>" for x in ["Username", "Progress", "First Modified", "Last Modified", "Time (Last-First)", "Time (Real)"]
252269
) + "</tr>\n"
253-
270+
254271
for team in campaign.teams.all():
255272
for user in team.members.all():
256273
if user.is_staff:

0 commit comments

Comments
 (0)