minor state fixes, and var serialization
This commit is contained in:
parent
fd32942eb4
commit
6291c39fd7
@ -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 = {
|
||||||
|
@ -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}"
|
||||||
|
Loading…
Reference in New Issue
Block a user