[openstack-dev] [automaton] How to extend automaton?

Joshua Harlow harlowja at fastmail.com
Wed Feb 14 06:05:56 UTC 2018


As far a 1, I'd recommend just use functools.partial or make an object 
with all the extra stuff u want and have that object provide a __call__ 
method.

As far as 2, you might have to subclass the FSM baseclass and add those 
into the internal data-structure (same for 3 I think); ie this one @ 
https://github.com/openstack/automaton/blob/master/automaton/machines.py#L186-L191

Of course feel free to do it differently and submit a patch that folks 
(myself and others) can review.

-Josh

Kwan, Louie wrote:
> https://github.com/openstack/automaton
>
> Friendly state machines for python.
>
> A few questions about automaton.
>
> 1.I would like to know can we addition parameters on on_enter or on_exit
> callbacks. Right now, it seems it only allows state and triggered_event.
>
> a.I have many FSM running for different objects and it is much easier if
> I can pass on the some sort of ID back to the callbacks.
>
> 2.Can we or how can we store extra attribute like last state change
> *timestamp*?
>
> 3.Can we store additional identify info for the FSM object? Would like
> to add an */UUID/*
>
> Thanks.
>
> Louie
>
> def print_on_enter(new_state, triggered_event):
>
> print("Entered '%s' due to '%s'" % (new_state, triggered_event))
>
> def print_on_exit(old_state, triggered_event):
>
> print("Exiting '%s' due to '%s'" % (old_state, triggered_event))
>
> # This will contain all the states and transitions that our machine will
>
> # allow, the format is relatively simple and designed to be easy to use.
>
> state_space = [
>
> {
>
> 'name': 'stopped',
>
> 'next_states': {
>
> # On event 'play' transition to the 'playing' state.
>
> 'play': 'playing',
>
> 'open_close': 'opened',
>
> 'stop': 'stopped',
>
> },
>
> 'on_enter': print_on_enter,
>
> 'on_exit': print_on_exit,
>
> },
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



More information about the OpenStack-dev mailing list