Skip to content
Snippets Groups Projects

F dict heuristic

Merged Florian Spreckelsen requested to merge f-dict-heuristic into dev
1 file
+ 98
5
Compare changes
  • Side-by-side
  • Inline
@@ -742,7 +742,7 @@ def test_properties_from_dict_basic(converter_registry):
referenced = my_rec.get_property("scalar_ref").value
assert isinstance(referenced, db.Record)
assert len(referenced.parents) == 1
assert "scalar_ref" in [par.name for par in referenced.parents]
assert referenced.has_parent("scalar_ref")
assert referenced.get_property("a") is not None
assert referenced.get_property("a").value == 23
# blacklisted
@@ -755,7 +755,7 @@ def test_properties_from_dict_basic(converter_registry):
for rec in my_rec.get_property("list_ref").value:
assert isinstance(rec, db.Record)
assert len(rec.parents) == 1
assert "list_ref" in [par.name for par in rec.parents]
assert rec.has_parent("list_ref")
assert rec.get_property("c") is not None
assert type(rec.get_property("c")) is bool
assert True in [rec.get_property("c").value for rec in my_rec.get_property("list_ref").value]
@@ -766,14 +766,14 @@ def test_properties_from_dict_basic(converter_registry):
outer_rec = my_rec.get_property("ref_with_ref").value
assert isinstance(outer_rec, db.Record)
assert len(outer_rec.parents) == 1
assert "ref_with_ref" in [par.name for par in outer_rec.parents]
assert outer_rec.has_parent("ref_with_ref")
assert outer_rec.get_property("a") is not None
assert outer_rec.get_property("a").value == 789
assert outer_rec.get_property("ref_in_ref") is not None
inner_rec = outer_rec.get_property("ref_in_ref").value
assert isinstance(inner_rec, db.Record)
assert len(inner_rec.parents) == 1
assert "ref_in_ref" in [par.name for par in inner_rec.parents]
assert inner_rec.has_parent("ref_in_ref")
assert inner_rec.get_property("b") is not None
assert inner_rec.get_property("b").value == "something"
@@ -786,6 +786,99 @@ def test_properties_from_dict_basic(converter_registry):
author_rec = my_rec.get_property("author").value
assert isinstance(author_rec, db.Record)
assert len(author_rec.parents) == 1
assert "Person" in [par.name for par in author_rec.parents]
assert author_rec.has_parent("Person")
assert author_rec.get_property("full_name") is not None
assert author_rec.get_property("full_name").value == "Some Author"
def test_properties_from_dict_errors(converter_registry):
with pytest.raises(ValueError) as ve:
pdfc = PropertiesFromDictConverter(
definition={
},
name="TestConverter",
converter_registry=converter_registry
)
assert "You need to specify the (root) record" in str(ve.value)
with pytest.raises(ValueError) as ve:
pdfc = PropertiesFromDictConverter(
definition={
"record_from_dict": {}
},
name="TestConverter",
converter_registry=converter_registry
)
assert "needs to have a `variable_name`" in str(ve.value)
def test_properties_from_dict_callable(converter_registry):
def convert_some_values(rec: db.Record):
"""Add an URL prefix to a property value if appliccable."""
if rec.get_property("url") is not None:
old_val = rec.get_property("url").value
if not (old_val is None or old_val.startswith("http")):
# only add if there is a value that doesn't look like an URL
rec.get_property("url").value = f"https://test.com/{old_val}"
return rec
pdfc = PropertiesFromDictConverter(
definition={
"record_from_dict": {
"variable_name": "MyRec"
"name": "My New Record"
},
name = "TestConverter",
converter_registry = converter_registry,
referenced_record_callback = convert_some_values
}
)
values = GeneralStore()
records = RecordStore()
test_dict_element = DictElement("TestDictElement", {
"url": "something",
"referenced1": {
"url": "referenced"
},
"referenced2": {
"nourl": "something else"
"url": "https://indiscale.com"
}
})
pdfc.create_records(values=values, records=records, element=test_dict_element)
assert "MyRec" in records
my_rec = records["MyRec"]
assert isinstance(my_rec, db.Record)
assert len(my_rec.parents) == 1
assert my_rec.has_parent("MyRec")
assert my_rec.name == "My New Record"
# simple conversion
assert my_rec.get_property("url") is not None
assert my_rec.get_property("url").value == "https://test.com/something"
# also works in referenced
assert my_rec.get_property("referenced1") is not None
referenced1 = my_rec.get_property("referenced1").value
assert isinstance(referenced1, db.Record)
assert referenced1.get_property("url") is not None
assert referenced1.get_property("url").value == "https://test.com/referenced"
# ... and works as expected
assert my_rec.get_property("referenced2") is not None
referenced2 = my_rec.get_property("referenced2").value
assert isinstance(referenced2, db.Record)
assert referenced2.get_property("nourl") is not None
assert referenced2.get_property("nourl").value == "something else"
assert referenced2.get_property("url") is not None
assert referenced2.get_property("url").value == "https://indiscale.com"
Loading