diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-08-08 23:11:09 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2022-12-12 12:23:17 +0100 |
commit | 64e14a2ac5834298258d2ddf1324f6e4bb00fb5a (patch) | |
tree | 56e8e0baab7704e2ce1beeb24478706202ff246f /ishtar_common/forms_common.py | |
parent | a25605b9c1fd64806c4e3cf76936b65107d83a2e (diff) | |
download | Ishtar-64e14a2ac5834298258d2ddf1324f6e4bb00fb5a.tar.bz2 Ishtar-64e14a2ac5834298258d2ddf1324f6e4bb00fb5a.zip |
Import: manage CSV geo data
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r-- | ishtar_common/forms_common.py | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index e4f432b4f..822efadda 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -215,6 +215,27 @@ class BaseImportForm(IshtarForm, forms.ModelForm): self.fields["imported_file"].validators = [file_size_validator] self._post_init() + def _clean_csv(self, is_csv=False): + imported_file = self.cleaned_data.get("imported_file", None) + encoding = self.cleaned_data.get("encoding", None) + print(encoding) + if imported_file and encoding: + try: + if not imported_file.name.lower().endswith(".csv"): + if is_csv: + raise AssertionError() + else: + return + imported_file.seek(0) + reader = csv.reader(StringIO(imported_file.read().decode(encoding))) + for __ in reader: + break + imported_file.seek(0) + except (AssertionError, UnicodeDecodeError) as e: + raise forms.ValidationError( + _("This is not a valid CSV file. Check file format and encoding.") + ) + def clean(self): data = self.cleaned_data if ( @@ -273,21 +294,7 @@ class NewImportForm(BaseImportForm): raise forms.ValidationError( _("\"Associated images\" field must be a valid zip file.") ) - imported_file = self.cleaned_data.get("imported_file", None) - encoding = self.cleaned_data.get("encoding", None) - if imported_file and encoding: - try: - assert imported_file.name.lower().endswith(".csv") - imported_file.seek(0) - reader = csv.reader(StringIO(imported_file.read().decode(encoding))) - for __ in reader: - break - imported_file.seek(0) - except (AssertionError, UnicodeDecodeError) as e: - raise forms.ValidationError( - _("This is not a valid CSV file. Check file format and encoding.") - ) - + self._clean_csv(is_csv=True) return data def clean_imported_images_link(self): @@ -333,6 +340,8 @@ class NewImportGISForm(BaseImportForm): "name", "importer_type", "imported_file", + "encoding", + "csv_sep", "associated_group", ) @@ -345,7 +354,7 @@ class NewImportGISForm(BaseImportForm): if value: try: ext = value.name.lower().split(".")[-1] - assert ext in ("zip", "gpkg") + assert ext in ("zip", "gpkg", "csv") if ext == "zip": zip_file = zipfile.ZipFile(value) assert not zip_file.testzip() @@ -353,7 +362,6 @@ class NewImportGISForm(BaseImportForm): for name in zip_file.namelist(): in_ext = name.lower().split(".")[-1] if in_ext in ("shp", "gpkg"): - filename = name has_correct_file = True break assert has_correct_file @@ -363,6 +371,11 @@ class NewImportGISForm(BaseImportForm): ) return value + def clean(self): + data = super().clean() + self._clean_csv() + return data + def save(self, user, commit=True): self.instance.user = user item = super(NewImportGISForm, self).save(commit) |