|
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 |
0 commit comments