Efficient Tiny State Machine using object callbacks.
Project description
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 hashes)
Built Distribution
etsm-0.5.0-py3-none-any.whl
(3.7 kB
view hashes)