From 922428d2dd2e0b9f6920be1e6bfe5690b31c11d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20=C8=98tef=C4=83nescu?= Date: Tue, 2 Dec 2025 19:39:04 +0100 Subject: [PATCH 1/2] Raise ProcessingException for password protectex 7z archive. --- ingestors/packages/__init__.py | 9 ++++++--- ingestors/support/package.py | 9 +++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ingestors/packages/__init__.py b/ingestors/packages/__init__.py index 6a919de5b..b4ae0fe22 100644 --- a/ingestors/packages/__init__.py +++ b/ingestors/packages/__init__.py @@ -5,9 +5,9 @@ from pathlib import PurePath import py7zr -from py7zr.exceptions import ArchiveError +from py7zr.exceptions import ArchiveError, PasswordRequired -from ingestors.exc import ProcessingException +from ingestors.exc import ENCRYPTED_MSG, ProcessingException from ingestors.ingestor import Ingestor from ingestors.support.package import PackageSupport from ingestors.support.shell import ShellSupport @@ -29,7 +29,10 @@ def unpack(self, file_path, entity, temp_dir): try: with py7zr.SevenZipFile(str(pure_file_path), mode="r") as extractor: - extractor.extractall(path=temp_dir) + try: + extractor.extractall(path=temp_dir) + except PasswordRequired: + raise ProcessingException(ENCRYPTED_MSG) except ArchiveError as e: raise ProcessingException(f"Error: {e}") diff --git a/ingestors/support/package.py b/ingestors/support/package.py index b17326370..d77a769aa 100644 --- a/ingestors/support/package.py +++ b/ingestors/support/package.py @@ -1,11 +1,12 @@ -import shutil import logging +import shutil + from followthemoney import model -from ingestors.support.temp import TempFileSupport -from ingestors.support.encoding import EncodingSupport from ingestors.directory import DirectoryIngestor from ingestors.exc import ProcessingException +from ingestors.support.encoding import EncodingSupport +from ingestors.support.temp import TempFileSupport log = logging.getLogger(__name__) @@ -36,7 +37,7 @@ def ingest(self, file_path, entity): self.manager.delegate(DirectoryIngestor, temp_dir, entity) except ProcessingException as e: raise ProcessingException( - "Could not unpack the contents of this file." + f"Could not unpack the contents of this file. {e}" ) from e def unpack(self, file_path, entity, temp_dir): From dd5bf2423f84dc85003bbc7f9b4f85dd62756b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20=C8=98tef=C4=83nescu?= Date: Tue, 2 Dec 2025 20:24:53 +0100 Subject: [PATCH 2/2] Add tests --- tests/fixtures/500_pages_password.7z | Bin 0 -> 11682 bytes tests/test_packages.py | 11 ++++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/500_pages_password.7z diff --git a/tests/fixtures/500_pages_password.7z b/tests/fixtures/500_pages_password.7z new file mode 100644 index 0000000000000000000000000000000000000000..2b6a10e92eade7b68c5f198c368b779b96f3a1fb GIT binary patch literal 11682 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
N>pK0W`TFwc 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 literal 0 HcmV?d00001 diff --git a/tests/test_packages.py b/tests/test_packages.py index 084b3a7de..617b25656 100644 --- a/tests/test_packages.py +++ b/tests/test_packages.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from pprint import pprint # noqa -from .support import TestCase +from tests.support import TestCase class PackagesTest(TestCase): @@ -22,3 +22,12 @@ def test_tar(self): self.manager.ingest(fixture_path, entity) self.assertEqual(entity.first("processingStatus"), self.manager.STATUS_SUCCESS) self.assertEqual(entity.schema.name, "Package") + + def test_password_protected_7z(self): + fixture_path, entity = self.fixture("500_pages_password.7z") + self.manager.ingest(fixture_path, entity) + self.assertEqual(entity.first("processingStatus"), self.manager.STATUS_FAILURE) + self.assertEqual( + entity.get("processingError")[0], + "Could not unpack the contents of this file. The document might be protected with a password. Try removing the password protection and re-uploading the documents.", + )