From b5ddf942f7e9cdb34ade92a2956385da02050041 Mon Sep 17 00:00:00 2001 From: Goffi Date: Sat, 20 Oct 2012 18:18:40 +0200 Subject: [PATCH] core: added priority management in triggers --- src/tools/misc.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/tools/misc.py b/src/tools/misc.py index ba41c91b..8ed1effa 100644 --- a/src/tools/misc.py +++ b/src/tools/misc.py @@ -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