diff options
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 |
commit | df7044e23e0123558124a600e5b470ed2d537135 (patch) | |
tree | e2c5d2b1b017bc752674c6a6a67ac3843ae7da8d /ishtar_common/forms_common.py | |
parent | 6e5740c977ea4eb425b68b5cacb982916a43ba73 (diff) | |
download | Ishtar-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.py | 38 |
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: |