=========
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`.
Metadata
Release files for pytomaton 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| pytomaton-1.1.1.tar.gz | 2.8 kB | Without provenance | Details for pytomaton-1.1.1.tar.gz |
Release files / pytomaton-1.1.1.tar.gz
| Download URL | pytomaton-1.1.1.tar.gz |
|---|---|
| Size | 2.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7920e2e7fbe7b290a4c13b219832a965aae27576a938b7dff5135152a5632710
|
|
BLAKE2b-256 checksum How to use checksums |
c8a7f5da12414279e0ab0df0a5889bcf44ba8a1ef712db1af3b8c126b1eacd9f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for pytomaton 1.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.