From 7c60031ebf6ea434b3340d034eb1e99314c64666 Mon Sep 17 00:00:00 2001 From: Matteo Campinoti Date: Wed, 22 Nov 2023 12:29:03 +0100 Subject: [PATCH 1/2] models:file - give precedence to !empty file action --- acacore/models/file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acacore/models/file.py b/acacore/models/file.py index ab3de33..88478f1 100644 --- a/acacore/models/file.py +++ b/acacore/models/file.py @@ -235,7 +235,7 @@ def get_action( if self.is_binary: identifiers.append("!binary") if not self.size: - identifiers.append("!empty") + identifiers.insert(0, "!empty") for identifier in identifiers: action = actions.get(identifier) From 0535c502e24f4fe796788c2966b0380d78dc13ae Mon Sep 17 00:00:00 2001 From: Matteo Campinoti Date: Wed, 22 Nov 2023 12:35:40 +0100 Subject: [PATCH 2/2] models:file - apply ground ignore-if rules --- acacore/models/file.py | 44 ++++++++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/acacore/models/file.py b/acacore/models/file.py index 88478f1..97e49f3 100644 --- a/acacore/models/file.py +++ b/acacore/models/file.py @@ -20,10 +20,32 @@ from .reference_files import Action from .reference_files import ActionData from .reference_files import CustomSignature +from .reference_files import IgnoreIfAction from .reference_files import ManualAction from .reference_files import TActionType +def _ignore_if(file: "File", ignore_ifs: list[IgnoreIfAction]) -> "File": + for ignore_if in ignore_ifs: + if ignore_if.pixel_total or ignore_if.pixel_width or ignore_if.pixel_height: + width, height = image_size(file.get_absolute_path()) + if ( + width * height < (ignore_if.pixel_total or 0) + or width < (ignore_if.pixel_width or 0) + or height < (ignore_if.pixel_height or 0) + ): + file.action = "ignore" + file.action_data.ignore.reason = ignore_if.reason or file.action_data.ignore.reason + elif file.is_binary and file.size < (ignore_if.binary_size or 0): # noqa: SIM114 + file.action = "ignore" + file.action_data.ignore.reason = ignore_if.reason or file.action_data.ignore.reason + elif file.size < (ignore_if.size or 0): + file.action = "ignore" + file.action_data.ignore.reason = ignore_if.reason or file.action_data.ignore.reason + + return file + + class File(ACABase): """ File model containing all information used by the rest of the archival suite of tools. @@ -131,23 +153,11 @@ def from_file( file.action_data = ActionData(manual=ManualAction(reason="Re-identify failure", process="")) file.puid = file.signature = file.warning = None - if file.action_data and file.action_data.ignore and file.action_data.ignore.ignore_if: - for ignore_if in file.action_data.ignore.ignore_if: - if ignore_if.pixel_total or ignore_if.pixel_width or ignore_if.pixel_height: - width, height = image_size(file.get_absolute_path()) - if ( - width * height < (ignore_if.pixel_total or 0) - or width < (ignore_if.pixel_width or 0) - or height < (ignore_if.pixel_height or 0) - ): - file.action = "ignore" - file.action_data.ignore.reason = ignore_if.reason or file.action_data.ignore.reason - elif file.is_binary and file.size < (ignore_if.binary_size or 0): # noqa: SIM114 - file.action = "ignore" - file.action_data.ignore.reason = ignore_if.reason or file.action_data.ignore.reason - elif file.size < (ignore_if.size or 0): - file.action = "ignore" - file.action_data.ignore.reason = ignore_if.reason or file.action_data.ignore.reason + if file.action_data and file.action_data.ignore: + file = _ignore_if(file, file.action_data.ignore.ignore_if) + + if file.action != "ignore" and actions and "*" in actions: + file = _ignore_if(file, actions["*"].ignore.ignore_if if actions["*"].ignore else []) return file