Skip to content
Snippets Groups Projects
Commit 95b029ec authored by Martin Mareš's avatar Martin Mareš
Browse files

org_paper_link: Odkazy se jménem účastníka

parent 120bd12f
No related branches found
No related tags found
1 merge request!25Odkazy na papíry
...@@ -3,6 +3,7 @@ from flask_wtf import FlaskForm ...@@ -3,6 +3,7 @@ from flask_wtf import FlaskForm
import os import os
from sqlalchemy.orm.query import Query from sqlalchemy.orm.query import Query
from typing import Tuple, Optional, Union from typing import Tuple, Optional, Union
import unicodedata
import werkzeug.exceptions import werkzeug.exceptions
import werkzeug.utils import werkzeug.utils
import wtforms import wtforms
...@@ -49,32 +50,38 @@ def send_task_statement(round: db.Round) -> Response: ...@@ -49,32 +50,38 @@ def send_task_statement(round: db.Round) -> Response:
raise werkzeug.exceptions.NotFound() raise werkzeug.exceptions.NotFound()
def task_paper_filename(paper: db.Paper) -> str: def _task_paper_filename(user: db.User, paper: db.Paper) -> str:
"""Doporučujeme preloadovat task.""" # 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: 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: elif paper.type == db.PaperType.feedback:
return f'{secure_task_code}-opravene-{paper.for_user}-{paper.paper_id}.pdf' typ = 'opravene'
else: else:
assert False 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], def org_paper_link(contest_or_id: Union[db.Contest, int],
site: Optional[db.Place], site: Optional[db.Place],
user: db.User, user: db.User,
paper: db.Paper) -> str: paper: db.Paper) -> str:
"""Doporučujeme preloadovat paper.task."""
if isinstance(contest_or_id, db.Contest): if isinstance(contest_or_id, db.Contest):
contest_or_id = contest_or_id.contest_id contest_or_id = contest_or_id.contest_id
return url_for('org_submit_paper', return url_for('org_submit_paper',
contest_id=contest_or_id, contest_id=contest_or_id,
paper_id=paper.paper_id, paper_id=paper.paper_id,
site_id=site.place_id if site else None, 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: def send_task_paper(paper: db.Paper) -> Response:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment