state: subclass of MutableState must return _mark_dirty return value (#1898)
This commit is contained in:
parent
0a196693a3
commit
4b84c2a471
@ -1868,7 +1868,13 @@ class ImmutableMutableProxy(MutableProxy):
|
|||||||
to modify the wrapped object when the StateProxy is immutable.
|
to modify the wrapped object when the StateProxy is immutable.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _mark_dirty(self, wrapped=None, instance=None, args=tuple(), kwargs=None):
|
def _mark_dirty(
|
||||||
|
self,
|
||||||
|
wrapped=None,
|
||||||
|
instance=None,
|
||||||
|
args=tuple(),
|
||||||
|
kwargs=None,
|
||||||
|
) -> Any:
|
||||||
"""Raise an exception when an attempt is made to modify the object.
|
"""Raise an exception when an attempt is made to modify the object.
|
||||||
|
|
||||||
Intended for use with `FunctionWrapper` from the `wrapt` library.
|
Intended for use with `FunctionWrapper` from the `wrapt` library.
|
||||||
@ -1879,6 +1885,9 @@ class ImmutableMutableProxy(MutableProxy):
|
|||||||
args: The args for the wrapped function.
|
args: The args for the wrapped function.
|
||||||
kwargs: The kwargs for the wrapped function.
|
kwargs: The kwargs for the wrapped function.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
The result of the wrapped function.
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
ImmutableStateError: if the StateProxy is not mutable.
|
ImmutableStateError: if the StateProxy is not mutable.
|
||||||
"""
|
"""
|
||||||
@ -1887,6 +1896,6 @@ class ImmutableMutableProxy(MutableProxy):
|
|||||||
"Background task StateProxy is immutable outside of a context "
|
"Background task StateProxy is immutable outside of a context "
|
||||||
"manager. Use `async with self` to modify state."
|
"manager. Use `async with self` to modify state."
|
||||||
)
|
)
|
||||||
super()._mark_dirty(
|
return super()._mark_dirty(
|
||||||
wrapped=wrapped, instance=instance, args=args, kwargs=kwargs
|
wrapped=wrapped, instance=instance, args=args, kwargs=kwargs
|
||||||
)
|
)
|
||||||
|
@ -1625,7 +1625,7 @@ class BackgroundTaskState(State):
|
|||||||
"""A state with a background task."""
|
"""A state with a background task."""
|
||||||
|
|
||||||
order: List[str] = []
|
order: List[str] = []
|
||||||
dict_list: Dict[str, List[int]] = {"foo": []}
|
dict_list: Dict[str, List[int]] = {"foo": [1, 2, 3]}
|
||||||
|
|
||||||
@rx.background
|
@rx.background
|
||||||
async def background_task(self):
|
async def background_task(self):
|
||||||
@ -1657,6 +1657,9 @@ class BackgroundTaskState(State):
|
|||||||
pass # update proxy instance
|
pass # update proxy instance
|
||||||
|
|
||||||
async with self:
|
async with self:
|
||||||
|
# Methods on ImmutableMutableProxy should return their wrapped return value.
|
||||||
|
assert self.dict_list.pop("foo") is not None
|
||||||
|
|
||||||
self.order.append("background_task:stop")
|
self.order.append("background_task:stop")
|
||||||
self.other() # direct calling event handlers works in context
|
self.other() # direct calling event handlers works in context
|
||||||
self._private_method()
|
self._private_method()
|
||||||
|
Loading…
Reference in New Issue
Block a user