Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions pipeline/src/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,17 @@ def to_jsonld(self, include_empty_properties=True, embed_linked_nodes=True, with
)
for item in value
]
elif isinstance(value, (tuple, list)):
# if property.multiple is False, then this means the node does not validate,
# but we should try to serialize it anyway
data[property.path] = [
value_to_jsonld(
item,
include_empty_properties=include_empty_properties,
embed_linked_nodes=embed_linked_nodes,
)
for item in value
]
else:
data[property.path] = value_to_jsonld(
value,
Expand Down
2 changes: 1 addition & 1 deletion pipeline/src/properties.py
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ def deserialize_item(item):
else:
raise NotImplementedError()

if self.multiple and isinstance(data, (tuple, list)):
if isinstance(data, (tuple, list)):
return [deserialize_item(item) for item in data]
else:
return deserialize_item(data)
19 changes: 19 additions & 0 deletions pipeline/tests/test_regressions.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,3 +235,22 @@ def test_issue0023():
assert len(dv_again.custodians[0].affiliations) == 2
assert dv_again.custodians[0].affiliations[0].member_of.full_name == "University of This Place"
assert dv_again.custodians[0].affiliations[1].member_of.full_name == "University of That Place"


def test_issue0056():
# https://github.com/openMetadataInitiative/openMINDS_Python/issues/56
# Since we are permissive on object creation, serialization to JSON-LD should work
# even if the object gives validation failures.
# However, under some circumstances, to_jsonld() produces a data structure
# that cannot be saved as a JSON string.
dataset = omcore.Dataset(
digital_identifier=[
omcore.DOI(identifier="abc"),
omcore.DOI(identifier="def")
]
)
failures = dataset.validate(ignore=["required"])
assert len(failures) == 1
assert failures["multiplicity"] == ['digital_identifier does not accept multiple values, but contains 2']
data = dataset.to_jsonld()
json.dumps(data) # this should not raise an Exception