core: added priority management in triggers
This commit is contained in:
parent
902045e174
commit
b5ddf942f7
1 changed files with 10 additions and 8 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue