From 0be5d670ed82f7b47e0c0b1fb17052933e060eda Mon Sep 17 00:00:00 2001 From: wassaf shahzad Date: Fri, 18 Aug 2023 11:17:42 -0700 Subject: [PATCH] Added fix for serializing PIL images (#1619) --- reflex/utils/format.py | 6 +++++- reflex/utils/types.py | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/reflex/utils/format.py b/reflex/utils/format.py index 3eb6ae8d3..193fee728 100644 --- a/reflex/utils/format.py +++ b/reflex/utils/format.py @@ -381,7 +381,7 @@ def format_image_data(value: Type) -> str: return f"data:image/png;base64,{base64_image}" -def format_state(value: Any) -> Dict: +def format_state(value: Any) -> Any: """Recursively format values in the given state. Args: @@ -397,6 +397,10 @@ def format_state(value: Any) -> Dict: if isinstance(value, dict): return {k: format_state(v) for k, v in value.items()} + # Handle lists, sets, typles. + if isinstance(value, types.StateIterBases): + return [format_state(v) for v in value] + # Return state vars as is. if isinstance(value, types.StateBases): return value diff --git a/reflex/utils/types.py b/reflex/utils/types.py index c0a4d0889..dbd7ce4f4 100644 --- a/reflex/utils/types.py +++ b/reflex/utils/types.py @@ -14,6 +14,7 @@ GenericType = Union[Type, _GenericAlias] # Valid state var types. PrimitiveType = Union[int, float, bool, str, list, dict, set, tuple] StateVar = Union[PrimitiveType, Base, None] +StateIterVar = Union[list, set, tuple] def get_args(alias: _GenericAlias) -> Tuple[Type, ...]: @@ -198,3 +199,4 @@ def is_backend_variable(name: str) -> bool: # Store this here for performance. StateBases = get_base_class(StateVar) +StateIterBases = get_base_class(StateIterVar)