annotate libervia/backend/core/main.py @ 4272:89a0999884ac

cli (list/set): add "--comments" argument.
author Goffi <goffi@goffi.org>
date Thu, 20 Jun 2024 14:46:55 +0200
parents 0d7bb4df2343
children 9e63e02318ec
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1 #!/usr/bin/env python3
0
goffi@necton2
parents:
diff changeset
2
3480
7550ae9cfbac Renamed the project from "Salut à Toi" to "Libervia":
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
3 # Libervia: an XMPP client
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3388
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
5
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
6 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
9 # (at your option) any later version.
0
goffi@necton2
parents:
diff changeset
10
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
11 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
14 # GNU Affero General Public License for more details.
0
goffi@necton2
parents:
diff changeset
15
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
goffi@necton2
parents:
diff changeset
18
2810
c161a294fffd core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents: 2791
diff changeset
19 import sys
c161a294fffd core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents: 2791
diff changeset
20 import os.path
c161a294fffd core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents: 2791
diff changeset
21 import uuid
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
22 import hashlib
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
23 import copy
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
24 from pathlib import Path
4266
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
25 import shutil
4193
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
26 from typing import Optional, List, Tuple, Dict, cast
3932
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
27
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
28 from wokkel.data_form import Option
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
29 from libervia import backend
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
30 from libervia.backend.core.i18n import _, D_, language_switch
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
31 from libervia.backend.core import patches
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
32
2687
e9cd473a2f46 core (xmpp): server certificate validation:
Goffi <goffi@goffi.org>
parents: 2666
diff changeset
33 patches.apply()
331
0a8eb0461f31 core: main SAT class now moved in its own module core.sat_main
Goffi <goffi@goffi.org>
parents: 330
diff changeset
34 from twisted.application import service
0a8eb0461f31 core: main SAT class now moved in its own module core.sat_main
Goffi <goffi@goffi.org>
parents: 330
diff changeset
35 from twisted.internet import defer
1037
6e975c6b0faf core, memory, bridge, plugin misc_register_account: move registerNewAccount to a new plugin:
souliane <souliane@mailoo.org>
parents: 1032
diff changeset
36 from twisted.words.protocols.jabber import jid
0
goffi@necton2
parents:
diff changeset
37 from twisted.internet import reactor
346
ca3a041fed30 core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents: 341
diff changeset
38 from wokkel.xmppim import RosterItem
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
39 from libervia.backend.core import xmpp
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
40 from libervia.backend.core import exceptions
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
41 from libervia.backend.core.core_types import SatXMPPEntity
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
42 from libervia.backend.core.log import getLogger
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
43
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
44 from libervia.backend.core.constants import Const as C
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
45 from libervia.backend.memory import memory
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
46 from libervia.backend.memory import cache
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
47 from libervia.backend.memory import encryption
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
48 from libervia.backend.tools import async_trigger as trigger
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
49 from libervia.backend.tools import utils
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
50 from libervia.backend.tools import image
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
51 from libervia.backend.tools.common import dynamic_import
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
52 from libervia.backend.tools.common import regex
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
53 from libervia.backend.tools.common import data_format
4193
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
54 from libervia.backend.tools.common import async_process
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
55 from libervia.backend.stdui import ui_contact_list, ui_profile_manager
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
56 import libervia.backend.plugins
0
goffi@necton2
parents:
diff changeset
57
2691
1ecceac3df96 plugin XEP-0198: Stream Management implementation:
Goffi <goffi@goffi.org>
parents: 2689
diff changeset
58
2810
c161a294fffd core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents: 2791
diff changeset
59 log = getLogger(__name__)
0
goffi@necton2
parents:
diff changeset
60
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
61
4072
040095a5dc7f refactoring: rename `SAT` class to `LiberviaBackend`
Goffi <goffi@goffi.org>
parents: 4071
diff changeset
62 class LiberviaBackend(service.Service):
3537
f9a5b810f14d core (memory/storage): backend storage is now based on SQLAlchemy
Goffi <goffi@goffi.org>
parents: 3480
diff changeset
63
3110
3fcc99b2d6b7 core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents: 3102
diff changeset
64 def _init(self):
3fcc99b2d6b7 core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents: 3102
diff changeset
65 # we don't use __init__ to avoid doule initialisation with twistd
3fcc99b2d6b7 core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents: 3102
diff changeset
66 # this _init is called in startService
3fcc99b2d6b7 core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents: 3102
diff changeset
67 log.info(f"{C.APP_NAME} {self.full_version}")
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
68 self._cb_map = {} # map from callback_id to callbacks
3912
ce5d03772689 core (main): `OrderedDict` is not necesasry here anymore, as `dict` are now ordered
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
69 # dynamic menus. key: callback_id, value: menu data (dictionnary)
ce5d03772689 core (main): `OrderedDict` is not necesasry here anymore, as `dict` are now ordered
Goffi <goffi@goffi.org>
parents: 3911
diff changeset
70 self._menus = {}
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
71 self._menus_paths = {} # path to id. key: (menu_type, lower case tuple of path),
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
72 # value: menu id
4193
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
73
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
74 # like initialised, but launched before init script is done, mainly useful for CLI
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
75 # frontend, so it can be used in init script, while other frontends are waiting.
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
76 self.init_pre_script = defer.Deferred()
1591
0df9c6247474 core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents: 1587
diff changeset
77 self.initialised = defer.Deferred()
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
78 self.profiles = {}
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
79 self.plugins = {}
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
80 # map for short name to whole namespace,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
81 # extended by plugins with register_namespace
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
82 self.ns_map = {
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
83 "x-data": xmpp.NS_X_DATA,
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
84 "disco#info": xmpp.NS_DISCO_INFO,
2688
943e78e18882 core (xmpp): added missing disco#info namespace to disco info result.
Goffi <goffi@goffi.org>
parents: 2687
diff changeset
85 }
3088
d1464548055a plugin file download: meta plugin to handle file download:
Goffi <goffi@goffi.org>
parents: 3066
diff changeset
86
2509
d485e9416493 core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents: 2496
diff changeset
87 self.memory = memory.Memory(self)
3088
d1464548055a plugin file download: meta plugin to handle file download:
Goffi <goffi@goffi.org>
parents: 3066
diff changeset
88
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
89 # trigger are used to change Libervia behaviour
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
90 self.trigger = trigger.TriggerManager()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
91
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
92 bridge_name = os.getenv("LIBERVIA_BRIDGE_NAME") or self.memory.config_get(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
93 "", "bridge", "dbus"
3634
3c7a64d6f49f bridge: bridge can now be set using environment variable:
Goffi <goffi@goffi.org>
parents: 3480
diff changeset
94 )
2088
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
95
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
96 bridge_module = dynamic_import.bridge(bridge_name)
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
97 if bridge_module is None:
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
98 log.error(f"Can't find bridge module of name {bridge_name}")
2088
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
99 sys.exit(1)
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
100 log.info(f"using {bridge_name} bridge")
627
d207c2186519 core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents: 609
diff changeset
101 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
102 self.bridge = bridge_module.bridge()
627
d207c2186519 core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents: 609
diff changeset
103 except exceptions.BridgeInitError:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
104 log.exception("bridge can't be initialised, can't start Libervia Backend")
627
d207c2186519 core, bridge, jp, quick_frontend: SàT stop more gracefully if bridge can't be initialised:
Goffi <goffi@goffi.org>
parents: 609
diff changeset
105 sys.exit(1)
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
106
4266
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
107 # If set, a temporary dir in cache will be used to share files between backend and
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
108 # frontends, useful when they are separated (e.g. when using containers). If
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
109 # unset, a temporary dir will be automatically created in os-relevant location.
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
110 use_local_shared_tmp: bool = C.bool(
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
111 self.memory.config_get("", "use_local_shared_tmp", C.BOOL_FALSE)
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
112 )
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
113 if use_local_shared_tmp:
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
114 self.local_shared_path = self.get_local_path(
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
115 None, C.CACHE_DIR, C.LOCAL_SHARED_DIR
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
116 )
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
117 shutil.rmtree(self.local_shared_path, ignore_errors=True)
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
118 self.local_shared_path.mkdir(0o700, parents=True, exist_ok=True)
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
119 else:
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
120 self.local_shared_path = None
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
121
3989
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
122 defer.ensureDeferred(self._post_init())
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
123
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
124 @property
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
125 def version(self):
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
126 """Return the short version of Libervia"""
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
127 return C.APP_VERSION
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
128
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
129 @property
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
130 def full_version(self):
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
131 """Return the full version of Libervia
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
132
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
133 In developement mode, release name and extra data are returned too
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
134 """
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
135 version = self.version
4079
10b6ad569157 version: use standard Python's `dev0` instead of Libervia specific `D` for dev version
Goffi <goffi@goffi.org>
parents: 4073
diff changeset
136 if version.split(".")[-1] == "dev0":
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
137 # we are in debug version, we add extra data
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
138 try:
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
139 return self._version_cache
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
140 except AttributeError:
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
141 self._version_cache = "{} « {} » ({})".format(
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
142 version, C.APP_RELEASE_NAME, utils.get_repository_data(backend)
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
143 )
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
144 return self._version_cache
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
145 else:
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
146 return version
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
147
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
148 @property
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
149 def bridge_name(self):
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
150 return os.path.splitext(os.path.basename(self.bridge.__file__))[0]
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
151
3989
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
152 async def _post_init(self):
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
153 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
154 bridge_pi = self.bridge.post_init
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
155 except AttributeError:
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
156 pass
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
157 else:
3989
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
158 try:
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
159 await bridge_pi()
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
160 except Exception:
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
161 log.exception("Could not initialize bridge")
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
162 # because init is not complete at this stage, we use callLater
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
163 reactor.callLater(0, self.stop)
f5ba7594cced core (main): log Exception when `bridge_pi` fails
Goffi <goffi@goffi.org>
parents: 3932
diff changeset
164 return
3539
60d3861e5996 bridge (dbus): use Tx DBus for backend part of D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3537
diff changeset
165
4193
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
166 self.bridge.register_method("init_pre_script", lambda: self.init_pre_script)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
167 self.bridge.register_method("ready_get", lambda: self.initialised)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
168 self.bridge.register_method("version_get", lambda: self.full_version)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
169 self.bridge.register_method("features_get", self.features_get)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
170 self.bridge.register_method("profile_name_get", self.memory.get_profile_name)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
171 self.bridge.register_method("profiles_list_get", self.memory.get_profiles_list)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
172 self.bridge.register_method("entity_data_get", self.memory._get_entity_data)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
173 self.bridge.register_method("entities_data_get", self.memory._get_entities_data)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
174 self.bridge.register_method("profile_create", self.memory.create_profile)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
175 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
176 "profile_delete_async", self.memory.profile_delete_async
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
177 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
178 self.bridge.register_method("profile_start_session", self.memory.start_session)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
179 self.bridge.register_method(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
180 "profile_is_session_started", self.memory._is_session_started
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
181 )
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
182 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
183 "profile_set_default", self.memory.profile_set_default
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
184 )
2142
be96beb7ca14 core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
185 self.bridge.register_method("connect", self._connect)
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
186 self.bridge.register_method("disconnect", self.disconnect)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
187 self.bridge.register_method("contact_get", self._contact_get)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
188 self.bridge.register_method("contacts_get", self.contacts_get)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
189 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
190 "contacts_get_from_group", self.contacts_get_from_group
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
191 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
192 self.bridge.register_method("main_resource_get", self.memory._get_main_resource)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
193 self.bridge.register_method(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
194 "presence_statuses_get", self.memory._get_presence_statuses
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
195 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
196 self.bridge.register_method("sub_waiting_get", self.memory.sub_waiting_get)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
197 self.bridge.register_method("message_send", self._message_send)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
198 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
199 "message_encryption_start", self._message_encryption_start
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
200 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
201 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
202 "message_encryption_stop", self._message_encryption_stop
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
203 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
204 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
205 "message_encryption_get", self._message_encryption_get
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
206 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
207 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
208 "encryption_namespace_get", self._encryption_namespace_get
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
209 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
210 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
211 "encryption_plugins_get", self._encryption_plugins_get
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
212 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
213 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
214 "encryption_trust_ui_get", self._encryption_trust_ui_get
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
215 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
216 self.bridge.register_method("config_get", self._get_config)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
217 self.bridge.register_method("param_set", self.param_set)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
218 self.bridge.register_method("param_get_a", self.memory.get_string_param_a)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
219 self.bridge.register_method("private_data_get", self.memory._private_data_get)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
220 self.bridge.register_method("private_data_set", self.memory._private_data_set)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
221 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
222 "private_data_delete", self.memory._private_data_delete
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
223 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
224 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
225 "param_get_a_async", self.memory.async_get_string_param_a
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
226 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
227 self.bridge.register_method(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
228 "params_values_from_category_get_async",
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
229 self.memory._get_params_values_from_category,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
230 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
231 self.bridge.register_method("param_ui_get", self.memory._get_params_ui)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
232 self.bridge.register_method(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
233 "params_categories_get", self.memory.params_categories_get
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
234 )
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
235 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
236 "params_register_app", self.memory.params_register_app
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
237 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
238 self.bridge.register_method("history_get", self.memory._history_get)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
239 self.bridge.register_method("presence_set", self._set_presence)
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
240 self.bridge.register_method("subscription", self.subscription)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
241 self.bridge.register_method("contact_add", self._add_contact)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
242 self.bridge.register_method("contact_update", self._update_contact)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
243 self.bridge.register_method("contact_del", self._del_contact)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
244 self.bridge.register_method("roster_resync", self._roster_resync)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
245 self.bridge.register_method("is_connected", self.is_connected)
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
246 self.bridge.register_method("action_launch", self._action_launch)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
247 self.bridge.register_method("actions_get", self.actions_get)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
248 self.bridge.register_method("progress_get", self._progress_get)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
249 self.bridge.register_method("progress_get_all", self._progress_get_all)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
250 self.bridge.register_method("menus_get", self.get_menus)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
251 self.bridge.register_method("menu_help_get", self.get_menu_help)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
252 self.bridge.register_method("menu_launch", self._launch_menu)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
253 self.bridge.register_method("disco_infos", self.memory.disco._disco_infos)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
254 self.bridge.register_method("disco_items", self.memory.disco._disco_items)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
255 self.bridge.register_method("disco_find_by_features", self._find_by_features)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
256 self.bridge.register_method("params_template_save", self.memory.save_xml)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
257 self.bridge.register_method("params_template_load", self.memory.load_xml)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
258 self.bridge.register_method("session_infos_get", self.get_session_infos)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
259 self.bridge.register_method("devices_infos_get", self._get_devices_infos)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
260 self.bridge.register_method("namespaces_get", self.get_namespaces)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
261 self.bridge.register_method("image_check", self._image_check)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
262 self.bridge.register_method("image_resize", self._image_resize)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
263 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
264 "image_generate_preview", self._image_generate_preview
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
265 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
266 self.bridge.register_method("image_convert", self._image_convert)
4130
02f0adc745c6 core: notifications implementation, first draft:
Goffi <goffi@goffi.org>
parents: 4079
diff changeset
267 self.bridge.register_method("notification_add", self.memory._add_notification)
02f0adc745c6 core: notifications implementation, first draft:
Goffi <goffi@goffi.org>
parents: 4079
diff changeset
268 self.bridge.register_method("notifications_get", self.memory._get_notifications)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
269 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
270 "notification_delete", self.memory._delete_notification
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
271 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
272 self.bridge.register_method(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
273 "notifications_expired_clean", self.memory._notifications_expired_clean
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
274 )
0
goffi@necton2
parents:
diff changeset
275
3537
f9a5b810f14d core (memory/storage): backend storage is now based on SQLAlchemy
Goffi <goffi@goffi.org>
parents: 3480
diff changeset
276 await self.memory.initialise()
2509
d485e9416493 core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents: 2496
diff changeset
277 self.common_cache = cache.Cache(self, None)
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
278 log.info(_("Memory initialised"))
2262
24f5a4d5f195 core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents: 2251
diff changeset
279 try:
24f5a4d5f195 core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents: 2251
diff changeset
280 self._import_plugins()
24f5a4d5f195 core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents: 2251
diff changeset
281 ui_contact_list.ContactList(self)
24f5a4d5f195 core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents: 2251
diff changeset
282 ui_profile_manager.ProfileManager(self)
24f5a4d5f195 core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents: 2251
diff changeset
283 except Exception as e:
3649
4a89342476e9 core (sat_main): fix the "Could not initialize backend" error logging
Goffi <goffi@goffi.org>
parents: 3634
diff changeset
284 log.error(f"Could not initialize backend: {e}")
2262
24f5a4d5f195 core: check uncatched exceptions during plugin import and stdui init, log error and exit if any found
Goffi <goffi@goffi.org>
parents: 2251
diff changeset
285 sys.exit(1)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
286 self._add_base_menus()
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
287
4193
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
288 self.init_pre_script.callback(None)
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
289
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
290 init_script = self.memory.config_get(None, "init_script_path")
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
291 if init_script is not None:
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
292 init_script = cast(str, init_script)
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
293 script_path = Path(init_script)
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
294 if not script_path.exists():
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
295 log.error(f"Init script doesn't exist: {init_script}")
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
296 sys.exit(C.EXIT_BAD_ARG)
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
297 elif not script_path.is_file():
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
298 log.error(f"Init script is not a file: {init_script}")
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
299 sys.exit(C.EXIT_BAD_ARG)
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
300 else:
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
301 log.info(f"Running init script {init_script!r}.")
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
302 try:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
303 await async_process.run(str(init_script), verbose=True)
4193
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
304 except RuntimeError as e:
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
305 log.error(f"Init script failed: {e}")
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
306 self.stopService()
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
307 sys.exit(C.EXIT_ERROR)
730f542e4ad0 core: add new `init_script_path` option:
Goffi <goffi@goffi.org>
parents: 4179
diff changeset
308
1591
0df9c6247474 core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents: 1587
diff changeset
309 self.initialised.callback(None)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
310 log.info(_("Backend is ready"))
0
goffi@necton2
parents:
diff changeset
311
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
312 # profile autoconnection must be done after self.initialised is called because
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
313 # start_session waits for it.
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
314 autoconnect_dict = await self.memory.storage.get_ind_param_values(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
315 category="Connection",
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
316 name="autoconnect_backend",
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
317 )
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
318 profiles_autoconnect = [p for p, v in autoconnect_dict.items() if C.bool(v)]
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
319 if not self.trigger.point("profilesAutoconnect", profiles_autoconnect):
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
320 return
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
321 if profiles_autoconnect:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
322 log.info(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
323 D_(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
324 "Following profiles will be connected automatically: {profiles}"
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
325 ).format(profiles=", ".join(profiles_autoconnect))
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
326 )
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
327 connect_d_list = []
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
328 for profile in profiles_autoconnect:
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
329 connect_d_list.append(defer.ensureDeferred(self.connect(profile)))
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
330
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
331 if connect_d_list:
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
332 results = await defer.DeferredList(connect_d_list)
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
333 for idx, (success, result) in enumerate(results):
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
334 if not success:
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
335 profile = profiles_autoconnect[0]
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
336 log.warning(
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
337 _("Can't autoconnect profile {profile}: {reason}").format(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
338 profile=profile, reason=result
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
339 )
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
340 )
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
341
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
342 def _add_base_menus(self):
2810
c161a294fffd core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents: 2791
diff changeset
343 """Add base menus"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
344 encryption.EncryptionHandler._import_menus(self)
2810
c161a294fffd core: added a base menu allowing to set encryption session or show the trust management UI.
Goffi <goffi@goffi.org>
parents: 2791
diff changeset
345
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
346 def _unimport_plugin(self, plugin_path):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
347 """remove a plugin from sys.modules if it is there"""
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
348 try:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
349 del sys.modules[plugin_path]
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
350 except KeyError:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
351 pass
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
352
0
goffi@necton2
parents:
diff changeset
353 def _import_plugins(self):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
354 """import all plugins found in plugins directory"""
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
355 # FIXME: module imported but cancelled should be deleted
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
356 # TODO: make this more generic and reusable in tools.common
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
357 # FIXME: should use imp
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
358 # TODO: do not import all plugins if no needed: component plugins are not needed
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
359 # if we just use a client, and plugin blacklisting should be possible in
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
360 # libervia.conf
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
361 plugins_path = Path(libervia.backend.plugins.__file__).parent
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
362 plugins_to_import = {} # plugins we still have to import
3370
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
363 for plug_path in plugins_path.glob("plugin_*"):
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
364 if plug_path.is_dir():
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
365 init_path = plug_path / f"__init__.{C.PLUGIN_EXT}"
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
366 if not init_path.exists():
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
367 log.warning(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
368 f"{plug_path} doesn't appear to be a package, can't load it"
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
369 )
3370
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
370 continue
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
371 plug_name = plug_path.name
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
372 elif plug_path.is_file():
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
373 if plug_path.suffix != f".{C.PLUGIN_EXT}":
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
374 continue
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
375 plug_name = plug_path.stem
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
376 else:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
377 log.warning(f"{plug_path} is not a file or a dir, ignoring it")
3370
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
378 continue
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
379 if not plug_name.isidentifier():
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
380 log.warning(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
381 f"{plug_name!r} is not a valid name for a plugin, ignoring it"
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
382 )
3370
2157880ba3b4 core: plugins can now be loaded from a directory:
Goffi <goffi@goffi.org>
parents: 3295
diff changeset
383 continue
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4043
diff changeset
384 plugin_path = f"libervia.backend.plugins.{plug_name}"
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
385 try:
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
386 __import__(plugin_path)
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
387 except exceptions.MissingModule as e:
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
388 self._unimport_plugin(plugin_path)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
389 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
390 "Can't import plugin [{path}] because of an unavailale third party "
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
391 "module:\n{msg}".format(path=plugin_path, msg=e)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
392 )
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
393 continue
2100
fbeeba721954 plugin android: first draft:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
394 except exceptions.CancelError as e:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
395 log.info(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
396 "Plugin [{path}] cancelled its own import: {msg}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
397 path=plugin_path, msg=e
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
398 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
399 )
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
400 self._unimport_plugin(plugin_path)
2100
fbeeba721954 plugin android: first draft:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
401 continue
3040
fee60f17ebac jp: jp asyncio port:
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
402 except Exception:
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
403 import traceback
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
404
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
405 log.error(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
406 _("Can't import plugin [{path}]:\n{error}").format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
407 path=plugin_path, error=traceback.format_exc()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
408 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
409 )
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
410 self._unimport_plugin(plugin_path)
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
411 continue
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
412 mod = sys.modules[plugin_path]
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
413 plugin_info = mod.PLUGIN_INFO
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
414 import_name = plugin_info["import_name"]
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
415
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
416 plugin_modes = plugin_info["modes"] = set(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
417 plugin_info.setdefault("modes", C.PLUG_MODE_DEFAULT)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
418 )
3650
760f3ff05092 core (main): check plugin modes and skip pluggin/log an error if value is invalid
Goffi <goffi@goffi.org>
parents: 3649
diff changeset
419 if not plugin_modes.intersection(C.PLUG_MODE_BOTH):
760f3ff05092 core (main): check plugin modes and skip pluggin/log an error if value is invalid
Goffi <goffi@goffi.org>
parents: 3649
diff changeset
420 log.error(
760f3ff05092 core (main): check plugin modes and skip pluggin/log an error if value is invalid
Goffi <goffi@goffi.org>
parents: 3649
diff changeset
421 f"Can't import plugin at {plugin_path}, invalid {C.PI_MODES!r} "
760f3ff05092 core (main): check plugin modes and skip pluggin/log an error if value is invalid
Goffi <goffi@goffi.org>
parents: 3649
diff changeset
422 f"value: {plugin_modes!r}"
760f3ff05092 core (main): check plugin modes and skip pluggin/log an error if value is invalid
Goffi <goffi@goffi.org>
parents: 3649
diff changeset
423 )
760f3ff05092 core (main): check plugin modes and skip pluggin/log an error if value is invalid
Goffi <goffi@goffi.org>
parents: 3649
diff changeset
424 continue
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
425
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
426 # if the plugin is an entry point, it must work in component mode
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
427 if plugin_info["type"] == C.PLUG_TYPE_ENTRY_POINT:
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
428 # if plugin is an entrypoint, we cache it
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
429 if C.PLUG_MODE_COMPONENT not in plugin_modes:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
430 log.error(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
431 _(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
432 "{type} type must be used with {mode} mode, ignoring plugin"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
433 ).format(type=C.PLUG_TYPE_ENTRY_POINT, mode=C.PLUG_MODE_COMPONENT)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
434 )
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
435 self._unimport_plugin(plugin_path)
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
436 continue
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
437
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
438 if import_name in plugins_to_import:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
439 log.error(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
440 _(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
441 "Name conflict for import name [{import_name}], can't import "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
442 "plugin [{name}]"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
443 ).format(**plugin_info)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
444 )
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
445 continue
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
446 plugins_to_import[import_name] = (plugin_path, mod, plugin_info)
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
447 while True:
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
448 try:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
449 self._import_plugins_from_dict(plugins_to_import)
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
450 except ImportError:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
451 pass
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
452 if not plugins_to_import:
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
453 break
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
454
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
455 def _import_plugins_from_dict(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
456 self, plugins_to_import, import_name=None, optional=False
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
457 ):
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
458 """Recursively import and their dependencies in the right order
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
459
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
460 @param plugins_to_import(dict): key=import_name and values=(plugin_path, module,
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
461 plugin_info)
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
462 @param import_name(unicode, None): name of the plugin to import as found in
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
463 PLUGIN_INFO['import_name']
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
464 @param optional(bool): if False and plugin is not found, an ImportError exception
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
465 is raised
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
466 """
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
467 if import_name in self.plugins:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
468 log.debug("Plugin {} already imported, passing".format(import_name))
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
469 return
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
470 if not import_name:
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
471 import_name, (plugin_path, mod, plugin_info) = plugins_to_import.popitem()
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
472 else:
288
76247af9917c core: added plugin dependency not found import error
Goffi <goffi@goffi.org>
parents: 287
diff changeset
473 if not import_name in plugins_to_import:
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
474 if optional:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
475 log.warning(_("Recommended plugin not found: {}").format(import_name))
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
476 return
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
477 msg = "Dependency not found: {}".format(import_name)
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
478 log.error(msg)
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
479 raise ImportError(msg)
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
480 plugin_path, mod, plugin_info = plugins_to_import.pop(import_name)
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
481 dependencies = plugin_info.setdefault("dependencies", [])
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
482 recommendations = plugin_info.setdefault("recommendations", [])
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
483 for to_import in dependencies + recommendations:
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
484 if to_import not in self.plugins:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
485 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
486 "Recursively import dependency of [%s]: [%s]"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
487 % (import_name, to_import)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
488 )
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
489 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
490 self._import_plugins_from_dict(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
491 plugins_to_import, to_import, to_import not in dependencies
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
492 )
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
493 except ImportError as e:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
494 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
495 _("Can't import plugin {name}: {error}").format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
496 name=plugin_info["name"], error=e
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
497 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
498 )
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
499 if optional:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
500 return
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
501 raise e
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
502 log.info("importing plugin: {}".format(plugin_info["name"]))
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
503 # we instanciate the plugin here
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
504 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
505 self.plugins[import_name] = getattr(mod, plugin_info["main"])(self)
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
506 except Exception as e:
4019
7bf7677b893d core: log a traceback if a plugin can't be loaded
Goffi <goffi@goffi.org>
parents: 3989
diff changeset
507 log.exception(
7bf7677b893d core: log a traceback if a plugin can't be loaded
Goffi <goffi@goffi.org>
parents: 3989
diff changeset
508 f"Can't load plugin \"{plugin_info['name']}\", ignoring it: {e}"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
509 )
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
510 if optional:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
511 return
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
512 raise ImportError("Error during initiation")
2525
e8e1507049b7 core: use C.bool to detect value of "handler" field in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2509
diff changeset
513 if C.bool(plugin_info.get(C.PI_HANDLER, C.BOOL_FALSE)):
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
514 self.plugins[import_name].is_handler = True
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
515 else:
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
516 self.plugins[import_name].is_handler = False
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
517 # we keep metadata as a Class attribute
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
518 self.plugins[import_name]._info = plugin_info
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
519 # TODO: test xmppclient presence and register handler parent
0
goffi@necton2
parents:
diff changeset
520
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
521 def plugins_unload(self):
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
522 """Call unload method on every loaded plugin, if exists
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
523
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
524 @return (D): A deferred which return None when all method have been called
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
525 """
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
526 # TODO: in the futur, it should be possible to hot unload a plugin
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
527 # pluging depending on the unloaded one should be unloaded too
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
528 # for now, just a basic call on plugin.unload is done
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
529 defers_list = []
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
530 for plugin in self.plugins.values():
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
531 try:
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
532 unload = plugin.unload
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
533 except AttributeError:
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
534 continue
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
535 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
536 defers_list.append(utils.as_deferred(unload))
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
537 return defers_list
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
538
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
539 def _connect(self, profile_key, password="", options=None):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
540 profile = self.memory.get_profile_name(profile_key)
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
541 return defer.ensureDeferred(self.connect(profile, password, options))
1591
0df9c6247474 core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents: 1587
diff changeset
542
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
543 async def connect(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
544 self, profile, password="", options=None, max_retries=C.XMPP_MAX_RETRIES
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
545 ):
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
546 """Connect a profile (i.e. connect client.component to XMPP server)
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
547
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
548 Retrieve the individual parameters, authenticate the profile
1030
15f43b54d697 core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents: 1027
diff changeset
549 and initiate the connection to the associated XMPP server.
1725
c1be6363bfab core, plugin misc_account: set XMPP connection max retries to 0 when checking if an external account exists
souliane <souliane@mailoo.org>
parents: 1694
diff changeset
550 @param profile: %(doc_profile)s
3541
888109774673 core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3539
diff changeset
551 @param password (string): the Libervia profile password
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
552 @param options (dict): connection options. Key can be:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
553 -
1725
c1be6363bfab core, plugin misc_account: set XMPP connection max retries to 0 when checking if an external account exists
souliane <souliane@mailoo.org>
parents: 1694
diff changeset
554 @param max_retries (int): max number of connection retries
1591
0df9c6247474 core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents: 1587
diff changeset
555 @return (D(bool)):
0df9c6247474 core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents: 1587
diff changeset
556 - True if the XMPP connection was already established
0df9c6247474 core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents: 1587
diff changeset
557 - False if the XMPP connection has been initiated (it may still fail)
0df9c6247474 core: profile session starting and connection are now separated. Moved profile session starting/authentication to memory module
Goffi <goffi@goffi.org>
parents: 1587
diff changeset
558 @raise exceptions.PasswordError: Profile password is wrong
423
6c20c76abdcc backend: - bridge async D-Bus method now automatically manage callback and errback, we just have to return a deferred
Goffi <goffi@goffi.org>
parents: 420
diff changeset
559 """
2142
be96beb7ca14 core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
560 if options is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
561 options = {}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
562
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
563 await self.memory.start_session(password, profile)
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
564
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
565 if self.is_connected(profile):
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
566 log.info(_("already connected !"))
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
567 return True
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
568
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
569 if self.memory.is_component(profile):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
570 await xmpp.SatXMPPComponent.start_connection(self, profile, max_retries)
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
571 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
572 await xmpp.SatXMPPClient.start_connection(self, profile, max_retries)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
573
3120
0c29155ac68b core: backend autoconnection:
Goffi <goffi@goffi.org>
parents: 3117
diff changeset
574 return False
1019
6a16ec17a458 better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1015
diff changeset
575
346
ca3a041fed30 core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents: 341
diff changeset
576 def disconnect(self, profile_key):
16
0a024d5e0cd0 New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents: 15
diff changeset
577 """disconnect from jabber server"""
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
578 # FIXME: client should not be deleted if only disconnected
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
579 # it shoud be deleted only when session is finished
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
580 if not self.is_connected(profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
581 # is_connected is checked here and not on client
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
582 # because client is deleted when session is ended
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
583 log.info(_("not connected !"))
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
584 return defer.succeed(None)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
585 client = self.get_client(profile_key)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
586 return client.entity_disconnect()
6
5799493fa548 connection and disconnection management
Goffi <goffi@goffi.org>
parents: 5
diff changeset
587
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
588 def features_get(self, profile_key=C.PROF_KEY_NONE):
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
589 """Get available features
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
590
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
591 Return list of activated plugins and plugin specific data
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
592 @param profile_key: %(doc_profile_key)s
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
593 C.PROF_KEY_NONE can be used to have general plugins data (i.e. not profile
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
594 dependent)
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
595 @return (dict)[Deferred]: features data where:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
596 - key is plugin import name, present only for activated plugins
1650
b08b828a87c9 quick frontend (blog): fixed group blog panels (displaying only, sending is not working yet)
Goffi <goffi@goffi.org>
parents: 1644
diff changeset
597 - value is a an other dict, when meaning is specific to each plugin.
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
598 this dict is return by plugin's getFeature method.
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
599 If this method doesn't exists, an empty dict is returned.
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
600 """
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
601 try:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
602 # FIXME: there is no method yet to check profile session
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
603 # as soon as one is implemented, it should be used here
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
604 self.get_client(profile_key)
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
605 except KeyError:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
606 log.warning("Requesting features for a profile outside a session")
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
607 profile_key = C.PROF_KEY_NONE
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
608 except exceptions.ProfileNotSetError:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
609 pass
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
610
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
611 features = []
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
612 for import_name, plugin in self.plugins.items():
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
613 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
614 features_d = utils.as_deferred(plugin.features_get, profile_key)
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
615 except AttributeError:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
616 features_d = defer.succeed({})
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
617 features.append(features_d)
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
618
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
619 d_list = defer.DeferredList(features)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
620
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
621 def build_features(result, import_names):
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
622 assert len(result) == len(import_names)
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
623 ret = {}
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
624 for name, (success, data) in zip(import_names, result):
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
625 if success:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
626 ret[name] = data
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
627 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
628 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
629 "Error while getting features for {name}: {failure}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
630 name=name, failure=data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
631 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
632 )
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
633 ret[name] = {}
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
634 return ret
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
635
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
636 d_list.addCallback(build_features, list(self.plugins.keys()))
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
637 return d_list
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
638
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
639 def _contact_get(self, entity_jid_s, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
640 client = self.get_client(profile_key)
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
641 entity_jid = jid.JID(entity_jid_s)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
642 return defer.ensureDeferred(self.get_contact(client, entity_jid))
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
643
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
644 async def get_contact(self, client, entity_jid):
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
645 # we want to be sure that roster has been received
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
646 await client.roster.got_roster
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
647 item = client.roster.get_item(entity_jid)
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
648 if item is None:
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
649 raise exceptions.NotFound(f"{entity_jid} is not in roster!")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
650 return (client.roster.get_attributes(item), list(item.groups))
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
651
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
652 def contacts_get(self, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
653 client = self.get_client(profile_key)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
654
2765
378188abe941 misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents: 2733
diff changeset
655 def got_roster(__):
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
656 ret = []
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
657 for item in client.roster.get_items(): # we get all items for client's roster
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
658 # and convert them to expected format
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
659 attr = client.roster.get_attributes(item)
2977
06f30ad8e110 core: return full jid in bridge's getContacts:
Goffi <goffi@goffi.org>
parents: 2914
diff changeset
660 # we use full() and not userhost() because jid with resources are allowed
06f30ad8e110 core: return full jid in bridge's getContacts:
Goffi <goffi@goffi.org>
parents: 2914
diff changeset
661 # in roster, even if it's not common.
3541
888109774673 core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3539
diff changeset
662 ret.append([item.entity.full(), attr, list(item.groups)])
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
663 return ret
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
664
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
665 return client.roster.got_roster.addCallback(got_roster)
466
448ce3c9e2ac core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents: 460
diff changeset
666
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
667 def contacts_get_from_group(self, group, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
668 client = self.get_client(profile_key)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
669 return [jid_.full() for jid_ in client.roster.get_jids_from_group(group)]
501
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 489
diff changeset
670
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
671 def purge_entity(self, profile):
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
672 """Remove reference to a profile client/component and purge cache
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
673
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
674 the garbage collector can then free the memory
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
675 """
416
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
676 try:
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
677 del self.profiles[profile]
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
678 except KeyError:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
679 log.error(_("Trying to remove reference to a client not referenced"))
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
680 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
681 self.memory.purge_profile_session(profile)
416
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
682
13
bd9e9997d540 wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents: 12
diff changeset
683 def startService(self):
3110
3fcc99b2d6b7 core (sat_main): avoid double init + log version
Goffi <goffi@goffi.org>
parents: 3102
diff changeset
684 self._init()
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
685 log.info("Salut à toi ô mon frère !")
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
686
13
bd9e9997d540 wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents: 12
diff changeset
687 def stopService(self):
4266
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
688 if self.local_shared_path is not None:
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
689 log.debug("Cleaning shared temporary dir.")
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
690 shutil.rmtree(self.local_shared_path, ignore_errors=True)
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
691 log.info("Salut aussi à Rantanplan.")
9fc3d28bc3f6 core (main): add a mechanism to have a shared temp directory:
Goffi <goffi@goffi.org>
parents: 4231
diff changeset
692
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
693 return self.plugins_unload()
0
goffi@necton2
parents:
diff changeset
694
goffi@necton2
parents:
diff changeset
695 def run(self):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
696 log.debug(_("running app"))
0
goffi@necton2
parents:
diff changeset
697 reactor.run()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
698
0
goffi@necton2
parents:
diff changeset
699 def stop(self):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
700 log.debug(_("stopping app"))
0
goffi@necton2
parents:
diff changeset
701 reactor.stop()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
702
37
a61beb21d16d Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents: 36
diff changeset
703 ## Misc methods ##
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
704
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
705 def get_jid_n_stream(self, profile_key):
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
706 """Convenient method to get jid and stream from profile key
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
707 @return: tuple (jid, xmlstream) from profile, can be None"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
708 # TODO: deprecate this method (get_client is enough)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
709 profile = self.memory.get_profile_name(profile_key)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
710 if not profile or not self.profiles[profile].is_connected():
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
711 return (None, None)
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
712 return (self.profiles[profile].jid, self.profiles[profile].xmlstream)
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
713
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
714 def get_client(self, profile_key: str) -> xmpp.SatXMPPClient:
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
715 """Convenient method to get client from profile key
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
716
3911
8289ac1b34f4 plugin XEP-0384: Fully reworked to adjust to the reworked python-omemo:
Syndace <me@syndace.dev>
parents: 3779
diff changeset
717 @return: the client
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
718 @raise exceptions.ProfileKeyUnknown: the profile or profile key doesn't exist
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
719 @raise exceptions.NotFound: client is not available
2176
61128d260eef plugin account: removed dependency to Prosody/prosodyctl and properly use in-band registration instead
Goffi <goffi@goffi.org>
parents: 2168
diff changeset
720 This happen if profile has not been used yet
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
721 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
722 profile = self.memory.get_profile_name(profile_key)
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
723 if not profile:
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
724 raise exceptions.ProfileKeyUnknown
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
725 try:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
726 return self.profiles[profile]
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
727 except KeyError:
2445
0199c0bd4c60 core: specify profile on NotFound exception
Goffi <goffi@goffi.org>
parents: 2443
diff changeset
728 raise exceptions.NotFound(profile_key)
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
729
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
730 def get_clients(self, profile_key):
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
731 """Convenient method to get list of clients from profile key
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
732
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
733 Manage list through profile_key like C.PROF_KEY_ALL
728
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
734 @param profile_key: %(doc_profile_key)s
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
735 @return: list of clients
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
736 """
2251
83bcd9ec4782 core: fixed profile key detection in getClients + raise DataError on empty profile
Goffi <goffi@goffi.org>
parents: 2176
diff changeset
737 if not profile_key:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
738 raise exceptions.DataError(_("profile_key must not be empty"))
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
739 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
740 profile = self.memory.get_profile_name(profile_key, True)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
741 except exceptions.ProfileUnknownError:
728
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
742 return []
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
743 if profile == C.PROF_KEY_ALL:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
744 return list(self.profiles.values())
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
745 elif profile[0] == "@": #  only profile keys can start with "@"
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
746 raise exceptions.ProfileKeyUnknown
728
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
747 return [self.profiles[profile]]
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
748
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
749 def _get_config(self, section, name):
1234
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
750 """Get the main configuration option
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
751
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
752 @param section: section of the config file (None or '' for DEFAULT)
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
753 @param name: name of the option
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
754 @return: unicode representation of the option
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
755 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
756 return str(self.memory.config_get(section, name, ""))
1234
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
757
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
758 def log_errback(self, failure_, msg=_("Unexpected error: {failure_}")):
2990
6959c71ab8bf plugin XEP-0045: log "failure" on configure error
Goffi <goffi@goffi.org>
parents: 2977
diff changeset
759 """Generic errback logging
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
760
2990
6959c71ab8bf plugin XEP-0045: log "failure" on configure error
Goffi <goffi@goffi.org>
parents: 2977
diff changeset
761 @param msg(unicode): error message ("failure_" key will be use for format)
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
762 can be used as last errback to show unexpected error
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
763 """
2990
6959c71ab8bf plugin XEP-0045: log "failure" on configure error
Goffi <goffi@goffi.org>
parents: 2977
diff changeset
764 log.error(msg.format(failure_=failure_))
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
765 return failure_
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
766
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
767 #  namespaces
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
768
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
769 def register_namespace(self, short_name, namespace):
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
770 """associate a namespace to a short name"""
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
771 if short_name in self.ns_map:
4231
e11b13418ba6 plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents: 4193
diff changeset
772 raise exceptions.ConflictError(
e11b13418ba6 plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents: 4193
diff changeset
773 f"This short name {short_name!r} is already used."
e11b13418ba6 plugin XEP-0353, XEP-0234, jingle: WebRTC data channel signaling implementation:
Goffi <goffi@goffi.org>
parents: 4193
diff changeset
774 )
3117
385fdd684f87 core: added a debug log when a namespace is registered
Goffi <goffi@goffi.org>
parents: 3110
diff changeset
775 log.debug(f"registering namespace {short_name} => {namespace}")
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
776 self.ns_map[short_name] = namespace
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
777
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
778 def get_namespaces(self):
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
779 return self.ns_map
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
780
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
781 def get_namespace(self, short_name):
2914
25f14fbd364e core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents: 2892
diff changeset
782 try:
25f14fbd364e core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents: 2892
diff changeset
783 return self.ns_map[short_name]
25f14fbd364e core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents: 2892
diff changeset
784 except KeyError:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
785 raise exceptions.NotFound(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
786 "namespace {short_name} is not registered".format(short_name=short_name)
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
787 )
2914
25f14fbd364e core: added getNamespace method to retrieve a namespace from short name.
Goffi <goffi@goffi.org>
parents: 2892
diff changeset
788
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
789 def get_session_infos(self, profile_key):
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
790 """compile interesting data on current profile session"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
791 client = self.get_client(profile_key)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
792 data = {"jid": client.jid.full(), "started": str(int(client.started))}
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
793 return defer.succeed(data)
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
794
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
795 def _get_devices_infos(self, bare_jid, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
796 client = self.get_client(profile_key)
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
797 if not bare_jid:
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
798 bare_jid = None
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
799 d = defer.ensureDeferred(self.get_devices_infos(client, bare_jid))
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
800 d.addCallback(lambda data: data_format.serialise(data))
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
801 return d
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
802
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
803 async def get_devices_infos(self, client, bare_jid=None):
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
804 """compile data on an entity devices
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
805
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
806 @param bare_jid(jid.JID, None): bare jid of entity to check
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
807 None to use client own jid
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
808 @return (list[dict]): list of data, one item per resource.
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
809 Following keys can be set:
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
810 - resource(str): resource name
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
811 """
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
812 own_jid = client.jid.userhostJID()
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
813 if bare_jid is None:
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
814 bare_jid = own_jid
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
815 else:
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
816 bare_jid = jid.JID(bare_jid)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
817 resources = self.memory.get_all_resources(client, bare_jid)
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
818 if bare_jid == own_jid:
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
819 # our own jid is not stored in memory's cache
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
820 resources.add(client.jid.resource)
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
821 ret_data = []
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
822 for resource in resources:
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
823 res_jid = copy.copy(bare_jid)
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
824 res_jid.resource = resource
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
825 cache_data = self.memory.entity_data_get(client, res_jid)
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
826 res_data = {
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
827 "resource": resource,
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
828 }
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
829 try:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
830 presence = cache_data["presence"]
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
831 except KeyError:
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
832 pass
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
833 else:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
834 res_data["presence"] = {
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
835 "show": presence.show,
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
836 "priority": presence.priority,
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
837 "statuses": presence.statuses,
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
838 }
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
839
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
840 disco = await self.get_disco_infos(client, res_jid)
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
841
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
842 for (category, type_), name in disco.identities.items():
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
843 identities = res_data.setdefault("identities", [])
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
844 identities.append(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
845 {
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
846 "name": name,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
847 "category": category,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
848 "type": type_,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
849 }
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
850 )
3206
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
851
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
852 ret_data.append(res_data)
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
853
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
854 return ret_data
ae09989e9feb core, bridge: new `devicesInfosGet` method to get infos on known devices of an entity
Goffi <goffi@goffi.org>
parents: 3201
diff changeset
855
3066
2cc2f65379f7 core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents: 3040
diff changeset
856 # images
2cc2f65379f7 core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents: 3040
diff changeset
857
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
858 def _image_check(self, path):
3220
4fbea7f1e012 tools (images): methods renaming
Goffi <goffi@goffi.org>
parents: 3206
diff changeset
859 report = image.check(self, path)
3066
2cc2f65379f7 core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents: 3040
diff changeset
860 return data_format.serialise(report)
2cc2f65379f7 core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents: 3040
diff changeset
861
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
862 def _image_resize(self, path, width, height):
3220
4fbea7f1e012 tools (images): methods renaming
Goffi <goffi@goffi.org>
parents: 3206
diff changeset
863 d = image.resize(path, (width, height))
3066
2cc2f65379f7 core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents: 3040
diff changeset
864 d.addCallback(lambda new_image_path: str(new_image_path))
2cc2f65379f7 core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents: 3040
diff changeset
865 return d
2cc2f65379f7 core: added imageCheck and imageResize methods:
Goffi <goffi@goffi.org>
parents: 3040
diff changeset
866
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
867 def _image_generate_preview(self, path, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
868 client = self.get_client(profile_key)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
869 d = defer.ensureDeferred(self.image_generate_preview(client, Path(path)))
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
870 d.addCallback(lambda preview_path: str(preview_path))
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
871 return d
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
872
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
873 async def image_generate_preview(self, client, path):
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
874 """Helper method to generate in cache a preview of an image
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
875
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
876 @param path(Path): path to the image
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
877 @return (Path): path to the generated preview
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
878 """
3220
4fbea7f1e012 tools (images): methods renaming
Goffi <goffi@goffi.org>
parents: 3206
diff changeset
879 report = image.check(self, path, max_size=(300, 300))
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
880
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
881 if not report["too_large"]:
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
882 # in the unlikely case that image is already smaller than a preview
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
883 preview_path = path
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
884 else:
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
885 # we use hash as id, to re-use potentially existing preview
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
886 path_hash = hashlib.sha256(str(path).encode()).hexdigest()
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
887 uid = f"{path.stem}_{path_hash}_preview"
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
888 filename = f"{uid}{path.suffix.lower()}"
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
889 metadata = client.cache.get_metadata(uid=uid)
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
890 if metadata is not None:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
891 preview_path = metadata["path"]
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
892 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
893 with client.cache.cache_data(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
894 source="HOST_PREVIEW", uid=uid, filename=filename
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
895 ) as cache_f:
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
896
3220
4fbea7f1e012 tools (images): methods renaming
Goffi <goffi@goffi.org>
parents: 3206
diff changeset
897 preview_path = await image.resize(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
898 path, new_size=report["recommended_size"], dest=cache_f
3201
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
899 )
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
900
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
901 return preview_path
439e2f88c3a9 core, bridge: new `imageGeneratePreview` helped method to generate a thumbnail
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
902
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
903 def _image_convert(self, source, dest, extra, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
904 client = self.get_client(profile_key) if profile_key else None
3259
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
905 source = Path(source)
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
906 dest = None if not dest else Path(dest)
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
907 extra = data_format.deserialise(extra)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
908 d = defer.ensureDeferred(self.image_convert(client, source, dest, extra))
3259
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
909 d.addCallback(lambda dest_path: str(dest_path))
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
910 return d
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
911
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
912 async def image_convert(self, client, source, dest=None, extra=None):
3259
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
913 """Helper method to convert an image from one format to an other
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
914
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
915 @param client(SatClient, None): client to use for caching
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
916 this parameter is only used if dest is None
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
917 if client is None, common cache will be used insted of profile cache
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
918 @param source(Path): path to the image to convert
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
919 @param dest(None, Path, file): where to save the converted file
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
920 - None: use a cache file (uid generated from hash of source)
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
921 file will be converted to PNG
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
922 - Path: path to the file to create/overwrite
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
923 - file: a file object which must be opened for writing in binary mode
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
924 @param extra(dict, None): conversion options
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
925 see [image.convert] for details
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
926 @return (Path): path to the converted image
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
927 @raise ValueError: an issue happened with source of dest
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
928 """
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
929 if not source.is_file:
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
930 raise ValueError(f"Source file {source} doesn't exist!")
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
931 if dest is None:
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
932 # we use hash as id, to re-use potentially existing conversion
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
933 path_hash = hashlib.sha256(str(source).encode()).hexdigest()
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
934 uid = f"{source.stem}_{path_hash}_convert_png"
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
935 filename = f"{uid}.png"
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
936 if client is None:
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
937 cache = self.common_cache
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
938 else:
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
939 cache = client.cache
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
940 metadata = cache.get_metadata(uid=uid)
3259
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
941 if metadata is not None:
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
942 # there is already a conversion for this image in cache
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
943 return metadata["path"]
3259
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
944 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
945 with cache.cache_data(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
946 source="HOST_IMAGE_CONVERT", uid=uid, filename=filename
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
947 ) as cache_f:
3259
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
948
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
949 converted_path = await image.convert(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
950 source, dest=cache_f, extra=extra
3259
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
951 )
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
952 return converted_path
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
953 else:
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
954 return await image.convert(source, dest, extra)
f300d78f08f3 core: image convertion + SVG support:
Goffi <goffi@goffi.org>
parents: 3254
diff changeset
955
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
956 # local dirs
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
957
3932
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
958 def get_local_path(
3285
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
959 self,
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
960 client: Optional[SatXMPPEntity],
3285
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
961 dir_name: str,
3932
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
962 *extra_path: str,
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
963 component: bool = False,
3285
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
964 ) -> Path:
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
965 """Retrieve path for local data
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
966
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
967 if path doesn't exist, it will be created
3932
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
968 @param client: client instance
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
969 if not none, client.profile will be used as last path element
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
970 @param dir_name: name of the main path directory
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
971 @param *extra_path: extra path element(s) to use
3932
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
972 @param component: if True, path will be prefixed with C.COMPONENTS_DIR
3285
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
973 @return: path
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
974 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
975 local_dir = self.memory.config_get("", "local_dir")
3932
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
976 if not local_dir:
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
977 raise exceptions.InternalError("local_dir must be set")
4179
3b95704ab777 core: fix path in `get_local_path`:
Goffi <goffi@goffi.org>
parents: 4130
diff changeset
978 path_elts = [local_dir]
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
979 if component:
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
980 path_elts.append(C.COMPONENTS_DIR)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
981 path_elts.append(regex.path_escape(dir_name))
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
982 if extra_path:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
983 path_elts.extend([regex.path_escape(p) for p in extra_path])
3932
7af29260ecb8 core: fix and renamed getLocalPath -> get_local_path:
Goffi <goffi@goffi.org>
parents: 3912
diff changeset
984 if client is not None:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
985 path_elts.append(regex.path_escape(client.profile))
3285
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
986 local_path = Path(*path_elts)
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
987 local_path.mkdir(0o700, parents=True, exist_ok=True)
4240b44842bb core: getLocalPath now returns a Path
Goffi <goffi@goffi.org>
parents: 3259
diff changeset
988 return local_path
2496
769e8d9d2438 core: new getLocalPath method to retrieve a path in SàT local dir, which may be specific to a profile or component
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
989
16
0a024d5e0cd0 New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents: 15
diff changeset
990 ## Client management ##
0
goffi@necton2
parents:
diff changeset
991
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
992 def param_set(self, name, value, category, security_limit, profile_key):
0
goffi@necton2
parents:
diff changeset
993 """set wanted paramater and notice observers"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
994 self.memory.param_set(name, value, category, security_limit, profile_key)
0
goffi@necton2
parents:
diff changeset
995
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
996 def is_connected(self, profile_key):
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
997 """Return connection status of profile
3125
c3ce8c997fdf plugin android: reconnect profiles with autoconnect if network is activated:
Goffi <goffi@goffi.org>
parents: 3123
diff changeset
998
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
999 @param profile_key: key_word or profile name to determine profile name
1030
15f43b54d697 core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents: 1027
diff changeset
1000 @return: True if connected
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
1001 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1002 profile = self.memory.get_profile_name(profile_key)
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
1003 if not profile:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1004 log.error(_("asking connection status for a non-existant profile"))
1030
15f43b54d697 core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents: 1027
diff changeset
1005 raise exceptions.ProfileUnknownError(profile_key)
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
1006 if profile not in self.profiles:
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
1007 return False
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1008 return self.profiles[profile].is_connected()
0
goffi@necton2
parents:
diff changeset
1009
2646
712cb4ff3e13 core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents: 2645
diff changeset
1010 ## Encryption ##
712cb4ff3e13 core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents: 2645
diff changeset
1011
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1012 def register_encryption_plugin(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1013 return encryption.EncryptionHandler.register_plugin(*args, **kwargs)
2646
712cb4ff3e13 core: new EncryptionHandler class which manage encrypted session as a core feature:
Goffi <goffi@goffi.org>
parents: 2645
diff changeset
1014
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1015 def _message_encryption_start(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1016 self, to_jid_s, namespace, replace=False, profile_key=C.PROF_KEY_NONE
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1017 ):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1018 client = self.get_client(profile_key)
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1019 to_jid = jid.JID(to_jid_s)
3226
2f406b762788 core (memory/encryption): encryption session are now restored on client connection
Goffi <goffi@goffi.org>
parents: 3220
diff changeset
1020 return defer.ensureDeferred(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1021 client.encryption.start(to_jid, namespace or None, replace)
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1022 )
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1023
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1024 def _message_encryption_stop(self, to_jid_s, profile_key=C.PROF_KEY_NONE):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1025 client = self.get_client(profile_key)
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1026 to_jid = jid.JID(to_jid_s)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1027 return defer.ensureDeferred(client.encryption.stop(to_jid))
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1028
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1029 def _message_encryption_get(self, to_jid_s, profile_key=C.PROF_KEY_NONE):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1030 client = self.get_client(profile_key)
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1031 to_jid = jid.JID(to_jid_s)
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1032 session_data = client.encryption.getSession(to_jid)
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1033 return client.encryption.get_bridge_data(session_data)
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1034
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1035 def _encryption_namespace_get(self, name):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1036 return encryption.EncryptionHandler.get_ns_from_name(name)
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1037
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1038 def _encryption_plugins_get(self):
2658
4e130cc9bfc0 core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents: 2646
diff changeset
1039 plugins = encryption.EncryptionHandler.getPlugins()
4e130cc9bfc0 core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents: 2646
diff changeset
1040 ret = []
4e130cc9bfc0 core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents: 2646
diff changeset
1041 for p in plugins:
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1042 ret.append(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1043 {
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1044 "name": p.name,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1045 "namespace": p.namespace,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1046 "priority": p.priority,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1047 "directed": p.directed,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1048 }
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1049 )
3102
7574f795bd1e core, bridge: encryptionPluginsGet now returns a serialised list + added "directed" in metadata
Goffi <goffi@goffi.org>
parents: 3088
diff changeset
1050 return data_format.serialise(ret)
2658
4e130cc9bfc0 core (memore/encryption): new methods and checks:
Goffi <goffi@goffi.org>
parents: 2646
diff changeset
1051
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1052 def _encryption_trust_ui_get(self, to_jid_s, namespace, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1053 client = self.get_client(profile_key)
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1054 to_jid = jid.JID(to_jid_s)
3237
b0c57c9a4bd8 plugin XEP-0384: OMEMO trust policy:
Goffi <goffi@goffi.org>
parents: 3226
diff changeset
1055 d = defer.ensureDeferred(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1056 client.encryption.get_trust_ui(to_jid, namespace=namespace or None)
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1057 )
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1058 d.addCallback(lambda xmlui: xmlui.toXml())
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1059 return d
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1060
1052
e88bff4c8b77 core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents: 1043
diff changeset
1061 ## XMPP methods ##
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
1062
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1063 def _message_send(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1064 self,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1065 to_jid_s,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1066 message,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1067 subject=None,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1068 mess_type="auto",
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1069 extra_s="",
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1070 profile_key=C.PROF_KEY_NONE,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1071 ):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1072 client = self.get_client(profile_key)
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
1073 to_jid = jid.JID(to_jid_s)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1074 return client.sendMessage(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1075 to_jid, message, subject, mess_type, data_format.deserialise(extra_s)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1076 )
16
0a024d5e0cd0 New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents: 15
diff changeset
1077
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1078 def _set_presence(self, to="", show="", statuses=None, profile_key=C.PROF_KEY_NONE):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1079 return self.presence_set(jid.JID(to) if to else None, show, statuses, profile_key)
807
be4c5e24dab9 plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents: 806
diff changeset
1080
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1081 def presence_set(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1082 self, to_jid=None, show="", statuses=None, profile_key=C.PROF_KEY_NONE
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1083 ):
0
goffi@necton2
parents:
diff changeset
1084 """Send our presence information"""
727
c1cd6c0c2c38 core: fixed statuses parameter in setPresence, and using @NONE@ instead of @DEFAULT@ for default profile_key
Goffi <goffi@goffi.org>
parents: 700
diff changeset
1085 if statuses is None:
c1cd6c0c2c38 core: fixed statuses parameter in setPresence, and using @NONE@ instead of @DEFAULT@ for default profile_key
Goffi <goffi@goffi.org>
parents: 700
diff changeset
1086 statuses = {}
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1087 profile = self.memory.get_profile_name(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1088 assert profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1089 priority = int(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1090 self.memory.param_get_a("Priority", "Connection", profile_key=profile)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1091 )
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
1092 self.profiles[profile].presence.available(to_jid, show, statuses, priority)
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1093 # XXX: FIXME: temporary fix to work around openfire 3.7.0 bug (presence is not
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1094 # broadcasted to generating resource)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1095 if "" in statuses:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1096 statuses[C.PRESENCE_STATUSES_DEFAULT] = statuses.pop("")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1097 self.bridge.presence_update(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1098 self.profiles[profile].jid.full(), show, int(priority), statuses, profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1099 )
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
1100
346
ca3a041fed30 core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents: 341
diff changeset
1101 def subscription(self, subs_type, raw_jid, profile_key):
187
12544ea2951f Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents: 155
diff changeset
1102 """Called to manage subscription
12544ea2951f Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents: 155
diff changeset
1103 @param subs_type: subsciption type (cf RFC 3921)
12544ea2951f Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents: 155
diff changeset
1104 @param raw_jid: unicode entity's jid
12544ea2951f Core: removed addItem for roster list, according to http://wokkel.ik.nu/ticket/56
Goffi <goffi@goffi.org>
parents: 155
diff changeset
1105 @param profile_key: profile"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1106 profile = self.memory.get_profile_name(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1107 assert profile
50
daa1f01a5332 SàT improvement:
Goffi <goffi@goffi.org>
parents: 41
diff changeset
1108 to_jid = jid.JID(raw_jid)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1109 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1110 _("subsciption request [%(subs_type)s] for %(jid)s")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1111 % {"subs_type": subs_type, "jid": to_jid.full()}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1112 )
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
1113 if subs_type == "subscribe":
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
1114 self.profiles[profile].presence.subscribe(to_jid)
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
1115 elif subs_type == "subscribed":
89
23caf1051099 multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents: 79
diff changeset
1116 self.profiles[profile].presence.subscribed(to_jid)
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
1117 elif subs_type == "unsubscribe":
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
1118 self.profiles[profile].presence.unsubscribe(to_jid)
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
1119 elif subs_type == "unsubscribed":
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
1120 self.profiles[profile].presence.unsubscribed(to_jid)
0
goffi@necton2
parents:
diff changeset
1121
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1122 def _add_contact(self, to_jid_s, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1123 return self.contact_add(jid.JID(to_jid_s), profile_key)
807
be4c5e24dab9 plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents: 806
diff changeset
1124
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1125 def contact_add(self, to_jid, profile_key):
0
goffi@necton2
parents:
diff changeset
1126 """Add a contact in roster list"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1127 profile = self.memory.get_profile_name(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1128 assert profile
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1129 # presence is sufficient, as a roster push will be sent according to
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1130 # RFC 6121 §3.1.2
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
1131 self.profiles[profile].presence.subscribe(to_jid)
0
goffi@necton2
parents:
diff changeset
1132
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1133 def _update_contact(self, to_jid_s, name, groups, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1134 client = self.get_client(profile_key)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1135 return self.contact_update(client, jid.JID(to_jid_s), name, groups)
807
be4c5e24dab9 plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents: 806
diff changeset
1136
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1137 def contact_update(self, client, to_jid, name, groups):
346
ca3a041fed30 core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents: 341
diff changeset
1138 """update a contact in roster list"""
ca3a041fed30 core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents: 341
diff changeset
1139 roster_item = RosterItem(to_jid)
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1140 roster_item.name = name or ""
346
ca3a041fed30 core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents: 341
diff changeset
1141 roster_item.groups = set(groups)
3254
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
1142 if not self.trigger.point("roster_update", client, roster_item):
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
1143 return
6cf4bd6972c2 core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents: 3237
diff changeset
1144 return client.roster.setItem(roster_item)
346
ca3a041fed30 core: fixed several subscription scheme issues + removed most of profile_key default value in core.sat_main and core.xmmp (source of bugs) + contact update
Goffi <goffi@goffi.org>
parents: 341
diff changeset
1145
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1146 def _del_contact(self, to_jid_s, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1147 return self.contact_del(jid.JID(to_jid_s), profile_key)
807
be4c5e24dab9 plugin XEP-0077, plugin XEP-0100, frontends: gateways have been entirely implemented in backend using the new refactored XMLUI and AdvancedListContainer. The now useless code has been removed from frontends.
Goffi <goffi@goffi.org>
parents: 806
diff changeset
1148
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1149 def contact_del(self, to_jid, profile_key):
0
goffi@necton2
parents:
diff changeset
1150 """Remove contact from roster list"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1151 profile = self.memory.get_profile_name(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1152 assert profile
1355
33a21f06551d core: fixes bug introduced by 1262 (f8a8434dbac7) in SAT.delContact
souliane <souliane@mailoo.org>
parents: 1325
diff changeset
1153 self.profiles[profile].presence.unsubscribe(to_jid) # is not asynchronous
33a21f06551d core: fixes bug introduced by 1262 (f8a8434dbac7) in SAT.delContact
souliane <souliane@mailoo.org>
parents: 1325
diff changeset
1154 return self.profiles[profile].roster.removeItem(to_jid)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents: 728
diff changeset
1155
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1156 def _roster_resync(self, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1157 client = self.get_client(profile_key)
2892
82b781c46841 core: added a rosterResync method to bridge:
Goffi <goffi@goffi.org>
parents: 2886
diff changeset
1158 return client.roster.resync()
82b781c46841 core: added a rosterResync method to bridge:
Goffi <goffi@goffi.org>
parents: 2886
diff changeset
1159
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
1160 ## Discovery ##
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
1161 # discovery methods are shortcuts to self.memory.disco
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
1162 # the main difference with client.disco is that self.memory.disco manage cache
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents: 728
diff changeset
1163
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
1164 def hasFeature(self, *args, **kwargs):
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
1165 return self.memory.disco.hasFeature(*args, **kwargs)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents: 728
diff changeset
1166
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1167 def check_feature(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1168 return self.memory.disco.check_feature(*args, **kwargs)
951
027a054c6dda core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents: 949
diff changeset
1169
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1170 def check_features(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1171 return self.memory.disco.check_features(*args, **kwargs)
1491
704ca56f5ca9 core (disco): added checkFeatures to check several features at once + identities are now managed with a tuple in findFeaturesSet and checkFeatures
Goffi <goffi@goffi.org>
parents: 1482
diff changeset
1172
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1173 def has_identity(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1174 return self.memory.disco.has_identity(*args, **kwargs)
3718
16e36f0dd1cb memory (disco), core (main): new `hasIdentity` method
Goffi <goffi@goffi.org>
parents: 3661
diff changeset
1175
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1176 def get_disco_infos(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1177 return self.memory.disco.get_infos(*args, **kwargs)
0
goffi@necton2
parents:
diff changeset
1178
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
1179 def getDiscoItems(self, *args, **kwargs):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1180 return self.memory.disco.get_items(*args, **kwargs)
0
goffi@necton2
parents:
diff changeset
1181
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1182 def find_service_entity(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1183 return self.memory.disco.find_service_entity(*args, **kwargs)
2431
a9fac72825a2 memory (disco): added findServiceEntity helper method to get first service of a kind
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
1184
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1185 def find_service_entities(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1186 return self.memory.disco.find_service_entities(*args, **kwargs)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
1187
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1188 def find_features_set(self, *args, **kwargs):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1189 return self.memory.disco.find_features_set(*args, **kwargs)
397
ccfd69d090c3 core: workaround to avoid a bug in item detection on jabber.fr. Need more investigation with jabber.fr admins (may be a bug in ejabberd)
Goffi <goffi@goffi.org>
parents: 391
diff changeset
1190
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1191 def _find_by_features(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1192 self,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1193 namespaces,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1194 identities,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1195 bare_jids,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1196 service,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1197 roster,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1198 own_jid,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1199 local_device,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1200 profile_key,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1201 ):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1202 client = self.get_client(profile_key)
3541
888109774673 core: various changes and fixes to work with new storage and D-Bus bridge:
Goffi <goffi@goffi.org>
parents: 3539
diff changeset
1203 identities = [tuple(i) for i in identities] if identities else None
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1204 return defer.ensureDeferred(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1205 self.find_by_features(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1206 client,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1207 namespaces,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1208 identities,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1209 bare_jids,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1210 service,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1211 roster,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1212 own_jid,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1213 local_device,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1214 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1215 )
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1216
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1217 async def find_by_features(
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1218 self,
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1219 client: SatXMPPEntity,
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1220 namespaces: List[str],
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1221 identities: Optional[List[Tuple[str, str]]] = None,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1222 bare_jids: bool = False,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1223 service: bool = True,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1224 roster: bool = True,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1225 own_jid: bool = True,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1226 local_device: bool = False,
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1227 ) -> Tuple[
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1228 Dict[jid.JID, Tuple[str, str, str]],
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1229 Dict[jid.JID, Tuple[str, str, str]],
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1230 Dict[jid.JID, Tuple[str, str, str]],
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1231 ]:
3140
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1232 """Retrieve all services or contacts managing a set a features
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1233
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1234 @param namespaces: features which must be handled
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1235 @param identities: if not None or empty,
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1236 only keep those identities
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1237 tuple must be (category, type)
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1238 @param bare_jids: retrieve only bare_jids if True
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1239 if False, retrieve full jid of connected devices
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1240 @param service: if True return service from our server
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1241 @param roster: if True, return entities in roster
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1242 full jid of all matching resources available will be returned
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1243 @param own_jid: if True, return profile's jid resources
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1244 @param local_device: if True, return profile's jid local resource
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1245 (i.e. client.jid)
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1246 @return: found entities in a tuple with:
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1247 - service entities
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1248 - own entities
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1249 - roster entities
3295
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1250 Each element is a dict mapping from jid to a tuple with category, type and
9bc3fca290ab core: findByFeatures type hints
Goffi <goffi@goffi.org>
parents: 3285
diff changeset
1251 name of the entity
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1252 """
2666
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1253 assert isinstance(namespaces, list)
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1254 if not identities:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1255 identities = None
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1256 if not namespaces and not identities:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1257 raise exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1258 "at least one namespace or one identity must be set"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1259 )
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1260 found_service = {}
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1261 found_own = {}
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1262 found_roster = {}
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1263 if service:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1264 services_jids = await self.find_features_set(client, namespaces)
2791
034c88e9cd93 core (findByFeatures): fixed services discovery
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
1265 services_jids = list(services_jids) # we need a list to map results below
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1266 services_infos = await defer.DeferredList(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1267 [
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1268 self.get_disco_infos(client, service_jid)
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1269 for service_jid in services_jids
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1270 ]
2767
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1271 )
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1272
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1273 for idx, (success, infos) in enumerate(services_infos):
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1274 service_jid = services_jids[idx]
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1275 if not success:
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1276 log.warning(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1277 _(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1278 "Can't find features for service {service_jid}, ignoring"
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1279 ).format(service_jid=service_jid.full())
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1280 )
2767
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1281 continue
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1282 if identities is not None and not set(infos.identities.keys()).issuperset(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1283 identities
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1284 ):
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1285 continue
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1286 found_identities = [
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1287 (cat, type_, name or "")
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1288 for (cat, type_), name in infos.identities.items()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1289 ]
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1290 found_service[service_jid.full()] = found_identities
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1291
2666
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1292 to_find = []
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1293 if own_jid:
2666
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1294 to_find.append((found_own, [client.jid.userhostJID()]))
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1295 if roster:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1296 to_find.append((found_roster, client.roster.get_jids()))
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1297
3140
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1298 for found, jids in to_find:
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1299 full_jids = []
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1300 disco_defers = []
2767
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1301
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1302 for jid_ in jids:
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1303 if jid_.resource:
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1304 if bare_jids:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1305 continue
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1306 resources = [jid_.resource]
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1307 else:
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1308 if bare_jids:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1309 resources = [None]
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1310 else:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1311 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1312 resources = self.memory.get_available_resources(client, jid_)
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1313 except exceptions.UnknownEntityError:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
1314 continue
2666
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1315 if not resources and jid_ == client.jid.userhostJID() and own_jid:
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1316 # small hack to avoid missing our own resource when this
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1317 # method is called at the very beginning of the session
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1318 # and our presence has not been received yet
bc122b68eacd core: findByFeatures fixes
Goffi <goffi@goffi.org>
parents: 2658
diff changeset
1319 resources = [client.jid.resource]
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1320 for resource in resources:
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1321 full_jid = jid.JID(tuple=(jid_.user, jid_.host, resource))
2595
973d4551ffae core: added local_device argument to discoFindByFeatures
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1322 if full_jid == client.jid and not local_device:
973d4551ffae core: added local_device argument to discoFindByFeatures
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1323 continue
2767
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1324 full_jids.append(full_jid)
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1325
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1326 disco_defers.append(self.get_disco_infos(client, full_jid))
2767
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1327
3140
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1328 d_list = defer.DeferredList(disco_defers)
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1329 # XXX: 10 seconds may be too low for slow connections (e.g. mobiles)
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1330 # but for discovery, that's also the time the user will wait the first time
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1331 # before seing the page, if something goes wrong.
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1332 d_list.addTimeout(10, reactor)
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1333 infos_data = await d_list
2767
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1334
3140
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1335 for idx, (success, infos) in enumerate(infos_data):
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1336 full_jid = full_jids[idx]
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1337 if not success:
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1338 log.warning(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1339 _("Can't retrieve {full_jid} infos, ignoring").format(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1340 full_jid=full_jid.full()
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1341 )
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1342 )
2767
a97c43dc4924 core: findByFeatures speed improvments:
Goffi <goffi@goffi.org>
parents: 2765
diff changeset
1343 continue
3140
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1344 if infos.features.issuperset(namespaces):
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1345 if identities is not None and not set(
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1346 infos.identities.keys()
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1347 ).issuperset(identities):
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1348 continue
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1349 found_identities = [
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1350 (cat, type_, name or "")
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1351 for (cat, type_), name in infos.identities.items()
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1352 ]
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1353 found[full_jid.full()] = found_identities
2534
7da86e1633a5 core: new discoFindFeatures method which return all server services/roster entities implementing a set of features.
Goffi <goffi@goffi.org>
parents: 2525
diff changeset
1354
3140
46a6251713d3 core: fixed `findByFeatures`:
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
1355 return (found_service, found_own, found_roster)
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents: 728
diff changeset
1356
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
1357 ## Generic HMI ##
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
1358
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1359 def _kill_action(self, keep_id, client):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1360 log.debug("Killing action {} for timeout".format(keep_id))
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1361 client.actions[keep_id]
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1362
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1363 def action_new(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1364 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1365 action_data,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1366 security_limit=C.NO_SECURITY_LIMIT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1367 keep_id=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1368 profile=C.PROF_KEY_NONE,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1369 ):
4043
9641ce286e07 core (main): if `keep_id` is set in `action_new`, use it as `action_id`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
1370 """Shortcut to bridge.action_new which generate an id and keep for retrieval
1467
ceba6fd77739 core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents: 1417
diff changeset
1371
ceba6fd77739 core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents: 1417
diff changeset
1372 @param action_data(dict): action data (see bridge documentation)
1599
e2ed8009e66e backend, bridge, frontends: actionNew has now a security_limit argument + added some docstring to explain data argument
Goffi <goffi@goffi.org>
parents: 1598
diff changeset
1373 @param security_limit: %(doc_security_limit)s
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1374 @param keep_id(None, unicode): if not None, used to keep action for differed
4043
9641ce286e07 core (main): if `keep_id` is set in `action_new`, use it as `action_id`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
1375 retrieval. The value will be used as callback_id, be sure to use an unique
9641ce286e07 core (main): if `keep_id` is set in `action_new`, use it as `action_id`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
1376 value.
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1377 Action will be deleted after 30 min.
1467
ceba6fd77739 core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents: 1417
diff changeset
1378 @param profile: %(doc_profile)s
ceba6fd77739 core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents: 1417
diff changeset
1379 """
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1380 if keep_id is not None:
4043
9641ce286e07 core (main): if `keep_id` is set in `action_new`, use it as `action_id`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
1381 id_ = keep_id
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1382 client = self.get_client(profile)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1383 action_timer = reactor.callLater(60 * 30, self._kill_action, keep_id, client)
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1384 client.actions[keep_id] = (action_data, id_, security_limit, action_timer)
4043
9641ce286e07 core (main): if `keep_id` is set in `action_new`, use it as `action_id`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
1385 else:
9641ce286e07 core (main): if `keep_id` is set in `action_new`, use it as `action_id`
Goffi <goffi@goffi.org>
parents: 4041
diff changeset
1386 id_ = str(uuid.uuid4())
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1387
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1388 self.bridge.action_new(
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1389 data_format.serialise(action_data), id_, security_limit, profile
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1390 )
1467
ceba6fd77739 core, bridge: new signal actionNew to launch an action from the backend (e.g. display a dialog message):
Goffi <goffi@goffi.org>
parents: 1417
diff changeset
1391
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1392 def actions_get(self, profile):
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1393 """Return current non answered actions
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1394
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1395 @param profile: %(doc_profile)s
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1396 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1397 client = self.get_client(profile)
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1398 return [
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1399 (data_format.serialise(action_tuple[0]), *action_tuple[1:-1])
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1400 for action_tuple in client.actions.values()
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1401 ]
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1402
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1403 def register_progress_cb(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1404 self, progress_id, callback, metadata=None, profile=C.PROF_KEY_NONE
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1405 ):
0
goffi@necton2
parents:
diff changeset
1406 """Register a callback called when progress is requested for id"""
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1407 if metadata is None:
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1408 metadata = {}
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1409 client = self.get_client(profile)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1410 if progress_id in client._progress_cb:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1411 raise exceptions.ConflictError("Progress ID is not unique !")
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1412 client._progress_cb[progress_id] = (callback, metadata)
0
goffi@necton2
parents:
diff changeset
1413
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1414 def remove_progress_cb(self, progress_id, profile):
0
goffi@necton2
parents:
diff changeset
1415 """Remove a progress callback"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1416 client = self.get_client(profile)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1417 try:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1418 del client._progress_cb[progress_id]
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1419 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1420 log.error(_("Trying to remove an unknow progress callback"))
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1421
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1422 def _progress_get(self, progress_id, profile):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1423 data = self.progress_get(progress_id, profile)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1424 return {k: str(v) for k, v in data.items()}
0
goffi@necton2
parents:
diff changeset
1425
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1426 def progress_get(self, progress_id, profile):
0
goffi@necton2
parents:
diff changeset
1427 """Return a dict with progress information
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1428
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1429 @param progress_id(unicode): unique id of the progressing element
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1430 @param profile: %(doc_profile)s
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1431 @return (dict): data with the following keys:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1432 'position' (int): current possition
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1433 'size' (int): end_position
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1434 if id doesn't exists (may be a finished progression), and empty dict is
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1435 returned
0
goffi@necton2
parents:
diff changeset
1436 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1437 client = self.get_client(profile)
0
goffi@necton2
parents:
diff changeset
1438 try:
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1439 data = client._progress_cb[progress_id][0](progress_id, profile)
0
goffi@necton2
parents:
diff changeset
1440 except KeyError:
1598
b144babc2658 core, plugin file: fixed progress id + data is now returned by getProgress, instead of being an argument to fill
Goffi <goffi@goffi.org>
parents: 1595
diff changeset
1441 data = {}
0
goffi@necton2
parents:
diff changeset
1442 return data
goffi@necton2
parents:
diff changeset
1443
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1444 def _progress_get_all(self, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1445 progress_all = self.progress_get_all(profile_key)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1446 for profile, progress_dict in progress_all.items():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1447 for progress_id, data in progress_dict.items():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1448 for key, value in data.items():
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1449 data[key] = str(value)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1450 return progress_all
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1451
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1452 def progress_get_all_metadata(self, profile_key):
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1453 """Return all progress metadata at once
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1454
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1455 @param profile_key: %(doc_profile)s
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1456 if C.PROF_KEY_ALL is used, all progress metadata from all profiles are
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1457 returned
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1458 @return (dict[dict[dict]]): a dict which map profile to progress_dict
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1459 progress_dict map progress_id to progress_data
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1460 progress_metadata is the same dict as sent by [progress_started]
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1461 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1462 clients = self.get_clients(profile_key)
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1463 progress_all = {}
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1464 for client in clients:
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1465 profile = client.profile
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1466 progress_dict = {}
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1467 progress_all[profile] = progress_dict
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1468 for (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1469 progress_id,
2765
378188abe941 misc: replaced all "dummy" by the more conventional and readable "__" ("_" being used for gettext)
Goffi <goffi@goffi.org>
parents: 2733
diff changeset
1470 (__, progress_metadata),
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1471 ) in client._progress_cb.items():
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1472 progress_dict[progress_id] = progress_metadata
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1473 return progress_all
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1474
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1475 def progress_get_all(self, profile_key):
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1476 """Return all progress status at once
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1477
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1478 @param profile_key: %(doc_profile)s
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1479 if C.PROF_KEY_ALL is used, all progress status from all profiles are returned
1598
b144babc2658 core, plugin file: fixed progress id + data is now returned by getProgress, instead of being an argument to fill
Goffi <goffi@goffi.org>
parents: 1595
diff changeset
1480 @return (dict[dict[dict]]): a dict which map profile to progress_dict
b144babc2658 core, plugin file: fixed progress id + data is now returned by getProgress, instead of being an argument to fill
Goffi <goffi@goffi.org>
parents: 1595
diff changeset
1481 progress_dict map progress_id to progress_data
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1482 progress_data is the same dict as returned by [progress_get]
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1483 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1484 clients = self.get_clients(profile_key)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1485 progress_all = {}
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1486 for client in clients:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1487 profile = client.profile
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1488 progress_dict = {}
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1489 progress_all[profile] = progress_dict
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1490 for progress_id, (progress_cb, __) in client._progress_cb.items():
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1491 progress_dict[progress_id] = progress_cb(progress_id, profile)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1492 return progress_all
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1493
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1494 def register_callback(self, callback, *args, **kwargs):
1603
2b82d846848e core: added callback_id in DataError message of launchCallback
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1495 """Register a callback.
2b82d846848e core: added callback_id in DataError message of launchCallback
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1496
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1497 @param callback(callable): method to call
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1498 @param kwargs: can contain:
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1499 with_data(bool): True if the callback use the optional data dict
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1500 force_id(unicode): id to avoid generated id. Can lead to name conflict, avoid
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1501 if possible
2733
e347e32aa07f core (memory/encryption): new encryptionNamespaceGet and encryptionTrustUIGet methods:
Goffi <goffi@goffi.org>
parents: 2691
diff changeset
1502 one_shot(bool): True to delete callback once it has been called
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1503 @return: id of the registered callback
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1504 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1505 callback_id = kwargs.pop("force_id", None)
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1506 if callback_id is None:
2167
4b78b4c7f805 core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents: 2147
diff changeset
1507 callback_id = str(uuid.uuid4())
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1508 else:
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1509 if callback_id in self._cb_map:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1510 raise exceptions.ConflictError(_("id already registered"))
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1511 self._cb_map[callback_id] = (callback, args, kwargs)
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1512
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1513 if "one_shot" in kwargs: # One Shot callback are removed after 30 min
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1514
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1515 def purge_callback():
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1516 try:
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1517 self.remove_callback(callback_id)
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1518 except KeyError:
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1519 pass
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1520
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1521 reactor.callLater(1800, purge_callback)
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1522
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1523 return callback_id
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1524
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1525 def remove_callback(self, callback_id):
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1526 """Remove a previously registered callback
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1527 @param callback_id: id returned by [register_callback]"""
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
1528 log.debug("Removing callback [%s]" % callback_id)
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1529 del self._cb_map[callback_id]
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1530
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1531 def _action_launch(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1532 self, callback_id: str, data_s: str, profile_key: str
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1533 ) -> defer.Deferred:
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1534 d = self.launch_callback(
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1535 callback_id, data_format.deserialise(data_s), profile_key
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1536 )
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1537 d.addCallback(data_format.serialise)
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1538 return d
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1539
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1540 def launch_callback(
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1541 self,
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1542 callback_id: str,
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1543 data: Optional[dict] = None,
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1544 profile_key: str = C.PROF_KEY_NONE,
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1545 ) -> defer.Deferred:
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1546 """Launch a specific callback
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1547
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1548 @param callback_id: id of the action (callback) to launch
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1549 @param data: optional data
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1550 @profile_key: %(doc_profile_key)s
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1551 @return: a deferred which fire a dict where key can be:
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1552 - xmlui: a XMLUI need to be displayed
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1553 - validated: if present, can be used to launch a callback, it can have the
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1554 values
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1555 - C.BOOL_TRUE
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1556 - C.BOOL_FALSE
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1557 """
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1558 # FIXME: is it possible to use this method without profile connected? If not,
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1559 # client must be used instead of profile_key
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1560 # FIXME: security limit need to be checked here
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1561 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1562 client = self.get_client(profile_key)
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1563 except exceptions.NotFound:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1564 # client is not available yet
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1565 profile = self.memory.get_profile_name(profile_key)
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1566 if not profile:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1567 raise exceptions.ProfileUnknownError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1568 _("trying to launch action with a non-existant profile")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1569 )
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1570 else:
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1571 profile = client.profile
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1572 # we check if the action is kept, and remove it
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1573 try:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1574 action_tuple = client.actions[callback_id]
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1575 except KeyError:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1576 pass
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1577 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1578 action_tuple[-1].cancel() # the last item is the action timer
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1579 del client.actions[callback_id]
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1580
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1581 try:
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1582 callback, args, kwargs = self._cb_map[callback_id]
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1583 except KeyError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1584 raise exceptions.DataError("Unknown callback id {}".format(callback_id))
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1585
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1586 if kwargs.get("with_data", False):
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1587 if data is None:
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1588 raise exceptions.DataError("Required data for this callback is missing")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1589 args, kwargs = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1590 list(args)[:],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1591 kwargs.copy(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1592 ) # we don't want to modify the original (kw)args
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1593 args.insert(0, data)
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1594 kwargs["profile"] = profile
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1595 del kwargs["with_data"]
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1596
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1597 if kwargs.pop("one_shot", False):
4041
2594e1951cf7 core (bridge): `action_new` now use serialised dict for extra data.
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
1598 self.remove_callback(callback_id)
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1599
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1600 return utils.as_deferred(callback, *args, **kwargs)
0
goffi@necton2
parents:
diff changeset
1601
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1602 # Menus management
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1603
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1604 def _get_menu_canonical_path(self, path):
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1605 """give canonical form of path
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1606
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1607 canonical form is a tuple of the path were every element is stripped and lowercase
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1608 @param path(iterable[unicode]): untranslated path to menu
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1609 @return (tuple[unicode]): canonical form of path
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1610 """
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1611 return tuple((p.lower().strip() for p in path))
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1612
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1613 def import_menu(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1614 self,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1615 path,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1616 callback,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1617 security_limit=C.NO_SECURITY_LIMIT,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1618 help_string="",
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1619 type_=C.MENU_GLOBAL,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1620 ):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1621 r"""register a new menu for frontends
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
1622
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1623 @param path(iterable[unicode]): path to go to the menu
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1624 (category/subcategory/.../item) (e.g.: ("File", "Open"))
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1625 /!\ use D_() instead of _() for translations (e.g. (D_("File"), D_("Open")))
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1626 untranslated/lower case path can be used to identity a menu, for this reason
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1627 it must be unique independently of case.
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1628 @param callback(callable): method to be called when menuitem is selected, callable
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1629 or a callback id (string) as returned by [register_callback]
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1630 @param security_limit(int): %(doc_security_limit)s
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1631 /!\ security_limit MUST be added to data in launch_callback if used #TODO
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1632 @param help_string(unicode): string used to indicate what the menu do (can be
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1633 show as a tooltip).
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1634 /!\ use D_() instead of _() for translations
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1635 @param type(unicode): one of:
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1636 - C.MENU_GLOBAL: classical menu, can be shown in a menubar on top (e.g.
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1637 something like File/Open)
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1638 - C.MENU_ROOM: like a global menu, but only shown in multi-user chat
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1639 menu_data must contain a "room_jid" data
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1640 - C.MENU_SINGLE: like a global menu, but only shown in one2one chat
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1641 menu_data must contain a "jid" data
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1642 - C.MENU_JID_CONTEXT: contextual menu, used with any jid (e.g.: ad hoc
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1643 commands, jid is already filled)
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1644 menu_data must contain a "jid" data
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1645 - C.MENU_ROSTER_JID_CONTEXT: like JID_CONTEXT, but restricted to jids in
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1646 roster.
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1647 menu_data must contain a "room_jid" data
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1648 - C.MENU_ROSTER_GROUP_CONTEXT: contextual menu, used with group (e.g.: publish
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1649 microblog, group is already filled)
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1650 menu_data must contain a "group" data
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1651 @return (unicode): menu_id (same as callback_id)
755
e3ad48a2aab2 core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents: 752
diff changeset
1652 """
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1653
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1654 if callable(callback):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1655 callback_id = self.register_callback(callback, with_data=True)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1656 elif isinstance(callback, str):
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1657 # The callback is already registered
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1658 callback_id = callback
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1659 try:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1660 callback, args, kwargs = self._cb_map[callback_id]
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1661 except KeyError:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1662 raise exceptions.DataError("Unknown callback id")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1663 kwargs["with_data"] = True # we have to be sure that we use extra data
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1664 else:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1665 raise exceptions.DataError("Unknown callback type")
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1666
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1667 for menu_data in self._menus.values():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1668 if menu_data["path"] == path and menu_data["type"] == type_:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1669 raise exceptions.ConflictError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1670 _("A menu with the same path and type already exists")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1671 )
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1672
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1673 path_canonical = self._get_menu_canonical_path(path)
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1674 menu_key = (type_, path_canonical)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1675
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1676 if menu_key in self._menus_paths:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1677 raise exceptions.ConflictError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1678 "this menu path is already used: {path} ({menu_key})".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1679 path=path_canonical, menu_key=menu_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1680 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1681 )
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1682
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1683 menu_data = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1684 "path": tuple(path),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1685 "path_canonical": path_canonical,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1686 "security_limit": security_limit,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1687 "help_string": help_string,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1688 "type": type_,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1689 }
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1690
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1691 self._menus[callback_id] = menu_data
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1692 self._menus_paths[menu_key] = callback_id
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1693
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1694 return callback_id
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1695
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1696 def get_menus(self, language="", security_limit=C.NO_SECURITY_LIMIT):
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1697 """Return all menus registered
1365
ba87b940f07a core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents: 1355
diff changeset
1698
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1699 @param language: language used for translation, or empty string for default
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1700 @param security_limit: %(doc_security_limit)s
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1701 @return: array of tuple with:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1702 - menu id (same as callback_id)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1703 - menu type
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1704 - raw menu path (array of strings)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1705 - translated menu path
1365
ba87b940f07a core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents: 1355
diff changeset
1706 - extra (dict(unicode, unicode)): extra data where key can be:
ba87b940f07a core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents: 1355
diff changeset
1707 - icon: name of the icon to use (TODO)
ba87b940f07a core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents: 1355
diff changeset
1708 - help_url: link to a page with more complete documentation (TODO)
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1709 """
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1710 ret = []
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1711 for menu_id, menu_data in self._menus.items():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1712 type_ = menu_data["type"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1713 path = menu_data["path"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1714 menu_security_limit = menu_data["security_limit"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1715 if security_limit != C.NO_SECURITY_LIMIT and (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1716 menu_security_limit == C.NO_SECURITY_LIMIT
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1717 or menu_security_limit > security_limit
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1718 ):
809
743b757777d3 core: security limit in menus
Goffi <goffi@goffi.org>
parents: 807
diff changeset
1719 continue
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1720 language_switch(language)
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1721 path_i18n = [_(elt) for elt in path]
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1722 language_switch()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1723 extra = {} # TODO: manage extra data like icon
1365
ba87b940f07a core, quick_frontends: added an "extra" item in getMenus + use of new quick_menus module in QuickApp
Goffi <goffi@goffi.org>
parents: 1355
diff changeset
1724 ret.append((menu_id, type_, path, path_i18n, extra))
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1725
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1726 return ret
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1727
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1728 def _launch_menu(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1729 self,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1730 menu_type,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1731 path,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1732 data=None,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1733 security_limit=C.NO_SECURITY_LIMIT,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1734 profile_key=C.PROF_KEY_NONE,
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1735 ):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1736 client = self.get_client(profile_key)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1737 return self.launch_menu(client, menu_type, path, data, security_limit)
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1738
4270
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1739 def launch_menu(
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1740 self, client, menu_type, path, data=None, security_limit=C.NO_SECURITY_LIMIT
0d7bb4df2343 Reformatted code base using black.
Goffi <goffi@goffi.org>
parents: 4266
diff changeset
1741 ):
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1742 """launch action a menu action
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1743
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1744 @param menu_type(unicode): type of menu to launch
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1745 @param path(iterable[unicode]): canonical path of the menu
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1746 @params data(dict): menu data
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1747 @raise NotFound: this path is not known
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1748 """
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1749 # FIXME: manage security_limit here
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1750 # defaut security limit should be high instead of C.NO_SECURITY_LIMIT
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1751 canonical_path = self._get_menu_canonical_path(path)
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1752 menu_key = (menu_type, canonical_path)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1753 try:
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1754 callback_id = self._menus_paths[menu_key]
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1755 except KeyError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1756 raise exceptions.NotFound(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2990
diff changeset
1757 "Can't find menu {path} ({menu_type})".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1758 path=canonical_path, menu_type=menu_type
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1759 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1760 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1761 return self.launch_callback(callback_id, data, client.profile)
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1762
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1763 def get_menu_help(self, menu_id, language=""):
2113
9c861d07b5b6 core: added sessionGetInfos bridge method to retrieve various data on current profile session + client.started keep start time
Goffi <goffi@goffi.org>
parents: 2105
diff changeset
1764 """return the help string of the menu
9c861d07b5b6 core: added sessionGetInfos bridge method to retrieve various data on current profile session + client.started keep start time
Goffi <goffi@goffi.org>
parents: 2105
diff changeset
1765
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1766 @param menu_id: id of the menu (same as callback_id)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1767 @param language: language used for translation, or empty string for default
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1768 @param return: translated help
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1769
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1770 """
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1771 try:
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1772 menu_data = self._menus[menu_id]
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1773 except KeyError:
755
e3ad48a2aab2 core, frontends: callMenu is now async and don't use callback_id anymore
Goffi <goffi@goffi.org>
parents: 752
diff changeset
1774 raise exceptions.DataError("Trying to access an unknown menu")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1775 language_switch(language)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1776 help_string = _(menu_data["help_string"])
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4019
diff changeset
1777 language_switch()
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1778 return help_string