def fire(self,*args,**kwargs): # are we currently firing? if not self.firing: # keep our events to the side self.to_fire.append((args,kwargs)) else: # if we are firing just let'm go Eventable.fire(self,*args,**kwargs)
def fire_events(self): # now we actually fire them self.firing = True for args, kwargs in self.to_fire: Eventable.fire(self,*args,**kwargs) # reset our to fire self.to_fire = [] # and we're done self.firing = False