From 202eb6b173a3a17391d36877a3bb8ce6deac43b5 Mon Sep 17 00:00:00 2001 From: Danglewood <85772166+deeleeramone@users.noreply.github.com> Date: Wed, 5 Mar 2025 08:15:43 -0800 Subject: [PATCH] [Feature] Custom Serializer For OptionsChainsData For Outputting List Of Records (#7035) * add a custom serializer to OptionsChainsData to convert model output to list of dictionaries * unused items --------- Co-authored-by: Theodore Aptekarev --- .../standard_models/options_chains.py | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py b/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py index f4e270bbbdd..38486d07f80 100644 --- a/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py +++ b/openbb_platform/core/openbb_core/provider/standard_models/options_chains.py @@ -12,7 +12,7 @@ from openbb_core.provider.utils.descriptions import ( QUERY_DESCRIPTIONS, ) from openbb_core.provider.utils.options_chains_properties import OptionsChainsProperties -from pydantic import Field, field_validator +from pydantic import Field, field_validator, model_serializer class OptionsChainsQueryParams(QueryParams): @@ -351,3 +351,22 @@ class OptionsChainsData(OptionsChainsProperties): if isinstance(v[0], str): return [datetime.strptime(d, "%Y-%m-%d") if d else None for d in v] return v + + @model_serializer + def model_serialize(self): + """Return the serialized data.""" + data: dict = {} + for field in self.model_fields: + value = getattr(self, field) + if isinstance(value, list): + if value: # Check if the list is not empty + if isinstance(value[0], datetime): + data[field] = [str(v) if v else None for v in value] + else: + data[field] = value + else: + data[field] = value + + records = [dict(zip(data.keys(), values)) for values in zip(*data.values())] + + return records