# HG changeset patch # User Goffi # Date 1350749920 -7200 # Node ID 7ee15fbe8c084685370e2c2fa4d979b0a1ff975a # Parent 29b5ef129488c9ae6a0f8cad8502f768fadde7e7 core: added priority management in triggers diff -r 29b5ef129488 -r 7ee15fbe8c08 src/tools/misc.py --- a/src/tools/misc.py Sat Oct 20 18:02:14 2012 +0200 +++ b/src/tools/misc.py Sat Oct 20 18:18:40 2012 +0200 @@ -32,24 +32,26 @@ 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 @@ 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