diff options
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: |