From 0ab1cf80c700958efd7b18563367c272398743a7 Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Thu, 19 Mar 2026 15:12:59 +0100 Subject: [PATCH 1/8] add competition title, competition creation date and scores in the csv generated in django admin in the submission view --- src/apps/competitions/admin.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/apps/competitions/admin.py b/src/apps/competitions/admin.py index 769888db8..d9df4db54 100644 --- a/src/apps/competitions/admin.py +++ b/src/apps/competitions/admin.py @@ -92,9 +92,16 @@ def SubmissionsExport_as_csv(modeladmin, request, queryset): headers={"Content-Disposition": 'attachment; filename="submissions.csv"'}, ) writer = csv.writer(response) - writer.writerow(["ID", "Owner", "Status", "Task", "Phase", "Queue"]) + writer.writerow(["ID", "Owner", "Status", "Task", "Phase", "Competition Title", "Competition creation date", "Scores"]) for obj in queryset: - writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.queue]) + scores_list = [] + for scores in obj.scores.all(): + scores_list.append(scores.score) + if obj.task is not None: + if len(scores_list) == 0: + writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, "None"]) + else: + writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, scores_list[0]]) return response From c6391cd7d8bae23a70158318484b828740c3e491 Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Mon, 23 Mar 2026 17:03:27 +0100 Subject: [PATCH 2/8] add back queue name, add score in csv created by organizer, ruff formatting on admin.py --- src/apps/api/views/submissions.py | 1 + src/apps/competitions/admin.py | 45 ++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index c52d554c5..e84fa1119 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -291,6 +291,7 @@ def get_renderer_context(self): 'created_when': 'Created When', 'status': 'Status', 'phase_name': 'Phase', + 'scores.0.score': 'Score', } context["header"] = [k for k in context["labels"].keys()] return context diff --git a/src/apps/competitions/admin.py b/src/apps/competitions/admin.py index d9df4db54..3fba63f5f 100644 --- a/src/apps/competitions/admin.py +++ b/src/apps/competitions/admin.py @@ -92,16 +92,55 @@ def SubmissionsExport_as_csv(modeladmin, request, queryset): headers={"Content-Disposition": 'attachment; filename="submissions.csv"'}, ) writer = csv.writer(response) - writer.writerow(["ID", "Owner", "Status", "Task", "Phase", "Competition Title", "Competition creation date", "Scores"]) + writer.writerow( + [ + "ID", + "Owner", + "Status", + "Submitted on", + "Task", + "Phase", + "Competition Title", + "Competition creation date", + "Queue", + "Scores", + ] + ) for obj in queryset: scores_list = [] for scores in obj.scores.all(): scores_list.append(scores.score) if obj.task is not None: if len(scores_list) == 0: - writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, "None"]) + writer.writerow( + [ + obj.id, + obj.owner, + obj.status, + obj.created_when, + obj.task, + obj.phase, + obj.phase.competition.title, + obj.phase.competition.created_when, + obj.queue, + "None", + ] + ) else: - writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, scores_list[0]]) + writer.writerow( + [ + obj.id, + obj.owner, + obj.status, + obj.created_when, + obj.task, + obj.phase, + obj.phase.competition.title, + obj.phase.competition.created_when, + obj.queue, + scores_list[0], + ] + ) return response From 16e62da0c5dd454da20b7806ad23a5b4a5bdf761 Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Mon, 23 Mar 2026 17:18:35 +0100 Subject: [PATCH 3/8] add task name to help when downloading submissions from multi task competitions --- src/apps/api/views/submissions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index e84fa1119..3541b6a8d 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -291,6 +291,7 @@ def get_renderer_context(self): 'created_when': 'Created When', 'status': 'Status', 'phase_name': 'Phase', + 'task.name': 'Task', 'scores.0.score': 'Score', } context["header"] = [k for k in context["labels"].keys()] From bbbca5949194595d183ffaebbf7adecc6719b82e Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Thu, 19 Mar 2026 15:12:59 +0100 Subject: [PATCH 4/8] add competition title, competition creation date and scores in the csv generated in django admin in the submission view --- src/apps/competitions/admin.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/apps/competitions/admin.py b/src/apps/competitions/admin.py index 769888db8..d9df4db54 100644 --- a/src/apps/competitions/admin.py +++ b/src/apps/competitions/admin.py @@ -92,9 +92,16 @@ def SubmissionsExport_as_csv(modeladmin, request, queryset): headers={"Content-Disposition": 'attachment; filename="submissions.csv"'}, ) writer = csv.writer(response) - writer.writerow(["ID", "Owner", "Status", "Task", "Phase", "Queue"]) + writer.writerow(["ID", "Owner", "Status", "Task", "Phase", "Competition Title", "Competition creation date", "Scores"]) for obj in queryset: - writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.queue]) + scores_list = [] + for scores in obj.scores.all(): + scores_list.append(scores.score) + if obj.task is not None: + if len(scores_list) == 0: + writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, "None"]) + else: + writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, scores_list[0]]) return response From 4fda7bd44963fff5163e7f7216118f615e704871 Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Mon, 23 Mar 2026 17:03:27 +0100 Subject: [PATCH 5/8] add back queue name, add score in csv created by organizer, ruff formatting on admin.py --- src/apps/api/views/submissions.py | 1 + src/apps/competitions/admin.py | 45 ++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index c52d554c5..e84fa1119 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -291,6 +291,7 @@ def get_renderer_context(self): 'created_when': 'Created When', 'status': 'Status', 'phase_name': 'Phase', + 'scores.0.score': 'Score', } context["header"] = [k for k in context["labels"].keys()] return context diff --git a/src/apps/competitions/admin.py b/src/apps/competitions/admin.py index d9df4db54..3fba63f5f 100644 --- a/src/apps/competitions/admin.py +++ b/src/apps/competitions/admin.py @@ -92,16 +92,55 @@ def SubmissionsExport_as_csv(modeladmin, request, queryset): headers={"Content-Disposition": 'attachment; filename="submissions.csv"'}, ) writer = csv.writer(response) - writer.writerow(["ID", "Owner", "Status", "Task", "Phase", "Competition Title", "Competition creation date", "Scores"]) + writer.writerow( + [ + "ID", + "Owner", + "Status", + "Submitted on", + "Task", + "Phase", + "Competition Title", + "Competition creation date", + "Queue", + "Scores", + ] + ) for obj in queryset: scores_list = [] for scores in obj.scores.all(): scores_list.append(scores.score) if obj.task is not None: if len(scores_list) == 0: - writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, "None"]) + writer.writerow( + [ + obj.id, + obj.owner, + obj.status, + obj.created_when, + obj.task, + obj.phase, + obj.phase.competition.title, + obj.phase.competition.created_when, + obj.queue, + "None", + ] + ) else: - writer.writerow([obj.id, obj.owner, obj.status, obj.task, obj.phase, obj.phase.competition.title, obj.phase.competition.created_when, scores_list[0]]) + writer.writerow( + [ + obj.id, + obj.owner, + obj.status, + obj.created_when, + obj.task, + obj.phase, + obj.phase.competition.title, + obj.phase.competition.created_when, + obj.queue, + scores_list[0], + ] + ) return response From d093c081d17238178982f798b854a3a00149ebec Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Mon, 23 Mar 2026 17:18:35 +0100 Subject: [PATCH 6/8] add task name to help when downloading submissions from multi task competitions --- src/apps/api/views/submissions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index e84fa1119..3541b6a8d 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -291,6 +291,7 @@ def get_renderer_context(self): 'created_when': 'Created When', 'status': 'Status', 'phase_name': 'Phase', + 'task.name': 'Task', 'scores.0.score': 'Score', } context["header"] = [k for k in context["labels"].keys()] From bb98f64ddfac11159016d98d1f5b3abd6d645d9f Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Tue, 24 Mar 2026 17:05:31 +0100 Subject: [PATCH 7/8] rebase and add On Leaderboard to organizer CSV --- src/apps/api/views/submissions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index 3541b6a8d..bfd6f8889 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -293,6 +293,7 @@ def get_renderer_context(self): 'phase_name': 'Phase', 'task.name': 'Task', 'scores.0.score': 'Score', + 'on_leaderboard': 'On Leaderboard' } context["header"] = [k for k in context["labels"].keys()] return context From 92e7031f4d0ffe6d93e3a41bb55a3df46cbef402 Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Tue, 24 Mar 2026 17:25:23 +0100 Subject: [PATCH 8/8] add on_leaderboard for django admin generated csv --- src/apps/competitions/admin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps/competitions/admin.py b/src/apps/competitions/admin.py index 3fba63f5f..98cb64147 100644 --- a/src/apps/competitions/admin.py +++ b/src/apps/competitions/admin.py @@ -104,6 +104,7 @@ def SubmissionsExport_as_csv(modeladmin, request, queryset): "Competition creation date", "Queue", "Scores", + "On Leaderboard", ] ) for obj in queryset: @@ -124,6 +125,7 @@ def SubmissionsExport_as_csv(modeladmin, request, queryset): obj.phase.competition.created_when, obj.queue, "None", + obj.appear_on_leaderboards, ] ) else: @@ -139,6 +141,7 @@ def SubmissionsExport_as_csv(modeladmin, request, queryset): obj.phase.competition.created_when, obj.queue, scores_list[0], + obj.appear_on_leaderboards, ] ) return response