From fed4c26f2125e2b206898712799688db13a11855 Mon Sep 17 00:00:00 2001 From: daniel Date: Sun, 29 Jun 2025 13:54:15 +0200 Subject: [PATCH] fix: cordapy response parsing --- src/mcp_cordra/client.py | 15 +++++++------- tests/test_client.py | 44 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/mcp_cordra/client.py b/src/mcp_cordra/client.py index 47a49bc..17b71f3 100644 --- a/src/mcp_cordra/client.py +++ b/src/mcp_cordra/client.py @@ -54,9 +54,8 @@ class CordraClient: CordraClientError: For other API errors """ try: - # Use CordraPy to read the object - cordra_obj = cordra.CordraObject.read( - host=self.config.cordra_url, # type: ignore + cordra_obj: dict[str, Any] = cordra.CordraObject.read( + host=self.config.cordra_url, #type: ignore obj_id=object_id, username=self.config.username, password=self.config.password, @@ -66,11 +65,11 @@ class CordraClient: return DigitalObject( id=object_id, - type=getattr(cordra_obj, 'type', ''), - content=getattr(cordra_obj, 'content', {}), - metadata=getattr(cordra_obj, 'metadata', None), - acl=getattr(cordra_obj, 'acl', None), - payloads=getattr(cordra_obj, 'payloads', None), + type=cordra_obj['type'], + content=cordra_obj['content'], + metadata=cordra_obj.get('metadata'), + acl=cordra_obj.get('acl'), + payloads=cordra_obj.get('payloads'), ) except Exception as e: diff --git a/tests/test_client.py b/tests/test_client.py index ca8ed84..945e832 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -1,6 +1,6 @@ """Unit tests for the Cordra client.""" -from unittest.mock import Mock, patch +from unittest.mock import patch import pytest @@ -32,27 +32,27 @@ def client(config): @pytest.fixture def mock_cordra_object(): - """Create a mock CordraObject.""" - mock_obj = Mock() - mock_obj.type = "TestType" - mock_obj.content = {"title": "Test Object", "description": "A test object"} - mock_obj.metadata = {"created": "2023-01-01", "modified": "2023-01-02"} - mock_obj.acl = {"read": ["public"], "write": ["admin"]} - mock_obj.payloads = [ - { - "name": "file1.txt", - "filename": "file1.txt", - "size": 1024, - "mediaType": "text/plain" - }, - { - "name": "file2.pdf", - "filename": "file2.pdf", - "size": 2048, - "mediaType": "application/pdf" - } - ] - return mock_obj + """Create a mock CordraObject response (dictionary).""" + return { + "type": "TestType", + "content": {"title": "Test Object", "description": "A test object"}, + "metadata": {"created": "2023-01-01", "modified": "2023-01-02"}, + "acl": {"read": ["public"], "write": ["admin"]}, + "payloads": [ + { + "name": "file1.txt", + "filename": "file1.txt", + "size": 1024, + "mediaType": "text/plain" + }, + { + "name": "file2.pdf", + "filename": "file2.pdf", + "size": 2048, + "mediaType": "application/pdf" + } + ] + } class TestDigitalObject: