From 6cf3e109edb8ac19a6f3008dc1e1134bffe652a4 Mon Sep 17 00:00:00 2001 From: msramalho <19508417+msramalho@users.noreply.github.com> Date: Mon, 26 Jun 2023 17:05:25 +0100 Subject: [PATCH] refactor discovery of inner media elements --- src/auto_archiver/core/media.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/auto_archiver/core/media.py b/src/auto_archiver/core/media.py index cc65098..55af33e 100644 --- a/src/auto_archiver/core/media.py +++ b/src/auto_archiver/core/media.py @@ -30,15 +30,19 @@ class Media: return for s in storages: - s.store(self, url) - # Media can be inside media properties, examples include transformations on original media - for prop in self.properties.values(): - if isinstance(prop, Media): - s.store(prop, url) - if isinstance(prop, list): - for prop_media in prop: - if isinstance(prop_media, Media): - s.store(prop_media, url) + for any_media in self.all_inner_media(include_self=True): + s.store(any_media, url) + + def all_inner_media(self, include_self=False): + """ Media can be inside media properties, examples include transformations on original media. + This function return a generator for all the inner media. + """ + if include_self: yield self + for prop in self.properties.values(): + if isinstance(prop, Media): yield prop + if isinstance(prop, list): + for prop_media in prop: + if isinstance(prop_media, Media): yield prop_media def is_stored(self) -> bool: return len(self.urls) > 0 and len(self.urls) == len(ArchivingContext.get("storages")) @@ -70,3 +74,6 @@ class Media: def is_audio(self) -> bool: return self.mimetype.startswith("audio") + + def is_image(self) -> bool: + return self.mimetype.startswith("image")