|
9 | 9 | from typing import Dict |
10 | 10 | from typing import List |
11 | 11 |
|
12 | | -from statemachine.graph import iterate_states_and_transitions |
13 | | -from statemachine.utils import run_async_from_sync |
14 | | - |
| 12 | +from .callbacks import SPECS_ALL |
| 13 | +from .callbacks import SPECS_SAFE |
15 | 14 | from .callbacks import CallbacksExecutor |
16 | 15 | from .callbacks import CallbacksRegistry |
| 16 | +from .callbacks import SpecReference |
17 | 17 | from .dispatcher import Listener |
18 | 18 | from .dispatcher import Listeners |
19 | 19 | from .engines.async_ import AsyncEngine |
|
24 | 24 | from .exceptions import InvalidStateValue |
25 | 25 | from .exceptions import TransitionNotAllowed |
26 | 26 | from .factory import StateMachineMetaclass |
| 27 | +from .graph import iterate_states_and_transitions |
27 | 28 | from .i18n import _ |
28 | 29 | from .model import Model |
| 30 | +from .utils import run_async_from_sync |
29 | 31 |
|
30 | 32 | if TYPE_CHECKING: |
31 | 33 | from .state import State |
@@ -177,8 +179,12 @@ def bind_events_to(self, *targets): |
177 | 179 | continue |
178 | 180 | setattr(target, event.name, trigger) |
179 | 181 |
|
180 | | - def _add_listener(self, listeners: "Listeners"): |
181 | | - register = partial(listeners.resolve, registry=self._callbacks_registry) |
| 182 | + def _add_listener(self, listeners: "Listeners", allowed_references: SpecReference = SPECS_ALL): |
| 183 | + register = partial( |
| 184 | + listeners.resolve, |
| 185 | + registry=self._callbacks_registry, |
| 186 | + allowed_references=allowed_references, |
| 187 | + ) |
182 | 188 | for visited in iterate_states_and_transitions(self.states): |
183 | 189 | register(visited._specs) |
184 | 190 |
|
@@ -228,7 +234,8 @@ def add_listener(self, *listeners): |
228 | 234 | """ |
229 | 235 | self._listeners.update({o: None for o in listeners}) |
230 | 236 | return self._add_listener( |
231 | | - Listeners.from_listeners(Listener.from_obj(o) for o in listeners) |
| 237 | + Listeners.from_listeners(Listener.from_obj(o) for o in listeners), |
| 238 | + allowed_references=SPECS_SAFE, |
232 | 239 | ) |
233 | 240 |
|
234 | 241 | def _repr_html_(self): |
|
0 commit comments