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

Method _init_var_dependency_dicts

reflex/state.py:889–941  ·  view source on GitHub ↗

Initialize the var dependency tracking dicts. Allows the state to know which vars each ComputedVar depends on and whether a ComputedVar depends on a var in its parent state. Additional updates tracking dicts for vars and substates that always need to be recomputed.

(cls)

Source from the content-addressed store, hash-verified

887
888 @classmethod
889 def _init_var_dependency_dicts(cls):
890 """Initialize the var dependency tracking dicts.
891
892 Allows the state to know which vars each ComputedVar depends on and
893 whether a ComputedVar depends on a var in its parent state.
894
895 Additional updates tracking dicts for vars and substates that always
896 need to be recomputed.
897 """
898 for cvar_name, cvar in cls.computed_vars.items():
899 if not cvar._cache:
900 # Do not perform dep calculation when cache=False (these are always dirty).
901 continue
902 for state_name, dvar_set in cvar._deps(objclass=cls).items():
903 state_cls = cls.get_root_state().get_class_substate(state_name)
904 for dvar in dvar_set:
905 defining_state_cls = state_cls
906 while dvar in {
907 *defining_state_cls.inherited_vars,
908 *defining_state_cls.inherited_backend_vars,
909 }:
910 parent_state = defining_state_cls.get_parent_state()
911 if parent_state is not None:
912 defining_state_cls = parent_state
913 defining_state_cls._var_dependencies.setdefault(dvar, set()).add((
914 cls.get_full_name(),
915 cvar_name,
916 ))
917 defining_state_cls._potentially_dirty_states.add(
918 cls.get_full_name()
919 )
920
921 # ComputedVar with cache=False always need to be recomputed
922 cls._always_dirty_computed_vars = {
923 cvar_name
924 for cvar_name, cvar in cls.computed_vars.items()
925 if not cvar._cache
926 }
927
928 # Any substate containing a ComputedVar with cache=False always needs to be recomputed
929 if cls._always_dirty_computed_vars:
930 # Tell parent classes that this substate has always dirty computed vars
931 state_name = cls.get_name()
932 parent_state = cls.get_parent_state()
933 while parent_state is not None:
934 parent_state._always_dirty_substates.add(state_name)
935 state_name, parent_state = (
936 parent_state.get_name(),
937 parent_state.get_parent_state(),
938 )
939
940 # Reset cached schema value
941 cls._to_schema.cache_clear()
942
943 @classmethod
944 def _check_overridden_methods(cls):

Callers 5

test_router_var_depFunction · 0.80
__init_subclass__Method · 0.80
add_varMethod · 0.80
reload_state_moduleFunction · 0.80

Calls 7

itemsMethod · 0.80
_depsMethod · 0.80
get_class_substateMethod · 0.80
get_root_stateMethod · 0.80
get_parent_stateMethod · 0.80
get_full_nameMethod · 0.80
get_nameMethod · 0.80

Tested by 1

test_router_var_depFunction · 0.64