-
-
Notifications
You must be signed in to change notification settings - Fork 103
Expand file tree
/
Copy pathenum_campaign_machine.py
More file actions
61 lines (41 loc) · 1.32 KB
/
enum_campaign_machine.py
File metadata and controls
61 lines (41 loc) · 1.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""
Enum campaign machine
=====================
A :ref:`StateMachine` that demonstrates declaring :ref:`States from Enum types` as source for
``States`` definition.
"""
from enum import Enum
from statemachine.states import States
from statemachine import StateMachine
class CampaignStatus(Enum):
DRAFT = 1
PRODUCING = 2
CLOSED = 3
class CampaignMachine(StateMachine):
"A workflow machine"
states = States.from_enum(
CampaignStatus,
initial=CampaignStatus.DRAFT,
final=CampaignStatus.CLOSED,
use_enum_instance=True,
)
add_job = states.DRAFT.to(states.DRAFT) | states.PRODUCING.to(states.PRODUCING)
produce = states.DRAFT.to(states.PRODUCING)
deliver = states.PRODUCING.to(states.CLOSED)
# %%
# Asserting campaign machine declaration
assert CampaignMachine.DRAFT.initial
assert not CampaignMachine.DRAFT.final
assert not CampaignMachine.PRODUCING.initial
assert not CampaignMachine.PRODUCING.final
assert not CampaignMachine.CLOSED.initial
assert CampaignMachine.CLOSED.final
# %%
# Testing our campaign machine
sm = CampaignMachine()
res = sm.send("produce")
assert sm.DRAFT.is_active is False
assert sm.PRODUCING.is_active is True
assert sm.CLOSED.is_active is False
assert sm.current_state == sm.PRODUCING
assert sm.current_state_value == CampaignStatus.PRODUCING