Utility classes to make working with appengine easier.
Home Project Page Group Wiki Downloads

Event

Event is a simple publish/subscribe based event dispatcher. It's a way to add, or take advantage of, hooks in your application. If you want to tie actions in with lower level classes you're developing within your application, you can set events to fire, and then subscribe to them with callback methods in other methods in your application.

It sets itself to the __main__ function. In order to use it, you must import it with your __main__ method, and make sure you import __main__ and it's accessible for the methods where you want to use it.

For example, from sessions.py

            # if the event class has been loaded, fire off the sessionDeleted event
        if u"AEU_Events" in __main__.__dict__:
            __main__.AEU_Events.fire_event(u"sessionDelete")
    
You can the subscribe to session delete events, adding a callback
        if u"AEU_Events" in __main__.__dict__:
            __main__.AEU_Events.subscribe(u"sessionDelete", clear_user_session)
    

Methods:

subscribe(self, event, callback, args = None)

This method will subscribe a callback function to an event name.
Args:

  • event: The event to subscribe to.
  • callback: The callback method to run.
  • args: Optional arguments to pass with the callback.
Returns True

unsubscribe(self, event, callback, args = None)

This method will unsubscribe a callback from an event.

Args:
  • event: The event to subscribe to.
  • callback: The callback method to run.
  • args: Optional arguments to pass with the callback.
Returns True

fire_event(self, event = None)

This method is what a method uses to fire an event, initiating all registered callbacks
Args:

  • event: The name of the event to fire.
Returns True

Click here to trigger an event.
Click here to view without event triggered (in order to confirm events aren't getting cached by GAE)
msg: This message was set in myCallback.
triggermsg: Triggered!

webapp class

class EventPage(webapp.RequestHandler):
  def __init__(self):
        self.msg = ""
        self.triggermsg = "I have not been triggered"

  def get(self):
    if self.request.get('trigger') == "true":
        AEU_Events.subscribe("myTriggeredEventFired", self.myTriggeredCallback, {"msg": "Triggered!"})
    AEU_Events.subscribe("myEventFired", self.myCallback, {"msg": "This message was set in myCallback."})
    AEU_Events.fireEvent("myEventFired")
    AEU_Events.fireEvent("myTriggeredEventFired")
    template_values = {
        'msg': self.msg,
        'triggermsg': self.triggermsg,
    }
    AEU_Events.subscribe("myEventFired", self.myCallback, {"msg": "You will never see this message because the event to set it is fired after the template_values have already been set."})
    AEU_Events.fireEvent("myEventFired")
    path = os.path.join(os.path.dirname(__file__), 'templates/event.html')
    self.response.out.write(template.render(path, template_values))

  def myCallback(self, msg):
    self.msg = msg

  def myTriggeredCallback(self, msg):
    self.triggermsg = msg