Skip to content

Commit 6e7c7c2

Browse files
committed
feat(experimental): removed expect_override (#676) and added trigger and with_trigger_decorator
expect_override (introduced recently in #676) was revoked as a heterogenous model structure is not to be expecred
1 parent f9d2826 commit 6e7c7c2

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed
+33-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,33 @@
1-
def expect_override(func):
2-
setattr(func, "expect_override", True)
3-
return func
1+
from transitions.core import listify
2+
from collections import deque
3+
4+
_attribute_name = "transition_definitions"
5+
6+
7+
def with_trigger_decorator(cls):
8+
add_model = getattr(cls, "add_model")
9+
10+
def add_model_override(self, model, initial=None) -> None:
11+
self.model_override = True
12+
for model in listify(model):
13+
model = self if model == "self" else model
14+
for name, method in model.__class__.__dict__.items():
15+
for spec in getattr(method, _attribute_name, []):
16+
self.add_transition(name, **spec)
17+
add_model(self, model, initial)
18+
19+
setattr(cls, 'add_model', add_model_override)
20+
return cls
21+
22+
23+
def trigger(source, dest, conditions=None, unless=None, before=None, after=None, prepare=None):
24+
def _outer(trigger_func):
25+
if not hasattr(trigger_func, _attribute_name):
26+
setattr(trigger_func, _attribute_name, deque())
27+
getattr(trigger_func, _attribute_name).appendleft({
28+
"source": source, "dest": dest, "conditions": conditions, "unless": unless, "before": before,
29+
"after": after, "prepare": prepare
30+
})
31+
return trigger_func
32+
33+
return _outer
+8-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
from typing import Callable, ParamSpec
1+
from typing import Union, Type, Callable
2+
from transitions.core import StateIdentifier, CallbacksArg, CallbackFunc, Machine
23

3-
P = ParamSpec("P")
44

5+
def with_trigger_decorator(cls: Type[Machine]) -> Type[Machine]: ...
56

6-
def expect_override(func: Callable[P, bool | None]) -> Callable[P, bool | None]: ...
7+
def trigger(source: Union[StateIdentifier, list[StateIdentifier]],
8+
dest: StateIdentifier | None = ...,
9+
conditions: CallbacksArg = ..., unless: CallbacksArg = ...,
10+
before: CallbacksArg = ..., after: CallbacksArg = ...,
11+
prepare: CallbacksArg = ...) -> Callable[[CallbackFunc], CallbackFunc]: ...

0 commit comments

Comments
 (0)