Skip to content

Quicksheet

Installing and running

pip install flou
touch app.py
touch requirements.txt
touch .env
flou compose up

LTMs

from flou import LTM
from flou.registry import registry


class MyState(LTM):
    name = 'my_state'

    def run(self, **params):
        label = 'my_transition'
        params = {}
        self.transition(label, **params)

        self.update_state({'internal_state_key': 'state_value'})
        self.root.update_state({'global_key': 'global_value'})

        print(self.state['internal_state_key'])  # prints 'state_value'
        print(self.root.state['global_key'])  # prints 'global_value'

class EndState(LTM):
    def run(self, **params):
        print('end')


class MyNetwork(LTM):
    name = 'my_ltm'
    init = [MyState]  # init can be simple states or sub machines
    transitions = [
        {'from': MyState, label: 'my_transition', 'to': EndState}
    ]

registry.register(MyNetwork)
  • LTM.name: the name of the ltm. Allowed names: ^[a-z][a-z0-9_]*$
  • LTM.init: start these ltms when the current one is executed
  • LTM.transitions: list of {'from': FromLTMClass, 'label': transition_label, 'to': ToLTMClass} from and to can be a single class or an iterable of classes
  • LTM.start(): start the root LTM, should be called only once
  • LTM.root: returns the root LTM
  • LTM.parent: returns the parent LTM
  • LTM.state: returns a dict with the current LTM state, you can use self.root.state for global state. Don't assign directly, see LTM.update_state
  • LTM.update_state(update_list): pass a list of {key: value} to update the state. Use self.root.update_state to update the global state
  • LTM.atomic_state_append(key, value): atomically and immediately append value to a pre initialized list key in self.state. Use only in concurrent states.
  • LTM.transition(label, payload, params, namespace): transition all LTMS with label transition