Python Statemachine

3.0.0 · active · verified Sun Apr 12

Python Statemachine is an intuitive and powerful library for implementing finite state machines and statecharts. It offers a clean, pythonic, and declarative API for both synchronous and asynchronous Python codebases, supporting advanced features like compound states, parallel regions, history states, and dynamic diagram generation. The library maintains an active development pace with frequent updates and major releases introducing significant new capabilities.

Warnings

Install

Imports

Quickstart

This quickstart defines a `TrafficLightMachine` as a `StateChart` with three states: `green`, `yellow`, and `red`. A `cycle` event transitions the light sequentially. It includes `before_cycle`, `on_enter_red`, and `on_exit_red` methods, which are automatically called during transitions and state entries/exits respectively.

from statemachine import StateChart, State

class TrafficLightMachine(StateChart):
    "A traffic light machine"
    green = State(initial=True)
    yellow = State()
    red = State()

    cycle = (
        green.to(yellow)
        | yellow.to(red)
        | red.to(green)
    )

    def before_cycle(self, event: str, source: State, target: State):
        return f"Running {event} from {source.id} to {target.id}"

    def on_enter_red(self):
        print("Don't move.")

    def on_exit_red(self):
        print("Go ahead!")

sm = TrafficLightMachine()
print(f"Initial state: {sm.current_state.id}")
print(sm.send("cycle"))
print(f"Current state: {sm.current_state.id}")
print(sm.send("cycle"))
print(f"Current state: {sm.current_state.id}")
print(sm.send("cycle"))
print(f"Current state: {sm.current_state.id}")

view raw JSON →