cool i take a loot.

Extending this a bit it adds a lot of potential to make FSM "observable" via
configuration. Each transition or action could have a list of observers - it
also pops into my mind Prospective Search -

On 10 June 2011 10:22, Shawn R <shawn.ru...@gmail.com> wrote:

> Hi David,
>
> No plans yet. I often accomplish these sorts of things using a
> baseclass/subclass of FSMAction. Hopefully the following (UNTESTED)
> code helps you along.
>
> ===
>
> OBSERVERS = 'observers'
>
> class ObserverFSMAction(FSMAction):
>  # this is an abstract base class
>  def execute(self, context, obj):
>    self._execute(self, context, obj)
>    for observer in context.get(OBSERVERS, []):
>      observer.notify()
>  def _execute(self, context, obj):
>    raise NotImplementedError()
>
> class MyFSMAction(ObserverFSMAction):
>  # use this class in your fsm.yaml
>  def _execute(self, context, obj):
>    # actually do stuff and return event
>    # eg. add an observer
>    # NOTE: this is truly untested, but it should work
>    context[OBSERVERS] = context.get(OBSERVERS, []) +
> [ObserverImpl(...)]
>
> class Observer(object):
>  def __init__(self, a_string_to_construct_an_instance_of_observer):
>    self._observerImpl = # make impl from supplied string
>  def notify():
>    self._observerImpl.notify()
>
> class ObserverImpl(Observer):
>    def __init__(self, *args, **kwargs):
>      # make a useful observer
>    def __str__(self): # or maybe __unicode__ is required, can't
> recall what webapp does with url params
>      # return a string that can be used to reconstruct self - maybe
> just call __repr__?
>    def notify():
>      # do stuff
>
> and in fsm.yaml
>
> context_types:
>  observers: module.name.of.Observer
>
> This would only act at the FSMAction level, not the state transition
> level. Subclasses of FSMContext/FSMState which override .dispatch()
> can also be very powerful - but these required bigger changes to the
> framework. The previous example can be accomplished out-of-box
>
> On Jun 9, 2:05 pm, David Mora <dla.m...@gmail.com> wrote:
> > BTW - any intentions on plugging an observer pattern/plugin around it :)
> ?
> > It would be awesome to have a list of observers watching for change on
> > states (subject)
> >
> > On 9 June 2011 12:22, David Mora <dla.m...@gmail.com> wrote:
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > > i'm also using it right now for some moderation flows i need to finish
> so i
> > > will test it too
> >
> > > On 9 June 2011 10:14, Jason Collins <jason.a.coll...@gmail.com> wrote:
> >
> > >> @Mike_W, I've updated the docs to describe this new feature.
> >
> > >>  http://code.google.com/p/fantasm/wiki/AdvancedConcepts#Fan-In
> >
> > >> j
> >
> > >> On Jun 8, 9:44 pm, Robert Kluin <robert.kl...@gmail.com> wrote:
> > >> > Hey Shawn,
> > >> >   Awesome,  I'll try to review it tomorrow!
> >
> > >> >   Hopefully Mike is still following this thread and will help us
> test
> > >> > it out.  :)
> >
> > >> > Robert
> >
> > >> > On Wed, Jun 8, 2011 at 12:03, Shawn <shawn.ru...@gmail.com> wrote:
> > >> > > Hi Robert,
> > >> > > Done.http://code.google.com/p/fantasm/source/detail?r=147.
> > >> > > Please give it a quick review if you are able.
> > >> > > Thanks again.
> > >> > > --
> > >> > > Shawn
> >
> > >> > > --
> > >> > > You received this message because you are subscribed to the Google
> > >> Groups
> > >> > > "Google App Engine" group.
> > >> > > To view this discussion on the web visit
> > >> > >
> https://groups.google.com/d/msg/google-appengine/-/Y2FNTEJHRWdqczhK.
> > >> > > To post to this group, send email to
> > >> google-appengine@googlegroups.com.
> > >> > > To unsubscribe from this group, send email to
> > >> > > google-appengine+unsubscr...@googlegroups.com.
> > >> > > For more options, visit this group at
> > >> > >http://groups.google.com/group/google-appengine?hl=en.
> >
> > >> --
> > >> You received this message because you are subscribed to the Google
> Groups
> > >> "Google App Engine" group.
> > >> To post to this group, send email to
> google-appengine@googlegroups.com.
> > >> To unsubscribe from this group, send email to
> > >> google-appengine+unsubscr...@googlegroups.com.
> > >> For more options, visit this group at
> > >>http://groups.google.com/group/google-appengine?hl=en.
> >
> > > --
> > >http://about.me/david.mora
> >
> > --http://about.me/david.mora
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine" group.
> To post to this group, send email to google-appengine@googlegroups.com.
> To unsubscribe from this group, send email to
> google-appengine+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/google-appengine?hl=en.
>
>


-- 
http://about.me/david.mora

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to