diff --git a/swh/web/client/__init__.py b/swh/web/client/__init__.py --- a/swh/web/client/__init__.py +++ b/swh/web/client/__init__.py @@ -1 +1 @@ -from .client import WebAPIClient # NoQA: F401 +from .client import WebAPIClient, typify # NoQA: F401 diff --git a/swh/web/client/client.py b/swh/web/client/client.py --- a/swh/web/client/client.py +++ b/swh/web/client/client.py @@ -69,7 +69,10 @@ def to_pid(object_type, s): return PID(object_type=object_type, object_id=s) - def to_date(s): + # The date attribute is optional for Revision and Release object + def to_date(s, optional=False): + if optional and s is None: + return None return dateutil.parser.parse(s) def obj_type_of_entry_type(s): @@ -92,12 +95,12 @@ data['id'] = to_pid(obj_type, data['id']) data['directory'] = to_pid(DIRECTORY, data['directory']) for key in ('date', 'committer_date'): - data[key] = to_date(data[key]) + data[key] = to_date(data[key], optional=True) for parent in data['parents']: parent['id'] = to_pid(REVISION, parent['id']) elif obj_type == RELEASE: data['id'] = to_pid(obj_type, data['id']) - data['date'] = to_date(data['date']) + data['date'] = to_date(data['date'], optional=True) data['target'] = to_pid(data['target_type'], data['target']) elif obj_type == DIRECTORY: dir_pid = None diff --git a/swh/web/client/tests/test_web_api_client.py b/swh/web/client/tests/test_web_api_client.py --- a/swh/web/client/tests/test_web_api_client.py +++ b/swh/web/client/tests/test_web_api_client.py @@ -10,6 +10,9 @@ import pytest +from swh.model.identifiers import REVISION + +from swh.web.client import typify from swh.web.client.auth import AuthenticationError from swh.model.identifiers import parse_persistent_identifier as parse_pid @@ -214,3 +217,17 @@ assert visits[0]["snapshot"] is None snapshot_pid = 'swh:1:snp:456550ea74af4e2eecaa406629efaaf0b9b5f976' assert visits[7]["snapshot"] == parse_pid(snapshot_pid) + + +def test_typify_minimal_revision(): + revision_data = { + 'id': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + 'directory': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', + 'date': None, + 'committer_date': None, + 'parents': [] + } + revision_typed = typify(revision_data, REVISION) + pid = "swh:1:rev:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" + assert revision_typed['id'] == parse_pid(pid) + assert revision_typed['date'] is None