summaryrefslogtreecommitdiff
path: root/ishtar_common/models_imports.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/models_imports.py')
-rw-r--r--ishtar_common/models_imports.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/ishtar_common/models_imports.py b/ishtar_common/models_imports.py
index 3d4bf632b..175d2f25b 100644
--- a/ishtar_common/models_imports.py
+++ b/ishtar_common/models_imports.py
@@ -3042,6 +3042,8 @@ class MediaExporter(models.Model):
)
files_to_export = models.CharField(_("Files to export"), max_length=1,
choices=MEDIA_EXPORT_TYPES, default="I")
+ thumbnail_for_images = models.BooleanField(_("Use thumbnails for images"),
+ default=False)
cascade = models.BooleanField(
_("Cascade export"),
default=False,
@@ -3112,3 +3114,48 @@ class MediaExporter(models.Model):
user_profiles__person__ishtaruser__pk=user_id).exists():
return True
return False
+
+ def export(self, obj, tmpdir=None):
+ if not tmpdir:
+ tmpdir = tempfile.mkdtemp()
+ if not hasattr(obj, "documents"):
+ # database inconstency - should not occur
+ return
+ q = None
+ media_attrs = []
+ if self.files_to_export in ("A", "I"):
+ q = Q(image__isnull=False)
+ if self.thumbnail_for_images:
+ media_attrs = ["thumbnail"]
+ else:
+ media_attrs = ["image"]
+ if self.files_to_export in ("A", "F"):
+ q2 = Q(associated_file__isnull=False)
+ if q:
+ q |= q2
+ else:
+ q = q2
+ media_attrs.append("associated_file")
+ archive_path = os.path.join(tmpdir, "archive")
+ os.mkdir(archive_path)
+ for idx, document in enumerate(obj.documents.filter(q).all()):
+ for media_attr in media_attrs:
+ media = getattr(document, media_attr)
+ if not media or not media.path or not os.path.exists(media.path):
+ continue
+ base_name = media.path.split(os.path.sep)[-1]
+ ext = base_name.split(".")[-1]
+ if self.naming:
+ # TODO: naming
+ name = base_name
+ else:
+ if media_attr == "associated_file":
+ name = "file"
+ else:
+ name = "image"
+ name += f"_{idx + 1:05d}.{ext}"
+ shutil.copy(media.path, os.path.join(archive_path, name))
+ now = datetime.datetime.now()
+ archive_name = os.path.join(tmpdir, f"media-{now.strftime('%Y-%m-%d-%H%M%S')}")
+ shutil.make_archive(archive_name, "zip", archive_path)
+ return archive_name + ".zip"