Переглянути джерело

minor state fixes, and var serialization

Benedikt Bartscher 1 рік тому
батько
коміт
6291c39fd7
2 змінених файлів з 9 додано та 9 видалено
  1. 3 3
      reflex/state.py
  2. 6 6
      reflex/vars.py

+ 3 - 3
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 = {

+ 6 - 6
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}"