Skip to content
Snippets Groups Projects

Sazba diplomů

Merged Martin Mareš requested to merge diplomy into devel
1 file
+ 23
11
Compare changes
  • Side-by-side
  • Inline
+ 23
11
# Back-end pro zpracování odevzdaných/opravených protokolů
# Back-end pro zpracování odevzdaných/opravených protokolů,
# také se používá pro kontrolu obrázků na pozadí diplomů.
import datetime
import multiprocessing
@@ -17,12 +18,7 @@ class SubmitException(RuntimeError):
class Submitter:
submit_dir: str
def __init__(self):
self.submit_dir = mo.util.data_dir('submits')
def submit_paper(self, paper: db.Paper, tmpfile: str):
def submit_paper(self, paper: db.Paper, tmpfile: str) -> None:
logger.info(f'Submit: Zpracovávám file={tmpfile} for=#{paper.for_user_obj.user_id} by=#{paper.uploaded_by_obj.user_id} type={paper.type.name}')
t_start = datetime.datetime.now()
@@ -37,7 +33,7 @@ class Submitter:
logger.info(f'Submit: Chyba: {e} (time={duration:.3f}), uloženo do {preserved_as}')
raise
def submit_fix(self, paper: db.Paper, tmpfile: str):
def submit_fix(self, paper: db.Paper, tmpfile: str) -> None:
logger.info(f'Submit fix: Zpracovávám file={tmpfile} fix_for=#{paper.paper_id}')
t_start = datetime.datetime.now()
@@ -51,12 +47,28 @@ class Submitter:
logger.info(f'Submit fix: {e} (time={duration:.3f})')
raise
def _file_paper(self, paper: db.Paper, tmpfile: str, broken: bool):
def check_certificate_background(self, tmpfile: str) -> None:
logger.info(f'Submit: Zpracovávám pozadí diplomu file={tmpfile}')
paper = db.Paper(for_task=0, for_user=0, type=db.PaperType.solution, uploaded_by=0)
t_start = datetime.datetime.now()
try:
self._process_pdf(paper, tmpfile, allow_broken=False)
if paper.pages != 1:
raise SubmitException(f'Pozadí musí mít 1 stranu, nikoliv {paper.pages}.')
duration = (datetime.datetime.now() - t_start).total_seconds()
logger.info(f'Submit pozadí: Hotovo (time={duration:.3f}')
except SubmitException as e:
duration = (datetime.datetime.now() - t_start).total_seconds()
logger.info(f'Submit pozadí: {e} (time={duration:.3f})')
raise
def _file_paper(self, paper: db.Paper, tmpfile: str, broken: bool) -> None:
round = paper.task.round
secure_category = werkzeug.utils.secure_filename(round.category)
top_level = f'{round.year}-{secure_category}-{round.seq}'
user_dir = os.path.join(top_level, str(paper.for_user_obj.user_id))
sub_user_dir = os.path.join(self.submit_dir, user_dir)
sub_user_dir = os.path.join(mo.util.data_dir('submits'), user_dir)
os.makedirs(sub_user_dir, exist_ok=True)
secure_task_code = werkzeug.utils.secure_filename(paper.task.code)
@@ -108,7 +120,7 @@ class Submitter:
# Zpracování PDF běží v samostatném procesu, výsledek pošle jako slovník rourou.
@staticmethod
def _do_process_pdf(tmpfile: str, pipe):
def _do_process_pdf(tmpfile: str, pipe) -> None:
result: Any = {}
try:
with pikepdf.open(tmpfile, attempt_recovery=False) as pdf:
Loading