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

Import: Varování jsou fatální, ale jdou overridovat

parent 1bded84c
Branches
No related tags found
No related merge requests found
...@@ -383,7 +383,7 @@ class Import: ...@@ -383,7 +383,7 @@ class Import:
return row.email # type: ignore return row.email # type: ignore
return None return None
def generic_import(self, path: str) -> bool: def generic_import(self, path: str, despite_warnings: bool) -> bool:
charset = self.fmt.get_charset() charset = self.fmt.get_charset()
if charset != 'utf-8' and self.check_utf8(path): if charset != 'utf-8' and self.check_utf8(path):
logger.info('Import: Uhodnuto kódování utf-8') logger.info('Import: Uhodnuto kódování utf-8')
...@@ -412,7 +412,7 @@ class Import: ...@@ -412,7 +412,7 @@ class Import:
self.line_number += 1 self.line_number += 1
self.row_name = None self.row_name = None
return len(self.errors) == 0 return len(self.errors) == 0 and (len(self.warnings) == 0 or despite_warnings)
def notify_users(self) -> None: def notify_users(self) -> None:
# Projde všechny uživatele a těm, kteří ještě nemají nastavené heslo, # Projde všechny uživatele a těm, kteří ještě nemají nastavené heslo,
...@@ -436,10 +436,10 @@ class Import: ...@@ -436,10 +436,10 @@ class Import:
mo.csv.write(file=out, fmt=self.fmt, row_class=self.row_class, rows=[self.row_example]) mo.csv.write(file=out, fmt=self.fmt, row_class=self.row_class, rows=[self.row_example])
return out.getvalue() return out.getvalue()
def run(self, path: str) -> bool: def run(self, path: str, despite_warnings: bool = False) -> bool:
self.log_start(path) self.log_start(path)
if not self.generic_import(path): if not self.generic_import(path, despite_warnings):
logger.info('Import: Rollback') logger.info('Import: Rollback')
db.get_session().rollback() db.get_session().rollback()
return False return False
......
...@@ -19,6 +19,7 @@ class ImportForm(FlaskForm): ...@@ -19,6 +19,7 @@ class ImportForm(FlaskForm):
choices=FileFormat.choices(), coerce=FileFormat.coerce, choices=FileFormat.choices(), coerce=FileFormat.coerce,
default=FileFormat.cs_csv, default=FileFormat.cs_csv,
) )
despite_warnings = wtforms.BooleanField('Importovat navzdory varováním')
submit = wtforms.SubmitField('Importovat') submit = wtforms.SubmitField('Importovat')
get_template = wtforms.SubmitField('Stáhnout šablonu') get_template = wtforms.SubmitField('Stáhnout šablonu')
...@@ -35,7 +36,7 @@ def generic_import_page(form: ImportForm, imp: Optional[Import], redirect_url: s ...@@ -35,7 +36,7 @@ def generic_import_page(form: ImportForm, imp: Optional[Import], redirect_url: s
file = form.file.data.stream file = form.file.data.stream
import_tmp = mo.util.link_to_dir(file.name, mo.util.data_dir('imports'), suffix='.csv') import_tmp = mo.util.link_to_dir(file.name, mo.util.data_dir('imports'), suffix='.csv')
if imp.run(import_tmp): if imp.run(import_tmp, despite_warnings=form.despite_warnings.data):
if imp.cnt_rows == 0: if imp.cnt_rows == 0:
flash('Soubor neobsahoval žádné řádky s daty', 'danger') flash('Soubor neobsahoval žádné řádky s daty', 'danger')
else: else:
......
...@@ -14,7 +14,12 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac ...@@ -14,7 +14,12 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac
{% for e in warnings %} {% for e in warnings %}
{{ e }} {{ e }}
{% endfor %} {% endfor %}
{% if not errs %}
<em>Aby se import provedl, zopakujte ho znovu se zaškrtnutým „Importovat navzdory varováním“.</em>
{% endif %}
</div> </div>
{% endif %} {% endif %}
{% if errs %} {% if errs %}
...@@ -38,6 +43,7 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac ...@@ -38,6 +43,7 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac
{{ form.csrf_token }} {{ form.csrf_token }}
{{ wtf.form_field(form.file) }} {{ wtf.form_field(form.file) }}
{{ wtf.form_field(form.fmt) }} {{ wtf.form_field(form.fmt) }}
{{ wtf.form_field(form.despite_warnings) }}
{% block import_form %}{% endblock %} {% block import_form %}{% endblock %}
<div class="btn-group"> <div class="btn-group">
{{ wtf.form_field(form.submit, class='btn btn-primary') }} {{ wtf.form_field(form.submit, class='btn btn-primary') }}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment