summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2023-08-08 17:56:48 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-04-16 16:38:32 +0200
commitdf7044e23e0123558124a600e5b470ed2d537135 (patch)
treee2c5d2b1b017bc752674c6a6a67ac3843ae7da8d /ishtar_common/forms_common.py
parent6e5740c977ea4eb425b68b5cacb982916a43ba73 (diff)
downloadIshtar-df7044e23e0123558124a600e5b470ed2d537135.tar.bz2
Ishtar-df7044e23e0123558124a600e5b470ed2d537135.zip
✨ Imports groups: archive_required field - automatically create related imports on group creation - adapt import list
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py38
1 files changed, 29 insertions, 9 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 6a351ab3c..d2011338b 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -250,6 +250,7 @@ class BaseImportForm(IshtarForm, forms.ModelForm):
self.fields["importer_type"].choices = [("", "--")] + [
(imp.pk, imp.name)
for imp in models.ImporterType.objects.filter(available=True,
+ is_import=True,
type=self.importer_type)
]
@@ -309,9 +310,20 @@ class BaseImportForm(IshtarForm, forms.ModelForm):
return data
+def get_archive_from_link(archive_link):
+ request = requests.get(archive_link, stream=True)
+ ntf = tempfile.NamedTemporaryFile()
+ for block in request.iter_content(1024 * 8):
+ if not block:
+ break
+ ntf.write(block)
+ file_name = archive_link.split("/")[-1]
+ return file_name, ntf
+
+
class NewImportForm(BaseImportForm):
imported_images_link = forms.URLField(
- label=_("Associated images (web link to a zip file)"), required=False
+ label=_("Associated documents (web link to a zip file)"), required=False
)
class Meta:
@@ -334,6 +346,10 @@ class NewImportForm(BaseImportForm):
"imported_images": FormHeader(_("Documents/Images")),
}
+ def _need_archive(self, data):
+ tpe = data["importer_type"]
+ return tpe.archive_required
+
def clean(self):
data = super().clean()
if data.get("imported_images_link", None) and data.get("imported_images", None):
@@ -353,6 +369,12 @@ class NewImportForm(BaseImportForm):
_("\"Associated images\" field must be a valid zip file.")
)
self._clean_csv(is_csv=True)
+ archive_required = self._need_archive(data)
+ if archive_required and (
+ not data.get("imported_images", None) and
+ not data.get("imported_images_link", None)
+ ):
+ raise forms.ValidationError(_("This importer need a document archive."))
return data
def clean_imported_images_link(self):
@@ -377,14 +399,8 @@ class NewImportForm(BaseImportForm):
item = super().save(commit)
if not imported_images_link:
return item
- request = requests.get(imported_images_link, stream=True)
- ntf = tempfile.NamedTemporaryFile()
- for block in request.iter_content(1024 * 8):
- if not block:
- break
- ntf.write(block)
- file_name = imported_images_link.split("/")[-1]
- item.imported_images.save(file_name, File(ntf))
+ file_name, temp_file = get_archive_from_link(imported_images_link)
+ item.imported_images.save(file_name, File(temp_file))
return item
@@ -482,6 +498,10 @@ class NewImportGroupForm(NewImportForm):
def _filter_group(self, user):
pass
+ def _need_archive(self, data):
+ tpe = data["importer_type"]
+ return [sub.importer_type.archive_required for sub in tpe.importer_types.all()]
+
class TargetKeyForm(forms.ModelForm):
class Meta: