Skip to content
Snippets Groups Projects

Odkazy na papíry

Merged Martin Mareš requested to merge mj/paper-link into devel
1 file
+ 14
7
Compare changes
  • Side-by-side
  • Inline
+ 14
7
@@ -3,6 +3,7 @@ from flask_wtf import FlaskForm
import os
from sqlalchemy.orm.query import Query
from typing import Tuple, Optional, Union
import unicodedata
import werkzeug.exceptions
import werkzeug.utils
import wtforms
@@ -49,32 +50,38 @@ def send_task_statement(round: db.Round) -> Response:
raise werkzeug.exceptions.NotFound()
def task_paper_filename(paper: db.Paper) -> str:
"""Doporučujeme preloadovat task."""
def _task_paper_filename(user: db.User, paper: db.Paper) -> str:
# Tato jména parsuje dávkový upload
task = paper.task
full_name = user.full_name()
ascii_name = (unicodedata.normalize('NFD', full_name)
.encode('ascii', 'ignore')
.decode('utf-8'))
secure_task_code = werkzeug.utils.secure_filename(task.code)
if paper.type == db.PaperType.solution:
return f'{secure_task_code}-reseni-{paper.for_user}-{paper.paper_id}.pdf'
typ = 'reseni'
elif paper.type == db.PaperType.feedback:
return f'{secure_task_code}-opravene-{paper.for_user}-{paper.paper_id}.pdf'
typ = 'opravene'
else:
assert False
fn = f'{paper.task.code}_{typ}_{user.user_id}_{paper.paper_id}_{ascii_name}.pdf'
return werkzeug.utils.secure_filename(fn)
def org_paper_link(contest_or_id: Union[db.Contest, int],
site: Optional[db.Place],
user: db.User,
paper: db.Paper) -> 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',
contest_id=contest_or_id,
paper_id=paper.paper_id,
site_id=site.place_id if site else None,
filename=task_paper_filename(paper))
filename=_task_paper_filename(user, paper))
def send_task_paper(paper: db.Paper) -> Response:
Loading