minor state fixes, and var serialization

This commit is contained in:
Benedikt Bartscher 2024-02-29 00:27:00 +01:00
parent fd32942eb4
commit 6291c39fd7
No known key found for this signature in database
2 changed files with 9 additions and 9 deletions

View File

@ -435,11 +435,11 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow):
# Set the base and computed vars. # Set the base and computed vars.
cls.base_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 cls
) )
for f in cls.get_fields().values() for field_name, field in cls.get_fields().items()
if f.name not in cls.get_skip_vars() 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.computed_vars = {v._var_name: v._var_set_state(cls) for v in computed_vars}
cls.vars = { cls.vars = {

View File

@ -31,6 +31,7 @@ from typing import (
get_origin, get_origin,
get_type_hints, get_type_hints,
) )
import pydantic_core
from reflex import constants from reflex import constants
from reflex.base import Base from reflex.base import Base
@ -219,7 +220,7 @@ def _encode_var(value: Var) -> str:
final_value = str(value) final_value = str(value)
data = value._var_data.dict() data = value._var_data.dict()
data["string_length"] = len(final_value) 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 ( return (
f"{constants.REFLEX_VAR_OPENING_TAG}{data_json}{constants.REFLEX_VAR_CLOSING_TAG}" 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): if isinstance(value, str):
offset = 0 offset = 0
# Initialize some methods for reading json.
var_data_config = VarData().__config__
def json_loads(s): def json_loads(s):
try: try:
return var_data_config.json_loads(s) return VarData.model_validate(s)
except json.decoder.JSONDecodeError: except pydantic_core.ValidationError:
return var_data_config.json_loads(var_data_config.json_loads(f'"{s}"')) raise ValueError(f"Invalid VarData: {s}")
# return VarData.model_validate(var_data_config.json_loads(f'"{s}"'))
# Compile regex for finding reflex var tags. # Compile regex for finding reflex var tags.
pattern_re = rf"{constants.REFLEX_VAR_OPENING_TAG}(.*?){constants.REFLEX_VAR_CLOSING_TAG}" pattern_re = rf"{constants.REFLEX_VAR_OPENING_TAG}(.*?){constants.REFLEX_VAR_CLOSING_TAG}"