From 3c441a9af4a1d6135f07bb8fd76329a3b6d7af00 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Mon, 15 Mar 2021 14:32:17 +0100 Subject: [PATCH] =?UTF-8?q?Web=20um=C3=AD=20pos=C3=ADlat=20i=20origin?= =?UTF-8?q?=C3=A1ln=C3=AD=20rozbit=C3=BD=20submit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/web/org_contest.py | 8 +++++--- mo/web/util.py | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py index d5ee83ab..fffa0b16 100644 --- a/mo/web/org_contest.py +++ b/mo/web/org_contest.py @@ -892,8 +892,10 @@ class SubmitEditForm(FlaskForm): submit = wtforms.SubmitField("Uložit") -@app.route('/org/contest/c/<int:contest_id>/paper/<int:paper_id>/<filename>') -@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/paper/<int:paper_id>/<filename>') +@app.route('/org/contest/c/<int:contest_id>/paper/<int:paper_id>/<filename>', endpoint='org_submit_paper') +@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/paper/<int:paper_id>/<filename>', endpoint='org_submit_paper') +@app.route('/org/contest/c/<int:contest_id>/paper/orig/<int:paper_id>/<filename>', endpoint='org_submit_paper_orig') +@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/paper/orig/<int:paper_id>/<filename>', endpoint='org_submit_paper_orig') def org_submit_paper(contest_id: int, paper_id: int, filename: str, site_id: Optional[int] = None): paper = (db.get_session().query(db.Paper) .options(joinedload(db.Paper.task)) # pro task_paper_filename() @@ -906,7 +908,7 @@ def org_submit_paper(contest_id: int, paper_id: int, filename: str, site_id: Opt get_solution_context(contest_id, paper.for_user, paper.for_task, site_id) - return mo.web.util.send_task_paper(paper) + return mo.web.util.send_task_paper(paper, (request.endpoint == 'org_submit_paper_orig')) def get_solutions_query( diff --git a/mo/web/util.py b/mo/web/util.py index 56dc2e9b..40e6ecd8 100644 --- a/mo/web/util.py +++ b/mo/web/util.py @@ -72,20 +72,28 @@ def _task_paper_filename(user: db.User, paper: db.Paper) -> str: def org_paper_link(contest_or_id: Union[db.Contest, int], site: Optional[db.Place], user: db.User, - paper: db.Paper) -> str: + paper: db.Paper, + orig: bool = False) -> str: """Doporučujeme preloadovat paper.task.""" if isinstance(contest_or_id, db.Contest): contest_or_id = contest_or_id.contest_id - return url_for('org_submit_paper', + return url_for('org_submit_paper' if not orig else 'org_submit_paper_orig', contest_id=contest_or_id, paper_id=paper.paper_id, site_id=site.place_id if site else None, filename=_task_paper_filename(user, paper)) -def send_task_paper(paper: db.Paper) -> Response: - file = os.path.join(mo.util.data_dir('submits'), paper.file_name) +def send_task_paper(paper: db.Paper, orig: bool = False) -> Response: + if orig: + name = paper.orig_file_name + else: + name = paper.file_name or paper.orig_file_name + if not name: + logger.error(f'Paper #{paper.paper_id} nemá žádný soubor') + raise werkzeug.exceptions.NotFound() + file = os.path.join(mo.util.data_dir('submits'), name) if os.path.isfile(file): return send_file(file, mimetype='application/pdf') -- GitLab