Mercurial > libervia-backend
annotate sat/tools/async_trigger.py @ 3405:ecdb3728749e
plugin XEP-0353: Jingle Message Initiation implementation:
This plugin uses the new `XEP-0166_initiate` trigger to initiate a Jingle session with
messages if the peer jid has no resource specified.
On reception, if the sender is not in our roster, a confirmation is requested to user to
avoid leaking presence and IP. If user refuses the session for somebody not in roster,
nothing is sent at all (the request is just ignored).
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 12 Nov 2020 14:53:15 +0100 |
parents | c069882f64cb |
children | be6d91572633 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
2645 | 3 |
4 # SAT: a jabber client | |
3136 | 5 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) |
2645 | 6 |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
20 """Misc usefull classes""" | |
21 | |
3397
c069882f64cb
tools (async_trigger): use `utils.asDeferred` for async triggers:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
22 from . import trigger as sync_trigger |
c069882f64cb
tools (async_trigger): use `utils.asDeferred` for async triggers:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
23 from . import utils |
2645 | 24 from twisted.internet import defer |
25 | |
26 class TriggerManager(sync_trigger.TriggerManager): | |
27 """This is a TriggerManager with an new asyncPoint method""" | |
28 | |
29 @defer.inlineCallbacks | |
30 def asyncPoint(self, point_name, *args, **kwargs): | |
31 """This put a trigger point with potentially async Deferred | |
32 | |
33 All the triggers for that point will be run | |
34 @param point_name: name of the trigger point | |
2650
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
35 @param *args: args to transmit to trigger |
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
36 @param *kwargs: kwargs to transmit to trigger |
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
37 if "triggers_no_cancel" is present, it will be popped out |
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
38 when set to True, this argument don't let triggers stop |
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
39 the workflow |
2645 | 40 @return D(bool): True if the action must be continued, False else |
41 """ | |
42 if point_name not in self.__triggers: | |
43 defer.returnValue(True) | |
44 | |
2650
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
45 can_cancel = not kwargs.pop('triggers_no_cancel', False) |
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
46 |
2645 | 47 for priority, trigger in self.__triggers[point_name]: |
48 try: | |
3397
c069882f64cb
tools (async_trigger): use `utils.asDeferred` for async triggers:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
49 cont = yield utils.asDeferred(trigger, *args, **kwargs) |
2650
3a8e7ec4648a
tools (trigger, async_trigger): added no_cancel argument to point and asyncPoint when a trigger must not be cancellable
Goffi <goffi@goffi.org>
parents:
2645
diff
changeset
|
50 if can_cancel and not cont: |
2645 | 51 defer.returnValue(False) |
52 except sync_trigger.SkipOtherTriggers: | |
53 break | |
54 defer.returnValue(True) |