statez
Motivation
All the statemachine packages for python look weird and do too much stuff. This one is simple (and can even support asynchronous transitions).
Installation
pip install statez
# or if you use poetry
poetry add statez
Usage
Synchronous example
from statez import (
Trigger,
From,
To,
Do,
StateMachine,
Event
)
if __name__ == '__main__':
s = StateMachine("HungryBoi", state="hungry")
transition = Trigger("Eat") | From(["hungry", "dunno"]) | To("not_hungry") | Do(lambda a: True)
# It doesn't matter if you use the function directly or if you wrap it in Do :-)
assert transition == Trigger("Eat") | From(["hungry", "dunno"]) | To("not_hungry") | (lambda a: True)
s += transition
s.consume(Event("Eat"))
assert s.state == "not_hungry", s.state
Asynchronous example (Caution, this is dumb use of asyncio)
from statez import (
Trigger,
From,
To,
Do,
AsyncStateMachine,
Event,
)
import asyncio
async def return_bool(ignore):
return True
async def say_stuff(ignore):
print("stuff")
return True
if __name__ == "__main__":
s = AsyncStateMachine("HungryBoi", state="hungry")
transition = (
Trigger("Eat") | From(["hungry", "dunno"]) | To("not_hungry") | Do(return_bool)
)
# This is how you can keep the state as before
transition2 = Trigger("SayStuff") | From(...) | To(...) | say_stuff
# It doesn't matter if you use the function directly or if you wrap it in Do :-)
assert (
transition
== Trigger("Eat") | From(["hungry", "dunno"]) | To("not_hungry") | return_bool
)
s += transition
s += transition2
asyncio.run(s.consume(Event("Eat")))
assert s.state == "not_hungry", s.state
asyncio.run(s.consume(Event("SayStuff")))
assert s.state == "not_hungry", s.state
License
This project is licensed under the GPL-3 license.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
statez-0.3.4.tar.gz
(3.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
statez-0.3.4-py3-none-any.whl
(15.1 kB
view details)
File details
Details for the file statez-0.3.4.tar.gz.
File metadata
- Download URL: statez-0.3.4.tar.gz
- Upload date:
- Size: 3.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/1.1.8 CPython/3.9.5 Linux/5.11.0-37-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fccaccce5108e5559cce024135d098c3779366e727b129b264205f30260c05ee
|
|
| MD5 |
8c2e80b99482f04fa81124c590d8cd2b
|
|
| BLAKE2b-256 |
4ec6940c6f8ca40d14ea811ebe4f505d90e863d2bf8a9159ffc36de033217408
|
File details
Details for the file statez-0.3.4-py3-none-any.whl.
File metadata
- Download URL: statez-0.3.4-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/1.1.8 CPython/3.9.5 Linux/5.11.0-37-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e07557ae2b10aa5f59063af1f7f466360bbbba2e53599b49961382ff8c6e4cc
|
|
| MD5 |
df7e643425efb246322e80039b5d5283
|
|
| BLAKE2b-256 |
9acb3bf96d31678aec8f6e22706d5b64a618f1e6e550f489f53e370a62e6886e
|