Skip to main content

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.

Source Distribution

pytomaton-1.1.1.tar.gz (2.8 kB view details)

Uploaded Source

File details

Details for the file pytomaton-1.1.1.tar.gz.

File metadata

  • Download URL: pytomaton-1.1.1.tar.gz
  • Upload date:
  • Size: 2.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytomaton-1.1.1.tar.gz
Algorithm Hash digest
SHA256 7920e2e7fbe7b290a4c13b219832a965aae27576a938b7dff5135152a5632710
MD5 1aef4ad3c7f0e22922c47723c47c4198
BLAKE2b-256 c8a7f5da12414279e0ab0df0a5889bcf44ba8a1ef712db1af3b8c126b1eacd9f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page