Unlink this shared state from its linked token. Returns: The events to rehydrate the state after unlinking (these should be returned/yielded).
(self)
| 248 | return await self._internal_patch_linked_state(token, full_delta=True) |
| 249 | |
| 250 | async def _unlink(self): |
| 251 | """Unlink this shared state from its linked token. |
| 252 | |
| 253 | Returns: |
| 254 | The events to rehydrate the state after unlinking (these should be returned/yielded). |
| 255 | """ |
| 256 | from reflex.istate.manager import get_state_manager |
| 257 | |
| 258 | if not isinstance(self, SharedState): |
| 259 | msg = "Can only unlink SharedState instances." |
| 260 | raise ReflexRuntimeError(msg) |
| 261 | |
| 262 | state_name = self.get_full_name() |
| 263 | if ( |
| 264 | not self._reflex_internal_links |
| 265 | or state_name not in self._reflex_internal_links |
| 266 | ): |
| 267 | msg = f"State {state_name} is not linked and cannot be unlinked." |
| 268 | raise ReflexRuntimeError(msg) |
| 269 | |
| 270 | # Break the linkage for future events. |
| 271 | self._reflex_internal_links.pop(state_name) |
| 272 | self._linked_from.discard(self.router.session.client_token) |
| 273 | |
| 274 | # Patch in the original state, apply updates, then rehydrate. |
| 275 | private_root_state = await get_state_manager().get_state( |
| 276 | BaseStateToken( |
| 277 | ident=self.router.session.client_token, |
| 278 | cls=type(self), |
| 279 | ) |
| 280 | ) |
| 281 | private_state = await private_root_state.get_state(type(self)) |
| 282 | async with _patch_state( |
| 283 | original_state=self, |
| 284 | linked_state=private_state, |
| 285 | full_delta=True, |
| 286 | ): |
| 287 | return self._rehydrate() |
| 288 | |
| 289 | async def _internal_patch_linked_state( |
| 290 | self, token: str, full_delta: bool = False |