I want to implement state machine for my Order
model, and I am using this beautiful pytransitions library. But I am facing this strange issue.
This is my order.py
with model:
from order_state_machine import OrderStateMachine
class Order(BaseModel):
def __init__(self, order_dict):
super().__init__(order_dict)
# next line basically creates Customer object inside Order model
self.set('customer', Customer(order_dict['customer']))
self.machine = OrderStateMachine(self)
This my order_state_machine.py
:
from transitions import Machine
class OrderStateMachine(Machine):
order_states = ['pending', 'paid', 'shipped', 'delivered', 'canceled']
order_transitions = [
{'trigger': 'pay', 'source': 'pending', 'dest': 'paid'},
{'trigger': 'deliver', 'source': 'shipped', 'dest': 'delivered'},
{'trigger': 'cancel', 'source': 'shipped', 'dest': 'canceled'},
]
def __init__(self, order):
super().__init__(
model=order,
states=OrderStateMachine.order_states,
transitions=OrderStateMachine.order_transitions,
initial='pending'
)
And when I do:
from order import Order
new_order = Order(order_dict)
new_order.state # returns 'pending'
new_order.pay()
new_order.state # I expect 'paid'
It, new_order.pay()
line, gives me TypeError: 'NoneType' object is not callable
error. And also a Model already contains an attribute 'trigger'. Skip binding.
warning, and a lot of warnings like this.
Could someone help me to resolve this problem, may be maintainers of the library. Thanks.