from enum import Enum
from transitions import Machine
class OrderState(Enum):
PENDING = 'pending'
CONFIRMED = 'confirmed'
COMPLETED = 'completed'
class Order(object):
transitions = [
{'trigger': 'confirm', 'source': OrderState.PENDING, 'dest': OrderState.CONFIRMED, 'conditions': 'can_confirm'},
{'trigger': 'complete', 'source': OrderState.CONFIRMED, 'dest': OrderState.COMPLETED,
'conditions': 'can_complete'},
]
def __init__(self):
self.state = OrderState.PENDING
self.machine = Machine(model=self, states=list(OrderState), transitions=Order.transitions,
initial=OrderState.PENDING, send_event=True)
def can_confirm(self, event_data):
print('checking confirmation eligibility, current state is', self.state)
return self.state == OrderState.PENDING
def can_complete(self, event_data):
print('checking confirmation eligibility, current state is', self.state)
return self.state == OrderState.CONFIRMED
def on_confirm(self, event_data):
print('Order confirmed')
self.confirm()
def on_complete(self, event_data):
print('Order completed')
self.complete()
order = Order()
print('初始状态', order.state.value)
order.complete()
print(order.state.value)
order.confirm()
print(order.state.value)
order.complete()
print(order.state.value)