From 0fbb7ced8f6e7d75a4ceb1b8b52c136d3e884a29 Mon Sep 17 00:00:00 2001 From: Shaan Doshi Date: Fri, 2 Oct 2026 11:58:34 -0500 Subject: [PATCH 1/2] Fix Enum deserialization error --- src/instrumentserver/blueprints.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/instrumentserver/blueprints.py b/src/instrumentserver/blueprints.py index 7cbcd54..16df51f 100644 --- a/src/instrumentserver/blueprints.py +++ b/src/instrumentserver/blueprints.py @@ -774,6 +774,15 @@ def _convert_dict_to_obj(item_dict: dict) -> Any: mod = importlib.import_module(".".join(parts[:-1])) cls = getattr(mod, parts[-1]) item_dict.pop("_class_type") + + # An Enum's value being a namedtuple is serialized/deserialized as a list instead of deserialized as the correct object. + if issubclass(cls, Enum): + value = item_dict["value"] + if isinstance(value, list): + enum_value_type = type(next(iter(cls)).value) + value = enum_value_type(*value) + return cls(value) + return cls(**item_dict) try: From 8f5a712fad001bd5046565eb86d440aed571e2bf Mon Sep 17 00:00:00 2001 From: Shaan Doshi Date: Fri, 2 Oct 2026 12:20:40 -0500 Subject: [PATCH 2/2] make fix narrower so only changes Enum with Object value behavior --- src/instrumentserver/blueprints.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/instrumentserver/blueprints.py b/src/instrumentserver/blueprints.py index 16df51f..cc723b1 100644 --- a/src/instrumentserver/blueprints.py +++ b/src/instrumentserver/blueprints.py @@ -774,15 +774,15 @@ def _convert_dict_to_obj(item_dict: dict) -> Any: mod = importlib.import_module(".".join(parts[:-1])) cls = getattr(mod, parts[-1]) item_dict.pop("_class_type") - + # An Enum's value being a namedtuple is serialized/deserialized as a list instead of deserialized as the correct object. - if issubclass(cls, Enum): + if isinstance(cls, type) and issubclass(cls, Enum): value = item_dict["value"] if isinstance(value, list): enum_value_type = type(next(iter(cls)).value) value = enum_value_type(*value) return cls(value) - + return cls(**item_dict) try: