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