From 7349e36595af49e256b390dac03b0fb75c3888c6 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 15 Jan 2021 23:28:49 +0100
Subject: [PATCH] =?UTF-8?q?Download=20opraven=C3=BDch=20=C5=99e=C5=A1en?=
=?UTF-8?q?=C3=AD=20+=20sjednocen=C3=AD=20k=C3=B3du?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mo/web/org_contest.py | 34 ++++++++++++++++++++++------------
1 file changed, 22 insertions(+), 12 deletions(-)
diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index c642a1ca..1583d052 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -190,6 +190,7 @@ class ParticipantsActionForm(FlaskForm):
class DownloadButtonForm(FlaskForm):
download = wtforms.SubmitField('Stáhnout všechna řešení jako ZIP')
+ download_feedback = wtforms.SubmitField('Stáhnout opravená jako ZIP')
def get_contest(id: int) -> db.Contest:
@@ -691,6 +692,23 @@ def get_solutions_query(
return query
+def download_solutions(form: DownloadButtonForm, solutions: List[db.Solution], subject: str) -> bool:
+ if not form.validate_on_submit():
+ return False
+
+ if form.download.data:
+ paper_ids = [sol.final_submit for sol in solutions if sol.final_submit is not None]
+ mo.jobs.submit.schedule_download_submits(paper_ids, f'Odevzdaná řešení {subject}', g.user)
+ flash('Příprava odevzdaných řešení ke stažení zahájena.', 'success')
+ return True
+
+ if form.download_feedback.data:
+ paper_ids = [sol.final_feedback or sol.final_submit for sol in solutions if sol.final_submit is not None]
+ mo.jobs.submit.schedule_download_submits(paper_ids, f'Opravená řešení {subject}', g.user)
+ flash('Příprava opravených řešení ke stažení zahájena.', 'success')
+ return True
+
+
@app.route('/org/contest/c/<int:contest_id>/task/<int:task_id>/', methods=('GET', 'POST'))
@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/task/<int:task_id>/', methods=('GET', 'POST'))
def org_contest_task_submits(contest_id: int, task_id: int, site_id: Optional[int] = None):
@@ -702,12 +720,8 @@ def org_contest_task_submits(contest_id: int, task_id: int, site_id: Optional[in
rows.sort(key=lambda r: r[0].user.sort_key())
download_form = DownloadButtonForm()
- if request.method == 'POST' and download_form.validate_on_submit():
- if download_form.download.data:
- paper_ids = [sol.final_submit for pion, sol in rows if sol is not None and sol.final_submit is not None]
- mo.jobs.submit.schedule_download_submits(paper_ids, f'Odevzdaná řešení úlohy {sc.task.code}', g.user)
- flash('Příprava řešení ke stažení zahájena.', 'success')
- return redirect(url_for('org_jobs'))
+ if request.method == 'POST' and download_solutions(download_form, [sol for pion, sol in rows if sol is not None], f'úlohy {sc.task.code}'):
+ return redirect(url_for('org_jobs'))
# Count papers for each solution
paper_counts = {}
@@ -833,12 +847,8 @@ def org_contest_solutions(id: int, site_id: Optional[int] = None):
paper_counts[(user_id, task_id, type.name)] = count
download_form = DownloadButtonForm()
- if request.method == 'POST' and download_form.validate_on_submit():
- if download_form.download.data:
- paper_ids = [sol.final_submit for sol in sols if sol is not None and sol.final_submit is not None]
- mo.jobs.submit.schedule_download_submits(paper_ids, 'Odevzdaná řešení', g.user)
- flash('Příprava řešení ke stažení zahájena.', 'success')
- return redirect(url_for('org_jobs'))
+ if request.method == 'POST' and download_solutions(download_form, [sol for sol in sols if sol is not None], sc.round.round_code()):
+ return redirect(url_for('org_jobs'))
task_sols: Dict[int, Dict[int, db.Solution]] = {}
for t in tasks:
--
GitLab