Skip to main content

Efficient Tiny State Machine using object callbacks.

Project description

MIT licensed PyPI version

python etsm

Tiny state machine for python, see etsm

Description

Implement a bare bones state machine in many languages. This library aim to be simple as possible and support only basic features:

  • states on object (owner)
  • optional enter/exit methods
  • virtual state user methods
  • is in
  • unrestricted transitions
  • no runtime allocation

Install

include this file into your project etsm.py
or
import it

import etsm

Example

Simple

import etsm

class Foo:
    def __init__(self):
        self.__sm = etsm.StateMachine(self)
        self.__a = etsm.State(Foo.EnterA, Foo.ExitA)
        self.__b = etsm.State(Foo.EnterB, None)

    def EnterA(self):
        print(' ->A ', end='')

    def ExitA(self):
        print(' A-> ', end='')

    def EnterB(self):
        print(' ->B ', end='')

    # no exit for B
    # def ExitB(self):
    #     print(' B-> ', end='')

    def Run(self):
        self.__sm.Transition(self.__a);
        self.__sm.Transition(self.__b);
        self.__sm.Transition(None);

foo = Foo()
foo.Run()

Output : " ->A A-> ->B "
Sample: ab.py

Virtual State Methods

import etsm

class FooState(etsm.State):
    def __init__(self, enter, exit, tick):
        super().__init__(enter, exit)
        self.Tick = tick

class Foo:
    def __init__(self):
        self.__sm = etsm.StateMachine(self)
        self.__a = FooState(None, None, Foo.TickA)
        self.__b = FooState(None, None, Foo.TickB)

    def TickA(self):
        print(' A ', end='')

    def TickB(self):
        print(' B ', end='')

    # call tick on the current state, aka virtual call
    def Tick(self):
        if ( self.__sm.Current != None ):
            self.__sm.Current.Tick(self)

    def Run(self):
        self.Tick();
        self.__sm.Transition(self.__a);
        self.Tick();
        self.__sm.Transition(self.__b);
        self.Tick();
        self.__sm.Transition(None);
        self.Tick();

foo = Foo()
foo.Run()

Output: " A B "
Sample: virtual_call.py

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

etsm-0.5.0.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

etsm-0.5.0-py3-none-any.whl (3.7 kB view details)

Uploaded Python 3

File details

Details for the file etsm-0.5.0.tar.gz.

File metadata

  • Download URL: etsm-0.5.0.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.4

File hashes

Hashes for etsm-0.5.0.tar.gz
Algorithm Hash digest
SHA256 65b18e606606bde12e00caf14cab01a2b00a8000f4bf95881d651e7692e858fc
MD5 6d5e13445214636c9850d05444ecbc46
BLAKE2b-256 e78d192df12bffb74f380bfb0de98322a64006692c84aafa1e914cbe70b0196a

See more details on using hashes here.

File details

Details for the file etsm-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: etsm-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 3.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.0 CPython/3.10.4

File hashes

Hashes for etsm-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bfa25e9017541e18d84420d06e69e40e5cfe13080f979213fb7523fdb15ccff6
MD5 c9726c9d4bd59e8dde46a84384815dcb
BLAKE2b-256 94d9357761707815bf71fdc3b658d1c30cac565bc48c484eb17a1c101aa2bc80

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page