Skip to content

Commit 73701a9

Browse files
authored
Merge pull request #1120 from AllenNeuralDynamics/release-v1.1.1
Release v1.1.1
2 parents 22a1e29 + d08148e commit 73701a9

File tree

4 files changed

+32
-6
lines changed

4 files changed

+32
-6
lines changed

docs/source/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
rig,
2222
session,
2323
subject,
24-
quality_control
24+
quality_control,
2525
)
2626

2727
dummy_object = [
@@ -34,7 +34,7 @@
3434
rig,
3535
session,
3636
subject,
37-
quality_control
37+
quality_control,
3838
] # A temporary workaround to bypass "Imported but unused" error
3939

4040
INSTITUTE_NAME = "Allen Institute for Neural Dynamics"

src/aind_data_schema/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
""" imports for AindModel subclasses
22
"""
33

4-
__version__ = "1.1.0"
4+
__version__ = "1.1.1"

src/aind_data_schema/core/rig.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ class Rig(AindCoreModel):
9090
notes: Optional[str] = Field(default=None, title="Notes")
9191

9292
@field_serializer("modalities", when_used="json")
93-
def serialize_modalities(modalities: Set[Modality.ONE_OF]):
94-
"""sort modalities by name when serializing to JSON"""
95-
return sorted(modalities, key=lambda x: x.name)
93+
def serialize_modalities(self, modalities: Set[Modality.ONE_OF]):
94+
"""Dynamically serialize modalities based on their type."""
95+
return sorted(modalities, key=lambda x: x.get("name") if isinstance(x, dict) else x.name)
9696

9797
@model_validator(mode="after")
9898
def validate_cameras_other(self):

tests/test_rig.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
""" test Rig """
22

33
import unittest
4+
import json
45
from datetime import date, datetime
56

67
from aind_data_schema_models.modalities import Modality
78
from aind_data_schema_models.organizations import Organization
89
from pydantic import ValidationError
10+
from pydantic_core import PydanticSerializationError
911

1012
from aind_data_schema.components.devices import (
1113
Calibration,
@@ -821,6 +823,30 @@ def test_rig_id_validator(self):
821823
calibrations=[calibration],
822824
)
823825

826+
def test_serialize_modalities(self):
827+
"""Tests that modalities serializer can handle different types"""
828+
expected_modalities = [{"name": "Extracellular electrophysiology", "abbreviation": "ecephys"}]
829+
# Case 1: Modality is a class instance
830+
rig_instance_modality = Rig.model_construct(
831+
modalities=[Modality.ECEPHYS] # Example with a valid Modality instance
832+
)
833+
rig_json = rig_instance_modality.model_dump_json()
834+
rig_data = json.loads(rig_json)
835+
self.assertEqual(rig_data["modalities"], expected_modalities)
836+
837+
# Case 2: Modality is a dictionary when Rig is constructed from JSON
838+
rig_dict_modality = Rig.model_construct(**rig_data)
839+
rig_dict_json = rig_dict_modality.model_dump_json()
840+
rig_dict_data = json.loads(rig_dict_json)
841+
self.assertEqual(rig_dict_data["modalities"], expected_modalities)
842+
843+
# Case 3: Modality is an unknown type
844+
with self.assertRaises(PydanticSerializationError) as context:
845+
rig_unknown_modality = Rig.model_construct(modalities={"UnknownModality"})
846+
847+
rig_unknown_modality.model_dump_json()
848+
self.assertIn("Error calling function `serialize_modalities`", str(context.exception))
849+
824850

825851
if __name__ == "__main__":
826852
unittest.main()

0 commit comments

Comments
 (0)