diff --git a/reflex/base.py b/reflex/base.py index 634ae126c..c7694204c 100644 --- a/reflex/base.py +++ b/reflex/base.py @@ -65,7 +65,9 @@ class Base(pydantic.BaseModel): """ from reflex.utils.serializers import serialize - return self.__pydantic_serializer__.to_json(value=self, fallback=serialize).decode() + return self.__pydantic_serializer__.to_json( + value=self, fallback=serialize + ).decode() def set(self, **kwargs): """Set multiple fields and return the object. @@ -89,7 +91,6 @@ class Base(pydantic.BaseModel): """ return cls.model_fields - @classmethod def add_field(cls, var: Any, default_value: Any): """Add a pydantic field after class definition. @@ -104,7 +105,6 @@ class Base(pydantic.BaseModel): cls.model_fields.update({var._var_name: field_info}) cls.model_rebuild(force=True) - def get_value(self, key: str) -> Any: """Get the value of a field. diff --git a/reflex/state.py b/reflex/state.py index 7fe50e55c..0b00f16fb 100644 --- a/reflex/state.py +++ b/reflex/state.py @@ -151,7 +151,7 @@ RESERVED_BACKEND_VAR_NAMES = { "_substate_var_dependencies", "_always_dirty_computed_vars", "_always_dirty_substates", - "_abc_impl", # pydantic v2 + "_abc_impl", # pydantic v2 "_was_touched", } @@ -159,6 +159,7 @@ SPECIAL_METHODS = { "model_post_init", # never treat this as an event handler } + def _substate_key( token: str, state_cls_or_name: BaseState | Type[BaseState] | str | list[str], @@ -435,9 +436,9 @@ class BaseState(Base, ABC, extra=pydantic.Extra.allow): # Set the base and computed vars. cls.base_vars = { - field_name: BaseVar(_var_name=field_name, _var_type=field.annotation)._var_set_state( - cls - ) + field_name: BaseVar( + _var_name=field_name, _var_type=field.annotation + )._var_set_state(cls) for field_name, field in cls.get_fields().items() if field_name not in cls.get_skip_vars() } diff --git a/reflex/utils/types.py b/reflex/utils/types.py index d320351bc..1fe53eb2b 100644 --- a/reflex/utils/types.py +++ b/reflex/utils/types.py @@ -168,7 +168,11 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None # pydantic models field = cls.model_fields[name] type_ = field.annotation - if not field.is_required() and field.default is None and field.default_factory is None: + if ( + not field.is_required() + and field.default is None + and field.default_factory is None + ): # Ensure frontend uses null coalescing when accessing. type_ = Optional[type_] return type_ diff --git a/reflex/vars.py b/reflex/vars.py index a591b76bf..725efdec8 100644 --- a/reflex/vars.py +++ b/reflex/vars.py @@ -220,7 +220,9 @@ 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.__pydantic_serializer__.to_json(value=data, fallback=serialize).decode() + data_json = value._var_data.__pydantic_serializer__.to_json( + value=data, fallback=serialize + ).decode() return ( f"{constants.REFLEX_VAR_OPENING_TAG}{data_json}{constants.REFLEX_VAR_CLOSING_TAG}" @@ -243,7 +245,6 @@ def _decode_var(value: str) -> tuple[VarData | None, str]: if isinstance(value, str): offset = 0 - def json_loads(s): try: return VarData.model_validate(s)