annotate sat/tools/async_trigger.py @ 3028:ab2696e34d29

Python 3 port: /!\ this is a huge commit /!\ starting from this commit, SàT is needs Python 3.6+ /!\ SàT maybe be instable or some feature may not work anymore, this will improve with time This patch port backend, bridge and frontends to Python 3. Roughly this has been done this way: - 2to3 tools has been applied (with python 3.7) - all references to python2 have been replaced with python3 (notably shebangs) - fixed files not handled by 2to3 (notably the shell script) - several manual fixes - fixed issues reported by Python 3 that where not handled in Python 2 - replaced "async" with "async_" when needed (it's a reserved word from Python 3.7) - replaced zope's "implements" with @implementer decorator - temporary hack to handle data pickled in database, as str or bytes may be returned, to be checked later - fixed hash comparison for password - removed some code which is not needed anymore with Python 3 - deactivated some code which needs to be checked (notably certificate validation) - tested with jp, fixed reported issues until some basic commands worked - ported Primitivus (after porting dependencies like urwid satext) - more manual fixes
author Goffi <goffi@goffi.org>
date Tue, 13 Aug 2019 19:08:41 +0200
parents 003b8b4b56a7
children 9d0df638c8b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
1 #!/usr/bin/env python3
2645
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
3
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # SAT: a jabber client
2771
003b8b4b56a7 date update
Goffi <goffi@goffi.org>
parents: 2650
diff changeset
5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org)
2645
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
6
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
11
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
16
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
19
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
20 """Misc usefull classes"""
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
21
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from sat.tools import trigger as sync_trigger
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from twisted.internet import defer
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
24
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
25 class TriggerManager(sync_trigger.TriggerManager):
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
26 """This is a TriggerManager with an new asyncPoint method"""
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
27
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
28 @defer.inlineCallbacks
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
29 def asyncPoint(self, point_name, *args, **kwargs):
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
30 """This put a trigger point with potentially async Deferred
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
31
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
32 All the triggers for that point will be run
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
33 @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
34 @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
35 @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
36 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
37 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
38 the workflow
2645
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
39 @return D(bool): True if the action must be continued, False else
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
40 """
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
41 if point_name not in self.__triggers:
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
42 defer.returnValue(True)
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
43
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
44 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
45
2645
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
46 for priority, trigger in self.__triggers[point_name]:
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
47 try:
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
48 cont = yield 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
49 if can_cancel and not cont:
2645
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
50 defer.returnValue(False)
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
51 except sync_trigger.SkipOtherTriggers:
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
52 break
f2cf1daa42cb core: added async TriggerManager
Goffi <goffi@goffi.org>
parents:
diff changeset
53 defer.returnValue(True)