diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py index d5ee83ab8631faa2cc85c20e0fad0e260f7f26de..fffa0b16657b3067751d0873b525d95b88e4f29e 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 56dc2e9b494bbeb79f825932bde89c7c98d6f397..40e6ecd8f296dc69799ab6df69a0cec8f6209379 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')