diff --git a/mo/imports.py b/mo/imports.py index 18f86059814d695f8353df687010395a108bcb25..f326b767d5b97dfae180ee0b6a88439148dbf9d7 100644 --- a/mo/imports.py +++ b/mo/imports.py @@ -383,7 +383,7 @@ class Import: return row.email # type: ignore return None - def generic_import(self, path: str) -> bool: + def generic_import(self, path: str, despite_warnings: bool) -> bool: charset = self.fmt.get_charset() if charset != 'utf-8' and self.check_utf8(path): logger.info('Import: Uhodnuto kódování utf-8') @@ -412,7 +412,7 @@ class Import: self.line_number += 1 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: # Projde všechny uživatele a těm, kteří ještě nemají nastavené heslo, @@ -436,10 +436,10 @@ class Import: mo.csv.write(file=out, fmt=self.fmt, row_class=self.row_class, rows=[self.row_example]) return out.getvalue() - def run(self, path: str) -> bool: + def run(self, path: str, despite_warnings: bool = False) -> bool: self.log_start(path) - if not self.generic_import(path): + if not self.generic_import(path, despite_warnings): logger.info('Import: Rollback') db.get_session().rollback() return False diff --git a/mo/web/imports.py b/mo/web/imports.py index b5cf4366746d1ef77e31c74c2eff5d08b1d1c637..efe5cb19c52c3f1684d32e5a797f62ff32a89a23 100644 --- a/mo/web/imports.py +++ b/mo/web/imports.py @@ -19,6 +19,7 @@ class ImportForm(FlaskForm): choices=FileFormat.choices(), coerce=FileFormat.coerce, default=FileFormat.cs_csv, ) + despite_warnings = wtforms.BooleanField('Importovat navzdory varováním') submit = wtforms.SubmitField('Importovat') get_template = wtforms.SubmitField('Stáhnout šablonu') @@ -35,7 +36,7 @@ def generic_import_page(form: ImportForm, imp: Optional[Import], redirect_url: s file = form.file.data.stream 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: flash('Soubor neobsahoval žádné řádky s daty', 'danger') else: diff --git a/mo/web/templates/org_generic_import.html b/mo/web/templates/org_generic_import.html index bd3906686258d0f34cdc270e67134f82b89e4d65..467c086efd647c287a246123afd2f06b9cef028b 100644 --- a/mo/web/templates/org_generic_import.html +++ b/mo/web/templates/org_generic_import.html @@ -14,7 +14,12 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac {% for e in warnings %} {{ e }} {% endfor %} +{% if not errs %} + +<em>Aby se import provedl, zopakujte ho znovu se zaškrtnutým „Importovat navzdory varováním“.</em> +{% endif %} </div> + {% endif %} {% if errs %} @@ -38,6 +43,7 @@ Import dat {% if contest or round %}do {% if contest %}soutěže {{ contest.plac {{ form.csrf_token }} {{ wtf.form_field(form.file) }} {{ wtf.form_field(form.fmt) }} +{{ wtf.form_field(form.despite_warnings) }} {% block import_form %}{% endblock %} <div class="btn-group"> {{ wtf.form_field(form.submit, class='btn btn-primary') }}