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

Org: Předělané zacházení s uploady

Také na dávkové uploady aplikujeme jiný limit na velikost souboru.
parent 16d8e99c
No related branches found
No related tags found
1 merge request!21Reforma uploadů
......@@ -23,7 +23,9 @@ WEB_ROOT = 'https://mo.mff.cuni.cz/osmo-test/'
WEB_FLAVOR = 'devel'
# Maximální velikost uploadu. Pozor, je omezena i konfigurací Nginxu.
# První hodnota se použije pro běžný upload, druhá pro dávkový upload řešení.
MAX_CONTENT_LENGTH = 16777216
MAX_BATCH_CONTENT_LENGTH = 1000000000
# Adresář, do kterého ukládáme data (pro vývoj relativní, pro instalaci absolutní)
DATA_DIR = 'data'
......
......@@ -2,8 +2,6 @@ from dataclasses import dataclass
from flask import render_template, g, redirect, url_for, flash, request
from flask_wtf import FlaskForm
import flask_wtf.file
import os
import secrets
from sqlalchemy import func, and_
from sqlalchemy.orm import joinedload, aliased
from sqlalchemy.orm.query import Query
......@@ -305,11 +303,10 @@ def generic_import(round: db.Round, contest: Optional[db.Contest]):
imp = create_import(user=g.user, type=form.typ.data, fmt=fmt, round=round, contest=contest)
if form.submit.data:
if form.file.data is not None:
tmp_name = secrets.token_hex(16) + '.' + fmt.get_extension()
tmp_path = os.path.join(app.instance_path, 'imports', tmp_name)
form.file.data.save(tmp_path)
file = form.file.data.stream
import_tmp = mo.util.link_to_dir(file.name, mo.util.data_dir('imports'), suffix='.csv')
if imp.run(tmp_path):
if imp.run(import_tmp):
if imp.cnt_rows == 0:
flash('Soubor neobsahoval žádné řádky s daty', 'danger')
else:
......@@ -587,10 +584,7 @@ def org_submit_list(contest_id: int, user_id: int, task_id: int, site_id: Option
del form.submit_fb
if form.validate_on_submit():
# FIXME: Viz komentář o efektivitě v user_contest_task
tmp_name = secrets.token_hex(16)
tmp_path = os.path.join(app.instance_path, 'tmp', tmp_name)
form.file.data.save(tmp_path)
file = form.file.data.stream
if sc.allow_upload_solutions and form.submit_sol.data:
type = db.PaperType.solution
......@@ -605,10 +599,9 @@ def org_submit_list(contest_id: int, user_id: int, task_id: int, site_id: Option
self_url = url_for('org_submit_list', contest_id=contest_id, user_id=user_id, task_id=task_id, site_id=site_id)
try:
submitter.submit_paper(paper, tmp_path)
submitter.submit_paper(paper, file.name)
except mo.submit.SubmitException as e:
flash(f'Chyba: {e}', 'danger')
# FIXME: Tady nemažeme tmpfile, zatím si ho chceme nechat pro analýzu.
return redirect(self_url)
sess.add(paper)
......@@ -1025,15 +1018,12 @@ def generic_batch_upload(round: db.Round, contest: Optional[db.Contest], site: O
if not can_upload_feedback:
raise werkzeug.exceptions.Forbidden()
request.custom_max_content_length = mo.config.MAX_BATCH_CONTENT_LENGTH
form = UploadSubmitsForm()
if form.validate_on_submit():
# FIXME: Viz komentář o efektivitě v user_contest_task
tmp_name = secrets.token_hex(16)
tmp_path = os.path.join(app.instance_path, 'tmp', tmp_name)
form.file.data.save(tmp_path)
mo.jobs.submit.schedule_upload_feedback(round, tmp_path, f'Nahrání opravených řešení {round.round_code()}',
file = form.file.data.stream
mo.jobs.submit.schedule_upload_feedback(round, file.name, f'Nahrání opravených řešení {round.round_code()}',
for_user=g.user,
only_contest=contest, only_site=site, only_task=task)
return redirect(url_for('org_jobs'))
......@@ -1041,6 +1031,7 @@ def generic_batch_upload(round: db.Round, contest: Optional[db.Contest], site: O
return render_template(
'org_generic_batch_upload.html',
round=round, contest=contest, site=site, task=task,
max_size=mo.config.MAX_BATCH_CONTENT_LENGTH,
form=form,
)
......
......@@ -12,7 +12,9 @@
</h2>
<p>Zde můžete najednou nahrát více opravených řešení zabalených do souboru typu ZIP.
Soubory opravených řešení se musí jmenovat stejně jako původní soubory účastnických řešení.
Maximální možná velikost ZIPu je {{ max_size|data_size }}.
<p>Soubory opravených řešení se musí jmenovat stejně jako původní soubory účastnických řešení.
{{ wtf.quick_form(form, form_type='basic') }}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment