Skip to main content
Join the official Python Developers Survey 2018 and win valuable prizes: Start the survey!

A more convenient and succinct way of expressing state machines in Python

Project description

pytomaton: State Machines in Python
=========

Brief
-----
Often, a state machine is a convenient way to implement a stateful protocol, but
they often involve a lot of messy boilerplate for managing how you transition
from one state to the next, or what exactly happens when you enter a state.
`pytomaton` was created to reduce this boilerplate code.

Just as in a theoretical automaton, a `pytomaton.statemachine` has a list of
states, a start state. At any given time, a state machine is in one single
state. The programmer can invoke `statemachine.transition(new_state_name)` to
transition to a new state; when this happens, the state machine checks to see if
there are any actions which are triggered by this transition. Currently, actions
can be triggered by entering a specific state (`on_enter`), or by transitioning
from one specific state to another (`on_transition`). Methods are decorated as
being triggered by transitions, as shown in the example below.

Example
-------

from pytomaton import statemachine, on_transition, on_enter

class ConnectionMachine(statemachine):
states = ['waiting_for_connection', 'waiting_for_ready', 'all_ready']
start_state = 'waiting_for_connection'

def on_connect(self):
self.transition('waiting_for_ready')

@on_transition('waiting_for_connection', 'waiting_for_ready')
def send_ready_prompt(self):
self.broadcast('are you ready?')

def receive_ready_confirm(self):
if self.all_ready():
self.transition('all_ready')

@on_enter('all_ready')
def send_all_ready(self):
self.broadcast('everyone is ready!')

In this example, we define a `ConnectionMachine` that has three states. It
starts in the `waiting_for_connection` state. When a user connects, in
transitions to the `waiting_for_ready` state, which triggers a call to
`send_ready_prompt`. When a user confirms that they're ready, we transition to
the `on_ready` state, which triggers a call to `send_all_ready`.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
pytomaton-1.1.1.tar.gz (2.8 kB) Copy SHA256 hash SHA256 Source None Jun 24, 2012

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page