Skip to main content

pyfsm-tool is a module to create and manipulate finite states machines.

Project description

pyfsm-tool

pyfsm-tool is a module to create and manipulate finite states machines (fsm).

Getting started

Import modules

FiniteStateMachine module:

from pyfsm_tool import FiniteStateMachine, StateBehaviour

Exceptions module:

from pyfsm_tool import FSMException

Create new FSM

The new fsm is empty (No state and no transition).

fsm: FiniteStateMachine = FiniteStateMachine()

Initialize the fsm data store

Initialize fsm data store wit 'message' and 'count' available for all states.

fsm.fsm_data_store = {"message": "", "count": 0}

Create new behaviours

Create new behaviours for fsm states.

  • First behaviour: add 'Hello' in fsm data store (key = 'message') and next transition is 't1'
class Behaviour1(StateBehaviour):
    def action(self) -> None:
        self.state_data_store["message"] += "Hello"

    def next_transition_id(self) -> str:
        return "t1"
  • Second behaviour: add ' ' in fsm data store (key = 'message') and next transition is 't2'
class Behaviour2(StateBehaviour):
    def action(self) -> None:
        self.state_data_store["message"] += " "

    def next_transition_id(self) -> str:
        return "t2"
  • Third behaviour: add 'world' in fsm data store (key = 'message') and next transition is 't3'
class Behaviour3(StateBehaviour):
    def action(self) -> None:
        self.state_data_store["message"] += "world"

    def next_transition_id(self) -> str:
        return "t3"
  • Fourth behaviour: add '!' in fsm data store (key = 'message') and next transition is 't4' (itself) if the key 'count' in fsm data store is less than 2 (there is incrementation of fsm data store for key 'count'), else next transition is 't5'
class Behaviour4(StateBehaviour):
    def action(self) -> None:
        self.state_data_store["message"] += "!"

    def next_transition_id(self) -> str:
        if self.state_data_store.get("count") < 2:
            self.state_data_store["count"] += 1
            return "t4"
        return "t5"
  • Fifth behaviour: display fsm data store (key = 'message') and finish fsm.
class Behaviour5(StateBehaviour):
    def action(self) -> None:
        print(self.state_data_store.get("message"))

Register all states

  • Register first state with first behaviour
fsm.register_first_state(Behaviour1(), "b1")
  • Register next states with next behaviours
fsm.register_state(Behaviour2(), "b2")
fsm.register_state(Behaviour3(), "b3")
fsm.register_state(Behaviour4(), "b4")
  • Register last state with last behaviour
fsm.register_last_state(Behaviour5(), "b5")

If state behaviour not inherits StateBehaviour class or if state already exists(same id) or if an argument is None, then FSMException is raise.

try:
    fsm.register_state(Behaviour2(), "b2")
except FSMException as error:
    pass  # or do something...

Register all transitions

fsm.register_transition("b1", "b2", "t1")
fsm.register_transition("b2", "b3", "t2")
fsm.register_transition("b3", "b4", "t3")
fsm.register_transition("b4", "b4", "t4")
fsm.register_transition("b4", "b5", "t5")

If transition already exists(same id) or if an argument is None, then FSMException is raise.

try:
    fsm.register_transition("b1", "b2", "t1")
except FSMException as error:
    pass  # or do something...

Run FSM

fsm.run()

Author

If you have any questions or suggestions, please don't hesitate to contact me : belaich.david@outlook.fr.

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

pyfsm_tool-0.9.3.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

pyfsm_tool-0.9.3-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file pyfsm_tool-0.9.3.tar.gz.

File metadata

  • Download URL: pyfsm_tool-0.9.3.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for pyfsm_tool-0.9.3.tar.gz
Algorithm Hash digest
SHA256 17b654fd9cf4300280fda808e13554e944f57038cd9a432203597b806a696d77
MD5 05b6c36c23d62ec0424ae674b9ddd735
BLAKE2b-256 baf6c9f0e7a7c9587cf99e285300474f79798026248af0c7ec565b49326114c8

See more details on using hashes here.

File details

Details for the file pyfsm_tool-0.9.3-py3-none-any.whl.

File metadata

  • Download URL: pyfsm_tool-0.9.3-py3-none-any.whl
  • Upload date:
  • Size: 8.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for pyfsm_tool-0.9.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3977db87a477d217833d6810dbfb3c8f75be309de8c4fdd298a56a8f5c04f44d
MD5 a767c8d7c8bbf7a62734ef3e56f8b54c
BLAKE2b-256 de0484c119b9dc512498ca345740df11e4c97c785183c892d9edf3e014158f23

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