55from typing import Any
66from typing import Dict
77
8+ from statemachine .graph import iterate_states_and_transitions
9+
810from .callbacks import CallbackMetaList
911from .callbacks import CallbacksExecutor
1012from .callbacks import CallbacksRegistry
@@ -81,7 +83,7 @@ def __init__(
8183 if self ._abstract :
8284 raise InvalidDefinition (_ ("There are no states or transitions." ))
8385
84- self ._setup ()
86+ self ._register_callbacks ()
8587 self ._activate_initial_state ()
8688
8789 def __init_subclass__ (cls , strict_states : bool = False ):
@@ -109,7 +111,7 @@ def __deepcopy__(self, memo):
109111 self .__deepcopy__ = deepcopy_method
110112 cp .__deepcopy__ = deepcopy_method
111113 cp ._callbacks_registry .clear ()
112- cp ._setup ()
114+ cp ._register_callbacks ()
113115 cp .add_observer (* cp ._observers .keys ())
114116 return cp
115117
@@ -138,38 +140,16 @@ def _activate_initial_state(self):
138140 )
139141 self ._activate (event_data )
140142
141- def _get_protected_attrs (self ):
142- return {
143- "_abstract" ,
144- "model" ,
145- "state_field" ,
146- "start_value" ,
147- "initial_state" ,
148- "final_states" ,
149- "states" ,
150- "_events" ,
151- "states_map" ,
152- "send" ,
153- } | {s .id for s in self .states }
154-
155- def _iterate_states_and_transitions (self ):
156- for state in self .states :
157- yield state
158- yield from state .transitions
159-
160- def _setup (self ):
161- for visited in self ._iterate_states_and_transitions ():
162- visited ._setup ()
163-
143+ def _register_callbacks (self ):
164144 self ._add_observer (
165145 (
166- ObjectConfig .from_obj (self , skip_attrs = self ._get_protected_attrs () ),
146+ ObjectConfig .from_obj (self , skip_attrs = self ._protected_attrs ),
167147 ObjectConfig .from_obj (self .model , skip_attrs = {self .state_field }),
168148 )
169149 )
170150
171151 check_callbacks = self ._callbacks_registry .check
172- for visited in self ._iterate_states_and_transitions ( ):
152+ for visited in iterate_states_and_transitions ( self .states ):
173153 try :
174154 visited ._check_callbacks (check_callbacks )
175155 except Exception as err :
@@ -179,7 +159,7 @@ def _setup(self):
179159
180160 def _add_observer (self , observers ):
181161 register = partial (self ._callbacks_registry .register , resolver = resolver_factory (observers ))
182- for visited in self ._iterate_states_and_transitions ( ):
162+ for visited in iterate_states_and_transitions ( self .states ):
183163 visited ._add_observer (register )
184164
185165 return self
0 commit comments