Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/pgularski/pysm
Versatile and flexible Python State Machine library
https://github.com/pgularski/pysm
finite-state-machine fsm fsm-library hsm micropython micropython-esp32 mit mit-license python
Last synced: 14 days ago
JSON representation
Versatile and flexible Python State Machine library
- Host: GitHub
- URL: https://github.com/pgularski/pysm
- Owner: pgularski
- License: mit
- Created: 2016-05-01T22:19:42.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-07-16T10:43:21.000Z (4 months ago)
- Last Synced: 2024-10-21T23:04:46.356Z (22 days ago)
- Topics: finite-state-machine, fsm, fsm-library, hsm, micropython, micropython-esp32, mit, mit-license, python
- Language: Python
- Homepage: http://pysm.readthedocs.io/
- Size: 323 KB
- Stars: 73
- Watchers: 5
- Forks: 11
- Open Issues: 6
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
pysm - Python State Machine
---------------------------Versatile and flexible Python State Machine library.
.. image:: https://travis-ci.org/pgularski/pysm.svg?branch=master
:target: https://travis-ci.org/pgularski/pysm.. image:: https://coveralls.io/repos/github/pgularski/pysm/badge.svg?branch=master
:target: https://coveralls.io/github/pgularski/pysm?branch=master.. image:: https://api.codacy.com/project/badge/Grade/6f18f01639c242a0b83280a52245539d
:target: https://www.codacy.com/app/pgularski/pysm?utm_source=github.com&utm_medium=referral&utm_content=pgularski/pysm&utm_campaign=Badge_Grade.. image:: https://landscape.io/github/pgularski/pysm/master/landscape.svg?style=flat
:target: https://landscape.io/github/pgularski/pysm/master
:alt: Code Health.. image:: https://readthedocs.org/projects/pysm/badge/?version=latest
:target: http://pysm.readthedocs.io/en/latest/?badge=latest
:alt: Documentation StatusImplement simple and complex state machines
------------------------------------------It can do simple things like this:
.. image:: https://cloud.githubusercontent.com/assets/3026621/15031178/bf5efb2a-124e-11e6-9748-0b5a5be60a30.png
Or somewhat more complex like that:
.. image:: https://cloud.githubusercontent.com/assets/3026621/15031148/ad955f06-124e-11e6-865e-c7e3340f14cb.png
Python State Machine
--------------------`The State Pattern `_
solves many problems, untangles the code and saves one's sanity.
Yet.., it's a bit rigid and doesn't scale. The goal of this library is to give
you a close to the State Pattern simplicity with much more flexibility. And,
if needed, the full state machine functionality, including `FSM
`_, `HSM
`_, `PDA
`_ and other tasty things.Goals
-----* Provide a State Pattern-like behavior with more flexibility (see
`Documentation `_ for
examples)
* Be explicit and don't add any magic code to objects that use pysm
* Handle directly any kind of event or input (not only strings) - parsing
strings is cool again!
* Keep it simple, even for someone who's not very familiar with the FSM
terminologyFeatures
--------* Finite State Machine (FSM)
* Hierarchical State Machine (HSM) with Internal/External/Local transitions
* Pushdown Automaton (PDA)
* Transition callbacks - action, before, after
* State hooks - enter, exit, and other event handlers
* Entry and exit actions are associated with states, not transitions
* Events may be anything as long as they're hashable
* States history and transition to previous states
* Conditional transitions (if/elif/else-like logic)
* Explicit behaviour (no method or attribute is added to the object containing a state machine)
* No need to extend a class with State Machine class (composition over inheritance)
* Fast (even with hundreds of transition rules)
* Not too many pythonisms, so that it's easily portable to other languages (ie. `JavaScript `_).
* Micropython supportInstallation
------------Install pysm from `PyPI `_::
pip install pysm
or clone the `Github pysm repository `_::
git clone https://github.com/pgularski/pysm
cd pysm
python setup.py installDocumentation
-------------Read the docs for API documentation and examples - http://pysm.readthedocs.io/
See Unit Tests to see it working and extensively tested.
Micropython support
-------------------
The library works with pyboards!::import upip
upip.install('upysm')Links
-----
* `Documentation `_
* `Installation `_
* `Github `_
* `Issues `_
* `Examples `_