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 [[email protected]] 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: [email protected]?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: [email protected]?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: [email protected]?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
