Mercurial > libervia-backend
annotate libervia/backend/tools/async_trigger.py @ 4263:2109d864a3e7
plugin XEP-470: Don't file configuration on `feature-not-implemented`.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 12 Jun 2024 22:35:13 +0200 |
parents | e11b13418ba6 |
children | 0d7bb4df2343 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
2645 | 3 |
4 # SAT: a jabber client | |
3479 | 5 # Copyright (C) 2009-2021 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 | |
3755
e14847bf65c0
tools (async_trigger): fix return value in `asyncReturnPoint` + typing hints
Goffi <goffi@goffi.org>
parents:
3525
diff
changeset
|
22 from typing import Tuple, Any |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
23 |
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
24 from libervia.backend.core.xmpp import SatXMPPEntity |
3397
c069882f64cb
tools (async_trigger): use `utils.asDeferred` for async triggers:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
25 from . import trigger as sync_trigger |
c069882f64cb
tools (async_trigger): use `utils.asDeferred` for async triggers:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
26 from . import utils |
2645 | 27 from twisted.internet import defer |
28 | |
29 class TriggerManager(sync_trigger.TriggerManager): | |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3755
diff
changeset
|
30 """This is a TriggerManager with an new async_point method""" |
2645 | 31 |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
32 async def async_point( |
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
33 self, |
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
34 point_name: str, |
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
35 *args, **kwargs |
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
36 ) -> bool: |
2645 | 37 """This put a trigger point with potentially async Deferred |
38 | |
39 All the triggers for that point will be run | |
40 @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
|
41 @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
|
42 @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
|
43 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
|
44 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
|
45 the workflow |
2645 | 46 @return D(bool): True if the action must be continued, False else |
47 """ | |
48 if point_name not in self.__triggers: | |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
49 return True |
2645 | 50 |
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
|
51 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
|
52 |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
53 for __, trigger in self.__triggers[point_name]: |
2645 | 54 try: |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
55 cont = await utils.as_deferred(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
|
56 if can_cancel and not cont: |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
57 return False |
2645 | 58 except sync_trigger.SkipOtherTriggers: |
59 break | |
4231
e11b13418ba6
plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
60 return True |
3525
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
61 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3755
diff
changeset
|
62 async def async_return_point( |
3755
e14847bf65c0
tools (async_trigger): fix return value in `asyncReturnPoint` + typing hints
Goffi <goffi@goffi.org>
parents:
3525
diff
changeset
|
63 self, |
e14847bf65c0
tools (async_trigger): fix return value in `asyncReturnPoint` + typing hints
Goffi <goffi@goffi.org>
parents:
3525
diff
changeset
|
64 point_name: str, |
e14847bf65c0
tools (async_trigger): fix return value in `asyncReturnPoint` + typing hints
Goffi <goffi@goffi.org>
parents:
3525
diff
changeset
|
65 *args, **kwargs |
e14847bf65c0
tools (async_trigger): fix return value in `asyncReturnPoint` + typing hints
Goffi <goffi@goffi.org>
parents:
3525
diff
changeset
|
66 ) -> Tuple[bool, Any]: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3755
diff
changeset
|
67 """Async version of return_point""" |
3525
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
68 if point_name not in self.__triggers: |
3755
e14847bf65c0
tools (async_trigger): fix return value in `asyncReturnPoint` + typing hints
Goffi <goffi@goffi.org>
parents:
3525
diff
changeset
|
69 return True, None |
3525
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
70 |
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
71 for priority, trigger in self.__triggers[point_name]: |
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
72 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3755
diff
changeset
|
73 cont, ret_value = await utils.as_deferred(trigger, *args, **kwargs) |
3525
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
74 if not cont: |
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
75 return False, ret_value |
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
76 except sync_trigger.SkipOtherTriggers: |
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
77 break |
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
78 return True, None |
7f5bf108961a
tools (async_trigger): new `asyncReturnPoint` method
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
79 |