From 3984e02d8e9f44da4607e6fa8180de8fd4009102 Mon Sep 17 00:00:00 2001 From: Liam Lloyd-Tucker Date: Thu, 19 Feb 2026 15:29:07 -0800 Subject: [PATCH] Fix TypeError in _capture_transfer_failure Currently, _capture_transfer_failure makes a call to `isinstance` with three arguments. `isinstance` takes only two arguments, so this results in a TypeError. This commit updates the `isinstance` call to instead use a tuple to pass multiple classes. It also adds unit tests for _capture_transfer_failure. --- .../MCPServer/server/packages.py | 2 +- tests/MCPServer/test_package.py | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/archivematica/MCPServer/server/packages.py b/src/archivematica/MCPServer/server/packages.py index 389fba2fb8..b7c0540190 100644 --- a/src/archivematica/MCPServer/server/packages.py +++ b/src/archivematica/MCPServer/server/packages.py @@ -375,7 +375,7 @@ def wrap(*args, **kwargs): except Exception as err: # The main purpose of this decorator is to update the Transfer with # the new state (fail). If the Transfer does not exist we give up. - if isinstance(err, models.Transfer.DoesNotExist, ValidationError): + if isinstance(err, (models.Transfer.DoesNotExist, ValidationError)): raise else: logger.exception("Exception occurred during transfer processing") diff --git a/tests/MCPServer/test_package.py b/tests/MCPServer/test_package.py index d84a3dde36..4472037a72 100644 --- a/tests/MCPServer/test_package.py +++ b/tests/MCPServer/test_package.py @@ -11,6 +11,7 @@ from archivematica.MCPServer.server.packages import SIP from archivematica.MCPServer.server.packages import Package from archivematica.MCPServer.server.packages import Transfer +from archivematica.MCPServer.server.packages import _capture_transfer_failure from archivematica.MCPServer.server.packages import _determine_transfer_paths from archivematica.MCPServer.server.packages import _move_to_internal_shared_dir from archivematica.MCPServer.server.packages import ( @@ -430,3 +431,34 @@ def test_create_package(tmp_path, admin_user, settings): # Verify a transfer was added. assert models.Transfer.objects.count() == 1 + + +def test_capture_transfer_failure_propagates_transfer_does_not_exist(): + @_capture_transfer_failure + def fn(): + raise models.Transfer.DoesNotExist + + with pytest.raises(models.Transfer.DoesNotExist): + fn() + + +def test_capture_transfer_failure_propagates_validation_error(): + @_capture_transfer_failure + def fn(): + raise ValidationError("invalid argument") + + with pytest.raises(ValidationError): + fn() + + +def test_capture_transfer_failure_logs_other_exceptions(): + @_capture_transfer_failure + def fn(): + raise RuntimeError("something went wrong") + + with mock.patch("archivematica.MCPServer.server.packages.logger") as mock_logger: + fn() + + mock_logger.exception.assert_called_once_with( + "Exception occurred during transfer processing" + )