-
-
Notifications
You must be signed in to change notification settings - Fork 103
Expand file tree
/
Copy pathenum_campaign_machine.py
More file actions
60 lines (40 loc) · 1.29 KB
/
enum_campaign_machine.py
File metadata and controls
60 lines (40 loc) · 1.29 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
"""
Enum campaign machine
=====================
A :ref:`StateChart` 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 StateChart
class CampaignStatus(Enum):
DRAFT = 1
PRODUCING = 2
CLOSED = 3
class CampaignMachine(StateChart):
"A workflow machine"
states = States.from_enum(
CampaignStatus,
initial=CampaignStatus.DRAFT,
final=CampaignStatus.CLOSED,
)
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.PRODUCING in sm.configuration
assert CampaignStatus.PRODUCING in sm.configuration_values