diff --git a/emannotationschemas/__init__.py b/emannotationschemas/__init__.py index d8fa67b..b853d4b 100644 --- a/emannotationschemas/__init__.py +++ b/emannotationschemas/__init__.py @@ -71,6 +71,10 @@ ProofreadingBoolStatusUser, ProofreadStatus, ) +from emannotationschemas.schemas.reference_float import ( + ReferenceDoubleFloat, + ReferenceTripleFloat, +) from emannotationschemas.schemas.reference_text_float import ( ReferenceTagFloat, ) @@ -138,6 +142,8 @@ "pt_bool_valid": SpatialPointBoolWithValid, "reference_integer": ReferenceInteger, "reference_tag_float": ReferenceTagFloat, + "reference_double_float": ReferenceDoubleFloat, + "reference_triple_float": ReferenceTripleFloat, "compartment_proofread_status_strategy": CompartmentProofreadStatusStrategy, "reference_tag_with_confidence": ReferenceTagWithConfidence, "digital_twin_properties": DigitalTwinPropertiesBCM, diff --git a/emannotationschemas/schemas/reference_float.py b/emannotationschemas/schemas/reference_float.py new file mode 100644 index 0000000..8c56a05 --- /dev/null +++ b/emannotationschemas/schemas/reference_float.py @@ -0,0 +1,24 @@ +import marshmallow as mm + +from emannotationschemas.schemas.base import ReferenceAnnotation + + +class ReferenceDoubleFloat(ReferenceAnnotation): + value = mm.fields.Float( + required=True, description="First float value attached to the annotation" + ) + value2 = mm.fields.Float( + required=True, description="Second float value attached to the annotation" + ) + + +class ReferenceTripleFloat(ReferenceAnnotation): + value = mm.fields.Float( + required=True, description="First float value attached to the annotation" + ) + value2 = mm.fields.Float( + required=True, description="Second float value attached to the annotation" + ) + value3 = mm.fields.Float( + required=True, description="Third float value attached to the annotation" + ) diff --git a/tests/test_reference_float_schema.py b/tests/test_reference_float_schema.py new file mode 100644 index 0000000..c9adff5 --- /dev/null +++ b/tests/test_reference_float_schema.py @@ -0,0 +1,40 @@ +import pytest +from marshmallow import ValidationError + +from emannotationschemas import get_schema, get_types +from emannotationschemas.schemas.reference_float import ( + ReferenceDoubleFloat, + ReferenceTripleFloat, +) + +target_id = 1 + + +def test_reference_double_float(): + result = ReferenceDoubleFloat().load( + {"target_id": target_id, "value": 0.5, "value2": 1.5} + ) + assert result["target_id"] == target_id + assert result["value"] == 0.5 + assert result["value2"] == 1.5 + + +def test_reference_triple_float(): + result = ReferenceTripleFloat().load( + {"target_id": target_id, "value": 0.1, "value2": 0.2, "value3": 0.3} + ) + assert result["value"] == 0.1 + assert result["value2"] == 0.2 + assert result["value3"] == 0.3 + + +def test_reference_double_float_missing_value(): + with pytest.raises(ValidationError): + ReferenceDoubleFloat().load({"target_id": target_id, "value": 0.5}) + + +def test_registered_in_type_mapping(): + assert get_schema("reference_double_float") is ReferenceDoubleFloat + assert get_schema("reference_triple_float") is ReferenceTripleFloat + assert "reference_double_float" in get_types() + assert "reference_triple_float" in get_types()