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

Kwan, Louie Louie.Kwan at windriver.com
Thu Feb 15 17:08:33 UTC 2018


Thanks for the reply. I will take the subclass approach for now.

It will be nice if we can dynamically register additional info or even a callback function  after building  a machine from a state space listing.

-LK
________________________________________
From: Joshua Harlow [harlowja at fastmail.com]
Sent: Wednesday, February 14, 2018 1:05 AM
To: OpenStack Development Mailing List (not for usage questions)
Subject: Re: [openstack-dev] [automaton] How to extend automaton?

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

__________________________________________________________________________
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