core: added priority management in triggers

This commit is contained in:
Goffi 2012-10-20 18:18:40 +02:00
commit b5ddf942f7

View file

@ -32,24 +32,26 @@ class TriggerManager:
def __init__(self):
self.__triggers={}
def add(self, point_name, callback):
def add(self, point_name, callback, priority=0):
"""Add a trigger to a point
@param point_name: name of the point when the trigger should be run
@param callback: method to call at the trigger point
@param priority: callback will be called in priority order, biggest first
"""
if not self.__triggers.has_key(point_name):
self.__triggers[point_name]=[]
self.__triggers[point_name].append(callback)
self.__triggers[point_name].append((priority, callback))
self.__triggers[point_name].sort(key=lambda trigger_tuple: trigger_tuple[0], reverse=True)
def remove(self, point_name, callback):
"""Remove a trigger from a point
@param point_name: name of the point when the trigger should be run
@param callback: method to remove, must exists in the trigger point"""
try:
self.__triggers[point_name].remove(callback)
except (KeyError,ValueError):
raise TriggerException("Trying to remove an unexisting trigger")
for trigger_tuple in self.__triggers[point_name]:
if trigger_tuple[1] == callback:
self.__triggers[point_name].remove(trigger_tuple)
return
raise TriggerException("Trying to remove an unexisting trigger")
def point(self, point_name, *args, **kwargs):
"""This put a trigger point
@ -59,7 +61,7 @@ class TriggerManager:
if not self.__triggers.has_key(point_name):
return True
for trigger in self.__triggers[point_name]:
for priority,trigger in self.__triggers[point_name]:
if not trigger(*args, **kwargs):
return False
return True