Skip to content

Commit 5273e03

Browse files
authored
Merge pull request #57 from openMetadataInitiative/issue56
Fix for #56
2 parents 63e827d + d1ffe0e commit 5273e03

3 files changed

Lines changed: 31 additions & 1 deletion

File tree

pipeline/src/base.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,17 @@ def to_jsonld(self, include_empty_properties=True, embed_linked_nodes=True, with
9292
)
9393
for item in value
9494
]
95+
elif isinstance(value, (tuple, list)):
96+
# if property.multiple is False, then this means the node does not validate,
97+
# but we should try to serialize it anyway
98+
data[property.path] = [
99+
value_to_jsonld(
100+
item,
101+
include_empty_properties=include_empty_properties,
102+
embed_linked_nodes=embed_linked_nodes,
103+
)
104+
for item in value
105+
]
95106
else:
96107
data[property.path] = value_to_jsonld(
97108
value,

pipeline/src/properties.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def deserialize_item(item):
215215
else:
216216
raise NotImplementedError()
217217

218-
if self.multiple and isinstance(data, (tuple, list)):
218+
if isinstance(data, (tuple, list)):
219219
return [deserialize_item(item) for item in data]
220220
else:
221221
return deserialize_item(data)

pipeline/tests/test_regressions.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,22 @@ def test_issue0023():
235235
assert len(dv_again.custodians[0].affiliations) == 2
236236
assert dv_again.custodians[0].affiliations[0].member_of.full_name == "University of This Place"
237237
assert dv_again.custodians[0].affiliations[1].member_of.full_name == "University of That Place"
238+
239+
240+
def test_issue0056():
241+
# https://github.com/openMetadataInitiative/openMINDS_Python/issues/56
242+
# Since we are permissive on object creation, serialization to JSON-LD should work
243+
# even if the object gives validation failures.
244+
# However, under some circumstances, to_jsonld() produces a data structure
245+
# that cannot be saved as a JSON string.
246+
dataset = omcore.Dataset(
247+
digital_identifier=[
248+
omcore.DOI(identifier="abc"),
249+
omcore.DOI(identifier="def")
250+
]
251+
)
252+
failures = dataset.validate(ignore=["required"])
253+
assert len(failures) == 1
254+
assert failures["multiplicity"] == ['digital_identifier does not accept multiple values, but contains 2']
255+
data = dataset.to_jsonld()
256+
json.dumps(data) # this should not raise an Exception

0 commit comments

Comments
 (0)