summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
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
commit6e626e92a01722dd2814e8827753ed0e1a653f9b (patch)
tree56e8e0baab7704e2ce1beeb24478706202ff246f /ishtar_common/forms_common.py
parent371e2bbff3d9d71baeb2a26ab2c1ec9ad3a86a13 (diff)
downloadIshtar-6e626e92a01722dd2814e8827753ed0e1a653f9b.tar.bz2
Ishtar-6e626e92a01722dd2814e8827753ed0e1a653f9b.zip
Import: manage CSV geo data
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py47
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)