From dab845478f57be35218b7065d0506d9803fc8342 Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Wed, 16 Mar 2022 15:56:02 +0100 Subject: UI: small improvment on CSV file import --- ishtar_common/forms_common.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) (limited to 'ishtar_common/forms_common.py') diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 0cdb70a36..af41e2fcf 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -16,9 +16,10 @@ # along with this program. If not, see . # See the file COPYING for details. - +import csv from collections import OrderedDict import datetime +from io import StringIO import os import pyqrcode import re @@ -184,6 +185,10 @@ class BaseImportForm(BSForm, forms.ModelForm): "imported_images": widgets.BSClearableFileInput, } + HEADERS = { + "name": FormHeader(_("Import (table)")), + } + def __init__(self, *args, **kwargs): user = kwargs.pop("user") super(BaseImportForm, self).__init__(*args, **kwargs) @@ -236,6 +241,22 @@ class BaseImportForm(BSForm, forms.ModelForm): return data + def clean_imported_file(self): + value = self.cleaned_data.get("imported_file", None) + if value: + try: + assert value.name.lower().endswith(".csv") + value.seek(0) + reader = csv.reader(StringIO(value.read().decode('utf-8'))) + for __ in reader: + break + value.seek(0) + except (AssertionError, UnicodeDecodeError): + raise forms.ValidationError( + _("This is not a valid CSV file.") + ) + return value + def clean_imported_images_link(self): value = self.cleaned_data.get("imported_images_link", None) if value: -- cgit v1.2.3