MCPcopy
hub / github.com/reflex-dev/reflex / _unlink

Method _unlink

reflex/istate/shared.py:250–287  ·  view source on GitHub ↗

Unlink this shared state from its linked token. Returns: The events to rehydrate the state after unlinking (these should be returned/yielded).

(self)

Source from the content-addressed store, hash-verified

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

Callers 1

unlinkMethod · 0.80

Calls 7

_rehydrateMethod · 0.95
ReflexRuntimeErrorClass · 0.90
get_state_managerFunction · 0.90
BaseStateTokenClass · 0.90
_patch_stateFunction · 0.85
get_full_nameMethod · 0.80
get_stateMethod · 0.45

Tested by 1

unlinkMethod · 0.64