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')