class TriggerManager(object): ''' Auto disconnected trigger manager Wraps SCRIBES.TriggerManager and calls remove_triggers on object deletion ''' def __init__(self, editor): self.manager = CoreTriggerManager(editor) self.triggers = {} def __del__(self): self.triggers.clear() self.manager.remove_triggers() def connect_triggers(self, obj): ''' Connects object methods marked by trigger decorator ''' for attr, value in obj.__class__.__dict__.iteritems(): for trigger, connect_params in getattr(value, 'triggers_to_connect', ()): self.connect(trigger, obj, attr, **connect_params) def connect(self, trigger, obj, attr, after, idle): if trigger.name not in self.triggers: self.triggers[trigger.name] = trigger.create(self.manager) weak_connect(self.triggers[trigger.name], 'activate', obj, attr, after=after, idle=idle)