tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
This commit is contained in:
parent
027909103e
commit
c5c46f3558
3 changed files with 18 additions and 3 deletions
|
|
@ -651,7 +651,8 @@ class SatXMPPClient(SatXMPPEntity, wokkel_client.XMPPClient):
|
|||
# This is intented for e2e encryption which doesn't do full stanza
|
||||
# encryption (e.g. OTR)
|
||||
# This trigger point can't cancel the method
|
||||
yield self.host_app.trigger.asyncPoint("sendMessageData", self, mess_data)
|
||||
yield self.host_app.trigger.asyncPoint("sendMessageData", self, mess_data,
|
||||
triggers_no_cancel=True)
|
||||
self.send(mess_data[u"xml"])
|
||||
defer.returnValue(mess_data)
|
||||
|
||||
|
|
|
|||
|
|
@ -31,15 +31,22 @@ class TriggerManager(sync_trigger.TriggerManager):
|
|||
|
||||
All the triggers for that point will be run
|
||||
@param point_name: name of the trigger point
|
||||
@param *args: args to transmit to trigger
|
||||
@param *kwargs: kwargs to transmit to trigger
|
||||
if "triggers_no_cancel" is present, it will be popped out
|
||||
when set to True, this argument don't let triggers stop
|
||||
the workflow
|
||||
@return D(bool): True if the action must be continued, False else
|
||||
"""
|
||||
if point_name not in self.__triggers:
|
||||
defer.returnValue(True)
|
||||
|
||||
can_cancel = not kwargs.pop('triggers_no_cancel', False)
|
||||
|
||||
for priority, trigger in self.__triggers[point_name]:
|
||||
try:
|
||||
cont = yield trigger(*args, **kwargs)
|
||||
if not cont:
|
||||
if can_cancel and not cont:
|
||||
defer.returnValue(False)
|
||||
except sync_trigger.SkipOtherTriggers:
|
||||
break
|
||||
|
|
|
|||
|
|
@ -91,14 +91,21 @@ class TriggerManager(object):
|
|||
|
||||
All the triggers for that point will be run
|
||||
@param point_name: name of the trigger point
|
||||
@param *args: args to transmit to trigger
|
||||
@param *kwargs: kwargs to transmit to trigger
|
||||
if "triggers_no_cancel" is present, it will be popup out
|
||||
when set to True, this argument don't let triggers stop
|
||||
the workflow
|
||||
@return: True if the action must be continued, False else
|
||||
"""
|
||||
if point_name not in self.__triggers:
|
||||
return True
|
||||
|
||||
can_cancel = not kwargs.pop('triggers_no_cancel', False)
|
||||
|
||||
for priority, trigger in self.__triggers[point_name]:
|
||||
try:
|
||||
if not trigger(*args, **kwargs):
|
||||
if not trigger(*args, **kwargs) and can_cancel:
|
||||
return False
|
||||
except SkipOtherTriggers:
|
||||
break
|
||||
|
|
|
|||
Loading…
Reference in a new issue