From 6291c39fd7d5e73d8dd005965750e78a73ccfe07 Mon Sep 17 00:00:00 2001 From: Benedikt Bartscher Date: Thu, 29 Feb 2024 00:27:00 +0100 Subject: [PATCH] minor state fixes, and var serialization --- reflex/state.py | 6 +++--- reflex/vars.py | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/reflex/state.py b/reflex/state.py index 84adbd0fc..7fe50e55c 100644 --- a/reflex/state.py +++ b/reflex/state.py @@ -435,11 +435,11 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): # Set the base and computed vars. cls.base_vars = { - f.name: BaseVar(_var_name=f.name, _var_type=f.annotation)._var_set_state( + field_name: BaseVar(_var_name=field_name, _var_type=field.annotation)._var_set_state( cls ) - for f in cls.get_fields().values() - if f.name not in cls.get_skip_vars() + for field_name, field in cls.get_fields().items() + if field_name not in cls.get_skip_vars() } cls.computed_vars = {v._var_name: v._var_set_state(cls) for v in computed_vars} cls.vars = { diff --git a/reflex/vars.py b/reflex/vars.py index 4b7ee6ab0..bc4a81fa9 100644 --- a/reflex/vars.py +++ b/reflex/vars.py @@ -31,6 +31,7 @@ from typing import ( get_origin, get_type_hints, ) +import pydantic_core from reflex import constants from reflex.base import Base @@ -219,7 +220,7 @@ def _encode_var(value: Var) -> str: final_value = str(value) data = value._var_data.dict() data["string_length"] = len(final_value) - data_json = value._var_data.__config__.json_dumps(data, default=serialize) + data_json = value._var_data.__pydantic_serializer__.to_json(value=data, fallback=serialize) return ( f"{constants.REFLEX_VAR_OPENING_TAG}{data_json}{constants.REFLEX_VAR_CLOSING_TAG}" @@ -242,14 +243,13 @@ def _decode_var(value: str) -> tuple[VarData | None, str]: if isinstance(value, str): offset = 0 - # Initialize some methods for reading json. - var_data_config = VarData().__config__ def json_loads(s): try: - return var_data_config.json_loads(s) - except json.decoder.JSONDecodeError: - return var_data_config.json_loads(var_data_config.json_loads(f'"{s}"')) + return VarData.model_validate(s) + except pydantic_core.ValidationError: + raise ValueError(f"Invalid VarData: {s}") + # return VarData.model_validate(var_data_config.json_loads(f'"{s}"')) # Compile regex for finding reflex var tags. pattern_re = rf"{constants.REFLEX_VAR_OPENING_TAG}(.*?){constants.REFLEX_VAR_CLOSING_TAG}"