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 hashes)

Uploaded Source

Built Distribution

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

Uploaded Python 3

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