summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-02-27 13:00:44 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2023-02-27 13:00:44 +0100
commit4e61947798d61d14bd07b8c826e216994392e0e4 (patch)
treef90420a294f14687166313a0420b4b6cea83b0c3 /ishtar_common/forms_common.py
parent13dcb0b70054fd9a00a128b587d790915e018725 (diff)
downloadIshtar-4e61947798d61d14bd07b8c826e216994392e0e4.tar.bz2
Ishtar-4e61947798d61d14bd07b8c826e216994392e0e4.zip
Import: improve bad encoding detection
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 7ad89ed3e..f14799f53 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -213,6 +213,8 @@ class BaseImportForm(IshtarForm, forms.ModelForm):
self.fields["imported_file"].validators = [file_size_validator]
self._post_init()
+ BAD_CHARS = ["é", "³", "ô", "Ã\xa0", "é"]
+
def _clean_csv(self, is_csv=False):
imported_file = self.cleaned_data.get("imported_file", None)
encoding = self.cleaned_data.get("encoding", None)
@@ -220,15 +222,22 @@ class BaseImportForm(IshtarForm, forms.ModelForm):
try:
if not imported_file.name.lower().endswith(".csv"):
if is_csv:
- raise AssertionError()
+ raise ValueError()
else:
return
imported_file.seek(0)
reader = csv.reader(StringIO(imported_file.read().decode(encoding)))
- for __ in reader:
- break
+ idx = 0
+ for row in reader:
+ for col in row:
+ for char in self.BAD_CHARS:
+ if char in col:
+ raise ValueError()
+ idx += 1
+ if idx >= 200:
+ break
imported_file.seek(0)
- except (AssertionError, UnicodeDecodeError) as e:
+ except (UnicodeDecodeError, ValueError) as e:
raise forms.ValidationError(
_("This is not a valid CSV file. Check file format and encoding.")
)