Skip to main content

Helps you to build fancy statemachines

Project description

statez

Total alerts statez.png

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.

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

statez-0.3.4.tar.gz (3.7 kB view details)

Uploaded Source

Built Distribution

statez-0.3.4-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

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

Hashes for statez-0.3.4.tar.gz
Algorithm Hash digest
SHA256 fccaccce5108e5559cce024135d098c3779366e727b129b264205f30260c05ee
MD5 8c2e80b99482f04fa81124c590d8cd2b
BLAKE2b-256 4ec6940c6f8ca40d14ea811ebe4f505d90e863d2bf8a9159ffc36de033217408

See more details on using hashes here.

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

Hashes for statez-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8e07557ae2b10aa5f59063af1f7f466360bbbba2e53599b49961382ff8c6e4cc
MD5 df7e643425efb246322e80039b5d5283
BLAKE2b-256 9acb3bf96d31678aec8f6e22706d5b64a618f1e6e550f489f53e370a62e6886e

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