annotate sat/core/sat_main.py @ 2643:189e38fb11ff

core: style improvments (90 chars limit)
author Goffi <goffi@goffi.org>
date Sun, 29 Jul 2018 18:44:27 +0200
parents 56f94936df1e
children f2cf1daa42cb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
1 #!/usr/bin/env python2
0
goffi@necton2
parents:
diff changeset
2 # -*- coding: utf-8 -*-
goffi@necton2
parents:
diff changeset
3
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
4 # SAT: a jabber client
2483
0046283a285d dates update
Goffi <goffi@goffi.org>
parents: 2474
diff changeset
5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org)
0
goffi@necton2
parents:
diff changeset
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
7 # 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
8 # 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
9 # 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
10 # (at your option) any later version.
0
goffi@necton2
parents:
diff changeset
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
12 # 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
13 # 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
14 # 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
15 # GNU Affero General Public License for more details.
0
goffi@necton2
parents:
diff changeset
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 605
diff changeset
17 # 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
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
0
goffi@necton2
parents:
diff changeset
19
1376
28fd9e838f8f core: getRepositoryData now get the module in argument
Goffi <goffi@goffi.org>
parents: 1375
diff changeset
20 import sat
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
21 from sat.core.i18n import _, languageSwitch
331
0a8eb0461f31 core: main SAT class now moved in its own module core.sat_main
Goffi <goffi@goffi.org>
parents: 330
diff changeset
22 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
23 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
24 from twisted.words.protocols.jabber import jid
0
goffi@necton2
parents:
diff changeset
25 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
26 from wokkel.xmppim import RosterItem
332
8c9b9ef13ba1 core: minor refactoring
Goffi <goffi@goffi.org>
parents: 331
diff changeset
27 from sat.core import xmpp
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
28 from sat.core import exceptions
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
29 from sat.core.log import getLogger
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
30
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
31 log = getLogger(__name__)
914
1a3ba959f0ab core (memory): moved Params in its own module + introduced a new core/constants module, and moved some constants there
Goffi <goffi@goffi.org>
parents: 909
diff changeset
32 from sat.core.constants import Const as C
2509
d485e9416493 core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents: 2496
diff changeset
33 from sat.memory import memory
d485e9416493 core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents: 2496
diff changeset
34 from sat.memory import cache
1374
0befb14ecf62 renamed tools.misc to tools.trigger
Goffi <goffi@goffi.org>
parents: 1365
diff changeset
35 from sat.tools import trigger
1375
3a20312d4012 core: if we are in dev version and it's possible, repository data are now checked and added to SàT version
Goffi <goffi@goffi.org>
parents: 1374
diff changeset
36 from sat.tools import utils
2088
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
37 from sat.tools.common import dynamic_import
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
38 from sat.tools.common import regex
1032
b262ae6d53af stdui: add ui_profile_manager to interact with frontends when profile authentication is needed
souliane <souliane@mailoo.org>
parents: 1030
diff changeset
39 from sat.stdui import ui_contact_list, ui_profile_manager
2105
c96fe007ca41 core(constants): added a constant for profile extension (PLUGIN_EXT):
Goffi <goffi@goffi.org>
parents: 2100
diff changeset
40 import sat.plugins
0
goffi@necton2
parents:
diff changeset
41 from glob import glob
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
42 import sys
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
43 import os.path
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
44 import uuid
0
goffi@necton2
parents:
diff changeset
45
987
3a96920c07b7 core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents: 972
diff changeset
46 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
47 from collections import OrderedDict # only available from python 2.7
987
3a96920c07b7 core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents: 972
diff changeset
48 except ImportError:
3a96920c07b7 core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents: 972
diff changeset
49 from ordereddict import OrderedDict
3a96920c07b7 core, frontends: unify the roster management UIs in sat/stdui/ui_contact_list.py
souliane <souliane@mailoo.org>
parents: 972
diff changeset
50
0
goffi@necton2
parents:
diff changeset
51
13
bd9e9997d540 wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents: 12
diff changeset
52 class SAT(service.Service):
0
goffi@necton2
parents:
diff changeset
53 def __init__(self):
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
54 self._cb_map = {} # map from callback_id to callbacks
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
55 self._menus = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
56 OrderedDict()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
57 ) # dynamic menus. key: callback_id, value: menu data (dictionnary)
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
58 self._menus_paths = {} # path to id. key: (menu_type, lower case tuple of path),
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
59 # value: menu id
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
60 self.initialised = defer.Deferred()
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
61 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
62 self.plugins = {}
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
63 self.ns_map = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
64 u"x-data": u"jabber:x:data"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
65 } #  map for short name to whole namespace,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
66 #  extended by plugins with registerNamespace
2509
d485e9416493 core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents: 2496
diff changeset
67 self.memory = memory.Memory(self)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
68 self.trigger = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
69 trigger.TriggerManager()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
70 ) # trigger are used to change SàT behaviour
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
71
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
72 bridge_name = self.memory.getConfig("", "bridge", "dbus")
2088
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
73
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
74 bridge_module = dynamic_import.bridge(bridge_name)
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
75 if bridge_module is None:
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
76 log.error(u"Can't find bridge module of name {}".format(bridge_name))
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
77 sys.exit(1)
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
78 log.info(u"using {} bridge".format(bridge_name))
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
79 try:
2088
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
80 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
81 except exceptions.BridgeInitError:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
82 log.error(u"Bridge can't be initialised, can't start SàT core")
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
83 sys.exit(1)
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
84 self.bridge.register_method("getReady", lambda: self.initialised)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
85 self.bridge.register_method("getVersion", lambda: self.full_version)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
86 self.bridge.register_method("getFeatures", self.getFeatures)
2168
255830fdb80b core, bridge: renamed getProfileName to profileNameGet according to new conventions
Goffi <goffi@goffi.org>
parents: 2167
diff changeset
87 self.bridge.register_method("profileNameGet", self.memory.getProfileName)
2146
1bb9bf1b4150 core, frontends: getProfilesList renamed to profilesGetList + behaviour change:
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
88 self.bridge.register_method("profilesListGet", self.memory.getProfilesList)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
89 self.bridge.register_method(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
90 "getEntityData",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
91 lambda jid_, keys, profile: self.memory.getEntityData(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
92 jid.JID(jid_), keys, profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
93 ),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
94 )
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
95 self.bridge.register_method("getEntitiesData", self.memory._getEntitiesData)
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
96 self.bridge.register_method("profileCreate", self.memory.createProfile)
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
97 self.bridge.register_method("asyncDeleteProfile", self.memory.asyncDeleteProfile)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
98 self.bridge.register_method("profileStartSession", self.memory.startSession)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
99 self.bridge.register_method(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
100 "profileIsSessionStarted", self.memory._isSessionStarted
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
101 )
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
102 self.bridge.register_method("profileSetDefault", self.memory.profileSetDefault)
2142
be96beb7ca14 core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
103 self.bridge.register_method("connect", self._connect)
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
104 self.bridge.register_method("disconnect", self.disconnect)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
105 self.bridge.register_method("getContacts", self.getContacts)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
106 self.bridge.register_method("getContactsFromGroup", self.getContactsFromGroup)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
107 self.bridge.register_method("getMainResource", self.memory._getMainResource)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
108 self.bridge.register_method(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
109 "getPresenceStatuses", self.memory._getPresenceStatuses
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
110 )
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
111 self.bridge.register_method("getWaitingSub", self.memory.getWaitingSub)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
112 self.bridge.register_method("messageSend", self._messageSend)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
113 self.bridge.register_method("getConfig", self._getConfig)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
114 self.bridge.register_method("setParam", self.setParam)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
115 self.bridge.register_method("getParamA", self.memory.getStringParamA)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
116 self.bridge.register_method("asyncGetParamA", self.memory.asyncGetStringParamA)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
117 self.bridge.register_method(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
118 "asyncGetParamsValuesFromCategory",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
119 self.memory.asyncGetParamsValuesFromCategory,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
120 )
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
121 self.bridge.register_method("getParamsUI", self.memory.getParamsUI)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
122 self.bridge.register_method(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
123 "getParamsCategories", self.memory.getParamsCategories
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
124 )
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
125 self.bridge.register_method("paramsRegisterApp", self.memory.paramsRegisterApp)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
126 self.bridge.register_method("historyGet", self.memory._historyGet)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
127 self.bridge.register_method("setPresence", self._setPresence)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
128 self.bridge.register_method("subscription", self.subscription)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
129 self.bridge.register_method("addContact", self._addContact)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
130 self.bridge.register_method("updateContact", self._updateContact)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
131 self.bridge.register_method("delContact", self._delContact)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
132 self.bridge.register_method("isConnected", self.isConnected)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
133 self.bridge.register_method("launchAction", self.launchCallback)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
134 self.bridge.register_method("actionsGet", self.actionsGet)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
135 self.bridge.register_method("progressGet", self._progressGet)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
136 self.bridge.register_method("progressGetAll", self._progressGetAll)
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
137 self.bridge.register_method("menusGet", self.getMenus)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
138 self.bridge.register_method("menuHelpGet", self.getMenuHelp)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
139 self.bridge.register_method("menuLaunch", self._launchMenu)
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
140 self.bridge.register_method("discoInfos", self.memory.disco._discoInfos)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
141 self.bridge.register_method("discoItems", self.memory.disco._discoItems)
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
142 self.bridge.register_method("discoFindByFeatures", self._findByFeatures)
2086
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
143 self.bridge.register_method("saveParamsTemplate", self.memory.save_xml)
4633cfcbcccb bridge (D-Bus): bad design fixes:
Goffi <goffi@goffi.org>
parents: 2050
diff changeset
144 self.bridge.register_method("loadParamsTemplate", self.memory.load_xml)
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
145 self.bridge.register_method("sessionInfosGet", self.getSessionInfos)
2443
81a45e7886c9 core: added a mechanism to associate short names to namespaces:
Goffi <goffi@goffi.org>
parents: 2431
diff changeset
146 self.bridge.register_method("namespacesGet", self.getNamespaces)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
147
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
148 self.memory.initialized.addCallback(self._postMemoryInit)
0
goffi@necton2
parents:
diff changeset
149
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
150 @property
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
151 def version(self):
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
152 """Return the short version of SàT"""
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
153 return C.APP_VERSION
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
154
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
155 @property
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
156 def full_version(self):
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
157 """Return the full version of SàT
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
158
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
159 In developement mode, release name and extra data are returned too
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
160 """
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
161 version = self.version
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
162 if version[-1] == "D":
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
163 # we are in debug version, we add extra data
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
164 try:
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
165 return self._version_cache
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
166 except AttributeError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
167 self._version_cache = u"{} « {} » ({})".format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
168 version, C.APP_RELEASE_NAME, utils.getRepositoryData(sat)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
169 )
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
170 return self._version_cache
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
171 else:
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
172 return version
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
173
2088
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
174 @property
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
175 def bridge_name(self):
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
176 return os.path.splitext(os.path.basename(self.bridge.__file__))[0]
c02f96756d5c core: bridge can now be changed in conf
Goffi <goffi@goffi.org>
parents: 2086
diff changeset
177
412
62b17854254e database integration: first draft
Goffi <goffi@goffi.org>
parents: 399
diff changeset
178 def _postMemoryInit(self, ignore):
62b17854254e database integration: first draft
Goffi <goffi@goffi.org>
parents: 399
diff changeset
179 """Method called after memory initialization is done"""
2509
d485e9416493 core (memory/cache): common cache:
Goffi <goffi@goffi.org>
parents: 2496
diff changeset
180 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
181 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
182 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
183 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
184 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
185 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
186 except Exception as e:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
187 log.error(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
188 _(u"Could not initialize backend: {reason}").format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
189 reason=str(e).decode("utf-8", "ignore")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
190 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
191 )
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
192 sys.exit(1)
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
193 self.initialised.callback(None)
2089
0931b5a6213c core, quick_frontends: android compatibility hacks:
Goffi <goffi@goffi.org>
parents: 2088
diff changeset
194 log.info(_(u"Backend is ready"))
0
goffi@necton2
parents:
diff changeset
195
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
196 def _unimport_plugin(self, plugin_path):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
197 """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
198 try:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
199 del sys.modules[plugin_path]
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
200 except KeyError:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
201 pass
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
202
0
goffi@necton2
parents:
diff changeset
203 def _import_plugins(self):
goffi@necton2
parents:
diff changeset
204 """Import all plugins found in plugins directory"""
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
205 # FIXME: module imported but cancelled should be deleted
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
206 # 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
207 # FIXME: should use imp
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
208 # 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
209 # if we just use a client, and plugin blacklisting should be possible in
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
210 # sat.conf
2105
c96fe007ca41 core(constants): added a constant for profile extension (PLUGIN_EXT):
Goffi <goffi@goffi.org>
parents: 2100
diff changeset
211 plugins_path = os.path.dirname(sat.plugins.__file__)
c96fe007ca41 core(constants): added a constant for profile extension (PLUGIN_EXT):
Goffi <goffi@goffi.org>
parents: 2100
diff changeset
212 plugin_glob = "plugin*." + C.PLUGIN_EXT
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
213 plug_lst = [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
214 os.path.splitext(plugin)[0]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
215 for plugin in map(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
216 os.path.basename, glob(os.path.join(plugins_path, plugin_glob))
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
217 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
218 ]
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
219 plugins_to_import = {} # plugins we still have to import
0
goffi@necton2
parents:
diff changeset
220 for plug in plug_lst:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
221 plugin_path = "sat.plugins." + plug
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
222 try:
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
223 __import__(plugin_path)
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
224 except exceptions.MissingModule as e:
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
225 self._unimport_plugin(plugin_path)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
226 log.warning(
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
227 u"Can't import plugin [{path}] because of an unavailale third party "
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
228 u"module:\n{msg}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
229 path=plugin_path, msg=e
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
230 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
231 )
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
232 continue
2100
fbeeba721954 plugin android: first draft:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
233 except exceptions.CancelError as e:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
234 log.info(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
235 u"Plugin [{path}] cancelled its own import: {msg}".format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
236 path=plugin_path, msg=e
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
237 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
238 )
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
239 self._unimport_plugin(plugin_path)
2100
fbeeba721954 plugin android: first draft:
Goffi <goffi@goffi.org>
parents: 2089
diff changeset
240 continue
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
241 except Exception as e:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
242 import traceback
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
243
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
244 log.error(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
245 _(u"Can't import plugin [{path}]:\n{error}").format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
246 path=plugin_path, error=traceback.format_exc()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
247 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
248 )
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
249 self._unimport_plugin(plugin_path)
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
250 continue
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
251 mod = sys.modules[plugin_path]
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
252 plugin_info = mod.PLUGIN_INFO
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
253 import_name = plugin_info["import_name"]
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
254
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
255 plugin_modes = plugin_info[u"modes"] = set(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
256 plugin_info.setdefault(u"modes", C.PLUG_MODE_DEFAULT)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
257 )
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
258
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
259 # if the plugin is an entry point, it must work in component mode
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
260 if plugin_info[u"type"] == C.PLUG_TYPE_ENTRY_POINT:
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
261 # if plugin is an entrypoint, we cache it
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
262 if C.PLUG_MODE_COMPONENT not in plugin_modes:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
263 log.error(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
264 _(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
265 u"{type} type must be used with {mode} mode, ignoring plugin"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
266 ).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
267 )
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
268 self._unimport_plugin(plugin_path)
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
269 continue
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
270
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
271 if import_name in plugins_to_import:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
272 log.error(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
273 _(
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
274 u"Name conflict for import name [{import_name}], can't import "
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
275 u"plugin [{name}]"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
276 ).format(**plugin_info)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
277 )
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
278 continue
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
279 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
280 while True:
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
281 try:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
282 self._import_plugins_from_dict(plugins_to_import)
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
283 except ImportError:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
284 pass
1503
f681788097ba core (plugins): detect import_name conflicts
Goffi <goffi@goffi.org>
parents: 1491
diff changeset
285 if not plugins_to_import:
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
286 break
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
287
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
288 def _import_plugins_from_dict(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
289 self, plugins_to_import, import_name=None, optional=False
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
290 ):
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
291 """Recursively import and their dependencies in the right order
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
292
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
293 @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
294 plugin_info)
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
295 @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
296 PLUGIN_INFO['import_name']
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
297 @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
298 is raised
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
299 """
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
300 if import_name in self.plugins:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
301 log.debug(u"Plugin {} already imported, passing".format(import_name))
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
302 return
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
303 if not import_name:
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
304 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
305 else:
288
76247af9917c core: added plugin dependency not found import error
Goffi <goffi@goffi.org>
parents: 287
diff changeset
306 if not import_name in plugins_to_import:
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
307 if optional:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
308 log.warning(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
309 _(u"Recommended plugin not found: {}").format(import_name)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
310 )
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
311 return
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
312 msg = u"Dependency not found: {}".format(import_name)
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
313 log.error(msg)
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
314 raise ImportError(msg)
287
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
315 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
316 dependencies = plugin_info.setdefault("dependencies", [])
925
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
317 recommendations = plugin_info.setdefault("recommendations", [])
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
318 for to_import in dependencies + recommendations:
5c78cefd233f core: plugins now accepts recommendations:
Goffi <goffi@goffi.org>
parents: 923
diff changeset
319 if to_import not in self.plugins:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
320 log.debug(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
321 u"Recursively import dependency of [%s]: [%s]"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
322 % (import_name, to_import)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
323 )
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
324 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
325 self._import_plugins_from_dict(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
326 plugins_to_import, to_import, to_import not in dependencies
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
327 )
1145
4e1a0a1523f1 core: more robust plugins importation
Goffi <goffi@goffi.org>
parents: 1130
diff changeset
328 except ImportError as e:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
329 log.warning(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
330 _(u"Can't import plugin {name}: {error}").format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
331 name=plugin_info["name"], error=e
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
332 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
333 )
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
334 if optional:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
335 return
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
336 raise e
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
337 log.info("importing plugin: {}".format(plugin_info["name"]))
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
338 # we instanciate the plugin here
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
339 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
340 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
341 except Exception as e:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
342 log.warning(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
343 u'Error while loading plugin "{name}", ignoring it: {error}'.format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
344 name=plugin_info["name"], error=e
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
345 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
346 )
1535
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
347 if optional:
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
348 return
c9ef16de3f13 core: more robust plugins loading:
Goffi <goffi@goffi.org>
parents: 1533
diff changeset
349 raise ImportError(u"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
350 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
351 self.plugins[import_name].is_handler = True
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
352 else:
2720536b5a22 core: added plugin dependency management
Goffi <goffi@goffi.org>
parents: 282
diff changeset
353 self.plugins[import_name].is_handler = False
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
354 # we keep metadata as a Class attribute
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
355 self.plugins[import_name]._info = plugin_info
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
356 # TODO: test xmppclient presence and register handler parent
0
goffi@necton2
parents:
diff changeset
357
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
358 def pluginsUnload(self):
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
359 """Call unload method on every loaded plugin, if exists
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
360
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
361 @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
362 """
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
363 # 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
364 # pluging depending on the unloaded one should be unloaded too
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
365 # for now, just a basic call on plugin.unload is done
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
366 defers_list = []
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
367 for plugin in self.plugins.itervalues():
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
368 try:
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
369 unload = plugin.unload
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
370 except AttributeError:
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
371 continue
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
372 else:
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
373 defers_list.append(defer.maybeDeferred(unload))
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
374 return defers_list
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
375
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
376 def _connect(self, profile_key, password="", options=None):
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
377 profile = self.memory.getProfileName(profile_key)
2142
be96beb7ca14 core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
378 return 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
379
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
380 def connect(self, profile, password="", options=None, max_retries=C.XMPP_MAX_RETRIES):
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
381 """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
382
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
383 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
384 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
385 @param profile: %(doc_profile)s
1030
15f43b54d697 core, memory, bridge: added profile password + password encryption:
souliane <souliane@mailoo.org>
parents: 1027
diff changeset
386 @param password (string): the SàT profile password
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
387 @param options (dict): connection options. Key can be:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
388 -
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
389 @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
390 @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
391 - 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
392 - 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
393 @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
394 """
2142
be96beb7ca14 core, bridge, frontends: renamed asyncConnect to connect, and added options parameters (not used yet)
Goffi <goffi@goffi.org>
parents: 2138
diff changeset
395 if options is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
396 options = {}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
397
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
398 def connectProfile(dummy=None):
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
399 if self.isConnected(profile):
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
400 log.info(_("already connected !"))
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
401 return True
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
402
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
403 if self.memory.isComponent(profile):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
404 d = xmpp.SatXMPPComponent.startConnection(self, profile, max_retries)
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
405 else:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
406 d = xmpp.SatXMPPClient.startConnection(self, profile, max_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
407 return d.addCallback(lambda dummy: False)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
408
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
409 d = self.memory.startSession(password, profile)
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
410 d.addCallback(connectProfile)
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
411 return d
1019
6a16ec17a458 better PEP-8 compliance
souliane <souliane@mailoo.org>
parents: 1015
diff changeset
412
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
413 def disconnect(self, profile_key):
16
0a024d5e0cd0 New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents: 15
diff changeset
414 """disconnect from jabber server"""
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
415 # 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
416 # it shoud be deleted only when session is finished
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
417 if not self.isConnected(profile_key):
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
418 # isConnected is checked here and not on client
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
419 # because client is deleted when session is ended
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
420 log.info(_(u"not connected !"))
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
421 return defer.succeed(None)
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
422 client = self.getClient(profile_key)
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
423 return client.entityDisconnect()
6
5799493fa548 connection and disconnection management
Goffi <goffi@goffi.org>
parents: 5
diff changeset
424
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
425 def getFeatures(self, profile_key=C.PROF_KEY_NONE):
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
426 """Get available features
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
427
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
428 Return list of activated plugins and plugin specific data
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
429 @param profile_key: %(doc_profile_key)s
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
430 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
431 dependent)
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
432 @return (dict)[Deferred]: features data where:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
433 - 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
434 - 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
435 this dict is return by plugin's getFeature method.
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
436 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
437 """
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
438 try:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
439 # FIXME: there is no method yet to check profile session
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
440 # as soon as one is implemented, it should be used here
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
441 self.getClient(profile_key)
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
442 except KeyError:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
443 log.warning("Requesting features for a profile outside a session")
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
444 profile_key = C.PROF_KEY_NONE
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
445 except exceptions.ProfileNotSetError:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
446 pass
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
447
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
448 features = []
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
449 for import_name, plugin in self.plugins.iteritems():
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
450 try:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
451 features_d = defer.maybeDeferred(plugin.getFeatures, profile_key)
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
452 except AttributeError:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
453 features_d = defer.succeed({})
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
454 features.append(features_d)
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
455
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
456 d_list = defer.DeferredList(features)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
457
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
458 def buildFeatures(result, import_names):
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
459 assert len(result) == len(import_names)
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
460 ret = {}
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
461 for name, (success, data) in zip(import_names, result):
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
462 if success:
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
463 ret[name] = data
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
464 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
465 log.warning(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
466 u"Error while getting features for {name}: {failure}".format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
467 name=name, failure=data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
468 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
469 )
1482
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
470 ret[name] = {}
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
471 return ret
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
472
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
473 d_list.addCallback(buildFeatures, self.plugins.keys())
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
474 return d_list
80cd55dd5b04 core, bridge: added getFeatures method:
Goffi <goffi@goffi.org>
parents: 1470
diff changeset
475
466
448ce3c9e2ac core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents: 460
diff changeset
476 def getContacts(self, profile_key):
448ce3c9e2ac core: Roster cache refactoring: cache is now managed by client's SatRosterProtocol instance.
Goffi <goffi@goffi.org>
parents: 460
diff changeset
477 client = self.getClient(profile_key)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
478
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
479 def got_roster(dummy):
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
480 ret = []
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
481 for item in client.roster.getItems(): # we get all items for client's roster
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
482 # and convert them to expected format
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
483 attr = client.roster.getAttributes(item)
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
484 ret.append([item.jid.userhost(), attr, item.groups])
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
485 return ret
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
486
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
487 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
488
501
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 489
diff changeset
489 def getContactsFromGroup(self, group, profile_key):
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 489
diff changeset
490 client = self.getClient(profile_key)
941
c6d8fc63b1db core, plugins: host.getClient now raise an exception instead of returning None when no profile is found, plugins have been adapted consequently and a bit cleaned
Goffi <goffi@goffi.org>
parents: 930
diff changeset
491 return [jid_.full() for jid_ in client.roster.getJidsFromGroup(group)]
501
e9634d2e7b38 core, quick_frontend, primitivus, wix: Contacts List refactoring phase 1:
Goffi <goffi@goffi.org>
parents: 489
diff changeset
492
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
493 def purgeEntity(self, profile):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
494 """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
495
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
496 the garbage collector can then free the memory
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
497 """
416
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
498 try:
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
499 del self.profiles[profile]
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
500 except KeyError:
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
501 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
502 else:
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
503 self.memory.purgeProfileSession(profile)
416
32dc8b18c2ae core: param loading/purging on profile connection/disconnection
Goffi <goffi@goffi.org>
parents: 413
diff changeset
504
13
bd9e9997d540 wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents: 12
diff changeset
505 def startService(self):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
506 log.info(u"Salut à toi ô mon frère !")
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
507
13
bd9e9997d540 wokkel integration (not finished yet)
Goffi <goffi@goffi.org>
parents: 12
diff changeset
508 def stopService(self):
1007
a7d33c7a8277 core (log): refactoring + twisted backend:
Goffi <goffi@goffi.org>
parents: 999
diff changeset
509 log.info(u"Salut aussi à Rantanplan")
1550
465d4d484e7c core: plugin unload:
Goffi <goffi@goffi.org>
parents: 1535
diff changeset
510 return self.pluginsUnload()
0
goffi@necton2
parents:
diff changeset
511
goffi@necton2
parents:
diff changeset
512 def run(self):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
513 log.debug(_("running app"))
0
goffi@necton2
parents:
diff changeset
514 reactor.run()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
515
0
goffi@necton2
parents:
diff changeset
516 def stop(self):
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
517 log.debug(_("stopping app"))
0
goffi@necton2
parents:
diff changeset
518 reactor.stop()
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
519
37
a61beb21d16d Gateway registration, unregistration & edition
Goffi <goffi@goffi.org>
parents: 36
diff changeset
520 ## Misc methods ##
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
521
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
522 def getJidNStream(self, profile_key):
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
523 """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
524 @return: tuple (jid, xmlstream) from profile, can be None"""
1573
6338677f3a89 core (client): added a sendError method to easily build error response from <IQ\> stanza
Goffi <goffi@goffi.org>
parents: 1550
diff changeset
525 # TODO: deprecate this method (getClient is enough)
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
526 profile = self.memory.getProfileName(profile_key)
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
527 if not profile or not self.profiles[profile].isConnected():
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
528 return (None, None)
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
529 return (self.profiles[profile].jid, self.profiles[profile].xmlstream)
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
530
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
531 def getClient(self, profile_key):
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
532 """Convenient method to get client from profile key
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
533
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
534 @return: client or None if it doesn't exist
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
535 @raise exceptions.ProfileKeyUnknown: the profile or profile key doesn't exist
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
536 @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
537 This happen if profile has not been used yet
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
538 """
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
539 profile = self.memory.getProfileName(profile_key)
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
540 if not profile:
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
541 raise exceptions.ProfileKeyUnknown
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
542 try:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
543 return self.profiles[profile]
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
544 except KeyError:
2445
0199c0bd4c60 core: specify profile on NotFound exception
Goffi <goffi@goffi.org>
parents: 2443
diff changeset
545 raise exceptions.NotFound(profile_key)
64
d46f849664aa SàT: multi-profile, plugins updated
Goffi <goffi@goffi.org>
parents: 63
diff changeset
546
728
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
547 def getClients(self, profile_key):
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
548 """Convenient method to get list of clients from profile key
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
549
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
550 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
551 @param profile_key: %(doc_profile_key)s
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
552 @return: list of clients
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
553 """
2251
83bcd9ec4782 core: fixed profile key detection in getClients + raise DataError on empty profile
Goffi <goffi@goffi.org>
parents: 2176
diff changeset
554 if not profile_key:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
555 raise exceptions.DataError(_(u"profile_key must not be empty"))
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
556 try:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
557 profile = self.memory.getProfileName(profile_key, True)
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
558 except exceptions.ProfileUnknownError:
728
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
559 return []
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
560 if profile == C.PROF_KEY_ALL:
728
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
561 return self.profiles.values()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
562 elif profile[0] == "@": #  only profile keys can start with "@"
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
563 raise exceptions.ProfileKeyUnknown
728
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
564 return [self.profiles[profile]]
e07afabc4a25 plugin XEP-0050: Ad-Hoc commands first draft (answering part)
Goffi <goffi@goffi.org>
parents: 727
diff changeset
565
1234
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
566 def _getConfig(self, section, name):
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
567 """Get the main configuration option
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
568
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
569 @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
570 @param name: name of the option
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
571 @return: unicode representation of the option
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
572 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
573 return unicode(self.memory.getConfig(section, name, ""))
1234
9c17bd37e6e5 core: better management of default value in getConfig
Goffi <goffi@goffi.org>
parents: 1189
diff changeset
574
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
575 def logErrback(self, failure_):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
576 """generic errback logging
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
577
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
578 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
579 """
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
580 log.error(_(u"Unexpected error: {}".format(failure_)))
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
581 return failure_
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2142
diff changeset
582
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
583 #  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
584
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
585 def registerNamespace(self, 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
586 """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
587 if short_name in self.ns_map:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
588 raise exceptions.ConflictError(u"this short name is already used")
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
589 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
590
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
591 def getNamespaces(self):
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
592 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
593
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
594 def getSessionInfos(self, profile_key):
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
595 """compile interesting data on current profile session"""
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
596 client = self.getClient(profile_key)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
597 data = {"jid": client.jid.full(), "started": unicode(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
598 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
599
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
600 # 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
601
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
602 def getLocalPath(self, client, dir_name, *extra_path, **kwargs):
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
603 """retrieve path for local 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
604
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
605 if path doesn't exist, it will be created
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
606 @param client(SatXMPPClient, None): client instance
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
607 used when profile is set, can be None if profile is False
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
608 @param dir_name(unicode): name of the main path directory
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
609 @param component(bool): if True, path will be prefixed with C.COMPONENTS_DIR
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
610 @param profile(bool): if True, path will be suffixed by profile 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
611 @param *extra_path: extra path element(s) to use
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
612 @return (unicode): path
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
613 """
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
614 # FIXME: component and profile are parsed with **kwargs because of python 2
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
615 # limitations. Once moved to python 3, this can be fixed
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
616 component = kwargs.pop("component", False)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
617 profile = kwargs.pop("profile", True)
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
618 assert not kwargs
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
619
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
620 path_elts = [self.memory.getConfig("", "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
621 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
622 path_elts.append(C.COMPONENTS_DIR)
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
623 path_elts.append(regex.pathEscape(dir_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
624 if extra_path:
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
625 path_elts.extend([regex.pathEscape(p) for p in extra_path])
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
626 if profile:
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
627 regex.pathEscape(client.profile)
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
628 path = os.path.join(*path_elts)
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
629 if not os.path.exists(path):
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
630 os.makedirs(path)
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
631 return path
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
632
16
0a024d5e0cd0 New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents: 15
diff changeset
633 ## Client management ##
0
goffi@necton2
parents:
diff changeset
634
641
49587e170f53 core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 636
diff changeset
635 def setParam(self, name, value, category, security_limit, profile_key):
0
goffi@necton2
parents:
diff changeset
636 """set wanted paramater and notice observers"""
641
49587e170f53 core: added the security_limit to setParam
souliane <souliane@mailoo.org>
parents: 636
diff changeset
637 self.memory.setParam(name, value, category, security_limit, profile_key)
0
goffi@necton2
parents:
diff changeset
638
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
639 def isConnected(self, profile_key):
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
640 """Return connection status of profile
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
641 @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
642 @return: True if connected
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
643 """
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
644 profile = self.memory.getProfileName(profile_key)
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
645 if not profile:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
646 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
647 raise exceptions.ProfileUnknownError(profile_key)
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
648 if profile not in self.profiles:
62
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
649 return False
93cb45a7420f SàT multi-profile: connection using profiles
Goffi <goffi@goffi.org>
parents: 60
diff changeset
650 return self.profiles[profile].isConnected()
0
goffi@necton2
parents:
diff changeset
651
1052
e88bff4c8b77 core (XMPP): sendMessage refactoring:
Goffi <goffi@goffi.org>
parents: 1043
diff changeset
652 ## XMPP methods ##
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
653
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
654 def _messageSend(self, to_jid_s, message, subject=None, mess_type="auto", extra=None,
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
655 profile_key=C.PROF_KEY_NONE,):
1955
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
656 client = self.getClient(profile_key)
633b5c21aefd backend, frontend: messages refactoring (huge commit, not finished):
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
657 to_jid = jid.JID(to_jid_s)
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
658 # XXX: we need to use the dictionary comprehension because D-Bus return its own
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
659 # types, and pickle can't manage them. TODO: Need to find a better way
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
660 return client.sendMessage(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
661 to_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
662 message,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
663 subject,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
664 mess_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
665 {unicode(key): unicode(value) for key, value in extra.items()},
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
666 )
16
0a024d5e0cd0 New account creation (in-band registration)
Goffi <goffi@goffi.org>
parents: 15
diff changeset
667
917
a9401694d2dc bridge, frontends: display presence with the highest priority + reset your own presence when you (dis)connect
souliane <souliane@mailoo.org>
parents: 916
diff changeset
668 def _setPresence(self, to="", show="", statuses=None, profile_key=C.PROF_KEY_NONE):
a9401694d2dc bridge, frontends: display presence with the highest priority + reset your own presence when you (dis)connect
souliane <souliane@mailoo.org>
parents: 916
diff changeset
669 return self.setPresence(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
670
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
671 def setPresence(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
672 self, to_jid=None, show="", statuses=None, profile_key=C.PROF_KEY_NONE
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
673 ):
0
goffi@necton2
parents:
diff changeset
674 """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
675 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
676 statuses = {}
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
677 profile = self.memory.getProfileName(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
678 assert profile
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
679 priority = int(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
680 self.memory.getParamA("Priority", "Connection", profile_key=profile)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
681 )
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
682 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
683 # 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
684 # broadcasted to generating resource)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
685 if "" in statuses:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
686 statuses[C.PRESENCE_STATUSES_DEFAULT] = statuses.pop("")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
687 self.bridge.presenceUpdate(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
688 self.profiles[profile].jid.full(), show, int(priority), statuses, profile
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
689 )
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
690
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
691 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
692 """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
693 @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
694 @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
695 @param profile_key: profile"""
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
696 profile = self.memory.getProfileName(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
697 assert profile
50
daa1f01a5332 SàT improvement:
Goffi <goffi@goffi.org>
parents: 41
diff changeset
698 to_jid = jid.JID(raw_jid)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
699 log.debug(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
700 _(u"subsciption request [%(subs_type)s] for %(jid)s")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
701 % {"subs_type": subs_type, "jid": to_jid.full()}
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
702 )
589
d1b4805124a1 Fix pep8 support in src/core.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
703 if subs_type == "subscribe":
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
704 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
705 elif subs_type == "subscribed":
89
23caf1051099 multi-profile/subscription misc fixes
Goffi <goffi@goffi.org>
parents: 79
diff changeset
706 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
707 elif subs_type == "unsubscribe":
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
708 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
709 elif subs_type == "unsubscribed":
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
710 self.profiles[profile].presence.unsubscribed(to_jid)
0
goffi@necton2
parents:
diff changeset
711
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
712 def _addContact(self, to_jid_s, profile_key):
846
59d486726577 core: fix mispelled argument
souliane <souliane@mailoo.org>
parents: 834
diff changeset
713 return self.addContact(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
714
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
715 def addContact(self, to_jid, profile_key):
0
goffi@necton2
parents:
diff changeset
716 """Add a contact in roster list"""
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
717 profile = self.memory.getProfileName(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
718 assert profile
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
719 # 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
720 # RFC 6121 §3.1.2
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
721 self.profiles[profile].presence.subscribe(to_jid)
0
goffi@necton2
parents:
diff changeset
722
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
723 def _updateContact(self, to_jid_s, name, groups, profile_key):
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
724 return self.updateContact(jid.JID(to_jid_s), name, groups, profile_key)
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
725
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
726 def updateContact(self, to_jid, name, groups, profile_key):
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
727 """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
728 profile = self.memory.getProfileName(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
729 assert profile
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
730 groups = set(groups)
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
731 roster_item = RosterItem(to_jid)
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
732 roster_item.name = name or None
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
733 roster_item.groups = set(groups)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
734 return self.profiles[profile].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
735
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
736 def _delContact(self, to_jid_s, profile_key):
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
737 return self.delContact(jid.JID(to_jid_s), profile_key)
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
738
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
739 def delContact(self, to_jid, profile_key):
0
goffi@necton2
parents:
diff changeset
740 """Remove contact from roster list"""
63
0db25931b60d SàT: multi-profiles: somes fixes in core
Goffi <goffi@goffi.org>
parents: 62
diff changeset
741 profile = self.memory.getProfileName(profile_key)
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
742 assert profile
1355
33a21f06551d core: fixes bug introduced by 1262 (f8a8434dbac7) in SAT.delContact
souliane <souliane@mailoo.org>
parents: 1325
diff changeset
743 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
744 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
745
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
746 ## Discovery ##
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
747 # discovery methods are shortcuts to self.memory.disco
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
748 # 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
749
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
750 def hasFeature(self, *args, **kwargs):
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
751 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
752
951
027a054c6dda core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents: 949
diff changeset
753 def checkFeature(self, *args, **kwargs):
027a054c6dda core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents: 949
diff changeset
754 return self.memory.disco.checkFeature(*args, **kwargs)
027a054c6dda core (disco): added checkFeature method + fixed hasFeature test
Goffi <goffi@goffi.org>
parents: 949
diff changeset
755
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
756 def checkFeatures(self, *args, **kwargs):
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
757 return self.memory.disco.checkFeatures(*args, **kwargs)
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
758
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
759 def getDiscoInfos(self, *args, **kwargs):
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
760 return self.memory.disco.getInfos(*args, **kwargs)
0
goffi@necton2
parents:
diff changeset
761
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
762 def getDiscoItems(self, *args, **kwargs):
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
763 return self.memory.disco.getItems(*args, **kwargs)
0
goffi@necton2
parents:
diff changeset
764
2431
a9fac72825a2 memory (disco): added findServiceEntity helper method to get first service of a kind
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
765 def findServiceEntity(self, *args, **kwargs):
a9fac72825a2 memory (disco): added findServiceEntity helper method to get first service of a kind
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
766 return self.memory.disco.findServiceEntity(*args, **kwargs)
a9fac72825a2 memory (disco): added findServiceEntity helper method to get first service of a kind
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
767
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
768 def findServiceEntities(self, *args, **kwargs):
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
769 return self.memory.disco.findServiceEntities(*args, **kwargs)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
770
944
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
771 def findFeaturesSet(self, *args, **kwargs):
e1842ebcb2f3 core, plugin XEP-0115: discovery refactoring:
Goffi <goffi@goffi.org>
parents: 943
diff changeset
772 return self.memory.disco.findFeaturesSet(*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
773
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
774 def _findByFeatures(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
775 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
776 namespaces,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
777 identities,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
778 bare_jids,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
779 service,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
780 roster,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
781 own_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
782 local_device,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
783 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
784 ):
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
785 client = self.getClient(profile_key)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
786 return self.findByFeatures(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
787 client,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
788 namespaces,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
789 identities,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
790 bare_jids,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
791 service,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
792 roster,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
793 own_jid,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
794 local_device,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
795 )
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
796
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
797 @defer.inlineCallbacks
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
798 def findByFeatures(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
799 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
800 client,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
801 namespaces,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
802 identities=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
803 bare_jids=False,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
804 service=True,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
805 roster=True,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
806 own_jid=True,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
807 local_device=False,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
808 ):
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
809 """retrieve all services or contacts managing a set a features
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
810
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
811 @param namespaces(list[unicode]): features which must be handled
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
812 @param identities(list[tuple[unicode,unicode]], None): if not None or empty,
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
813 only keep those identities tuple must by (category, type)
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
814 @param bare_jids(bool): retrieve only bare_jids if True
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
815 if False, retrieve full jid of connected devices
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
816 @param service(bool): if True return service from our 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
817 @param roster(bool): if True, return entities in 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
818 full jid of all matching resources available will be returned
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
819 @param own_jid(bool): if True, return profile's jid resources
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
820 @param local_device(bool): if True, return profile's jid local resource
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
821 (i.e. client.jid)
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
822 @return (tuple(dict[jid.JID(), tuple[unicode, unicode, unicode]]*3)): found
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
823 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
824 - 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
825 - 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
826 - roster 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
827 """
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
828 if not identities:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
829 identities = None
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
830 if not namespaces and not identities:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
831 raise exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
832 "at least one namespace or one identity must be set"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
833 )
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
834 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
835 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
836 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
837 if 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
838 services_jids = yield self.findFeaturesSet(client, namespaces)
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
839 for service_jid in services_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
840 infos = yield self.getDiscoInfos(client, service_jid)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
841 if identities is not None and not set(infos.identities.keys()).issuperset(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
842 identities
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
843 ):
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
844 continue
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
845 found_identities = [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
846 (cat, type_, name or u"")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
847 for (cat, type_), name in infos.identities.iteritems()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
848 ]
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
849 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
850
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
851 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
852 if 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
853 jids.extend(client.roster.getJids())
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
854 if own_jid:
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
855 jids.append(client.jid.userhostJID())
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
856
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
857 for found, jids in (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
858 (found_own, [client.jid.userhostJID()]),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
859 (found_roster, client.roster.getJids()),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
860 ):
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
861 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
862 if jid_.resource:
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
863 if bare_jids:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
864 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
865 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
866 else:
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
867 if bare_jids:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
868 resources = [None]
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
869 else:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
870 try:
2597
9446f1ea9eac core: discoFindByFeatures now return only available resources
Goffi <goffi@goffi.org>
parents: 2595
diff changeset
871 resources = self.memory.getAvailableResources(client, jid_)
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
872 except exceptions.UnknownEntityError:
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
873 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
874 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
875 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
876 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
877 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
878 infos = yield self.getDiscoInfos(client, full_jid)
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
879 if infos.features.issuperset(namespaces):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
880 if identities is not None and not set(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
881 infos.identities.keys()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
882 ).issuperset(identities):
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
883 continue
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
884 found_identities = [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
885 (cat, type_, name or u"")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
886 for (cat, type_), name in infos.identities.iteritems()
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
887 ]
2536
27539029a662 core: added bare_jid and identities arguments to discoGetByFeatures:
Goffi <goffi@goffi.org>
parents: 2534
diff changeset
888 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
889
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
890 defer.returnValue((found_service, found_own, found_roster))
742
03744d9ebc13 plugin XEP-0033: implementation of the addressing feature:
souliane <souliane@mailoo.org>
parents: 728
diff changeset
891
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
892 ## Generic HMI ##
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
893
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
894 def _killAction(self, keep_id, client):
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
895 log.debug(u"Killing action {} for timeout".format(keep_id))
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
896 client.actions[keep_id]
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
897
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
898 def actionNew(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
899 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
900 action_data,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
901 security_limit=C.NO_SECURITY_LIMIT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
902 keep_id=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
903 profile=C.PROF_KEY_NONE,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
904 ):
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
905 """Shortcut to bridge.actionNew which generate and 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
906
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
907 @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
908 @param security_limit: %(doc_security_limit)s
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
909 @param keep_id(None, unicode): if not None, used to keep action for differed
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
910 retrieval. Must be set to the callback_id.
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
911 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
912 @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
913 """
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
914 id_ = unicode(uuid.uuid4())
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
915 if keep_id is not None:
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
916 client = self.getClient(profile)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
917 action_timer = reactor.callLater(60 * 30, self._killAction, keep_id, client)
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
918 client.actions[keep_id] = (action_data, id_, security_limit, action_timer)
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
919
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
920 self.bridge.actionNew(action_data, id_, security_limit, profile)
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
921
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
922 def actionsGet(self, profile):
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
923 """Return current non answered actions
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
924
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
925 @param profile: %(doc_profile)s
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
926 """
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
927 client = self.getClient(profile)
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
928 return [action_tuple[:-1] for action_tuple in client.actions.itervalues()]
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
929
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
930 def registerProgressCb(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
931 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
932 ):
0
goffi@necton2
parents:
diff changeset
933 """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
934 if metadata is None:
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
935 metadata = {}
538
2c4016921403 core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents: 536
diff changeset
936 client = self.getClient(profile)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
937 if progress_id in client._progress_cb:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
938 raise exceptions.ConflictError(u"Progress ID is not unique !")
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
939 client._progress_cb[progress_id] = (callback, metadata)
0
goffi@necton2
parents:
diff changeset
940
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
941 def removeProgressCb(self, progress_id, profile):
0
goffi@necton2
parents:
diff changeset
942 """Remove a progress callback"""
538
2c4016921403 core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents: 536
diff changeset
943 client = self.getClient(profile)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
944 try:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
945 del client._progress_cb[progress_id]
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
946 except KeyError:
1585
846a39900fa6 plugins XEP-0096, XEP-0260, file: sendFile method is managed by file plugin, which choose the best available method + progress_id fix
Goffi <goffi@goffi.org>
parents: 1573
diff changeset
947 log.error(_(u"Trying to remove an unknow progress callback"))
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
948
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
949 def _progressGet(self, progress_id, profile):
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
950 data = self.progressGet(progress_id, profile)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
951 return {k: unicode(v) for k, v in data.iteritems()}
0
goffi@necton2
parents:
diff changeset
952
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
953 def progressGet(self, progress_id, profile):
0
goffi@necton2
parents:
diff changeset
954 """Return a dict with progress information
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
955
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
956 @param progress_id(unicode): unique id of the progressing element
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
957 @param profile: %(doc_profile)s
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
958 @return (dict): data with the following keys:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
959 'position' (int): current possition
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
960 'size' (int): end_position
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
961 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
962 returned
0
goffi@necton2
parents:
diff changeset
963 """
538
2c4016921403 core, frontends, bridgen plugins: fixed methods which were unproperly managing multi-profiles
Goffi <goffi@goffi.org>
parents: 536
diff changeset
964 client = self.getClient(profile)
0
goffi@necton2
parents:
diff changeset
965 try:
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
966 data = client._progress_cb[progress_id][0](progress_id, profile)
0
goffi@necton2
parents:
diff changeset
967 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
968 data = {}
0
goffi@necton2
parents:
diff changeset
969 return data
goffi@necton2
parents:
diff changeset
970
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
971 def _progressGetAll(self, profile_key):
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
972 progress_all = self.progressGetAll(profile_key)
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
973 for profile, progress_dict in progress_all.iteritems():
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
974 for progress_id, data in progress_dict.iteritems():
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
975 for key, value in data.iteritems():
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
976 data[key] = unicode(value)
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
977 return progress_all
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
978
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
979 def progressGetAllMetadata(self, profile_key):
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
980 """Return all progress metadata at once
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
981
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
982 @param profile_key: %(doc_profile)s
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
983 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
984 returned
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
985 @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
986 progress_dict map progress_id to progress_data
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
987 progress_metadata is the same dict as sent by [progressStarted]
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
988 """
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
989 clients = self.getClients(profile_key)
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
990 progress_all = {}
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
991 for client in clients:
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
992 profile = client.profile
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
993 progress_dict = {}
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
994 progress_all[profile] = progress_dict
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
995 for (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
996 progress_id,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
997 (dummy, progress_metadata),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
998 ) in client._progress_cb.iteritems():
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
999 progress_dict[progress_id] = progress_metadata
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1000 return progress_all
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1001
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1002 def progressGetAll(self, profile_key):
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1003 """Return all progress status at once
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1004
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1005 @param profile_key: %(doc_profile)s
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1006 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
1007 @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
1008 progress_dict map progress_id to progress_data
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
1009 progress_data is the same dict as returned by [progressGet]
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1010 """
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1011 clients = self.getClients(profile_key)
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1012 progress_all = {}
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1013 for client in clients:
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1014 profile = client.profile
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1015 progress_dict = {}
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1016 progress_all[profile] = progress_dict
1626
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1017 for progress_id, (progress_cb, dummy) in client._progress_cb.iteritems():
63cef4dbf2a4 core, plugins file, XEP-0234, bridge: progression api enhancement:
Goffi <goffi@goffi.org>
parents: 1624
diff changeset
1018 progress_dict[progress_id] = progress_cb(progress_id, profile)
1522
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1019 return progress_all
7d7e57a84792 core: progression handling improvments:
Goffi <goffi@goffi.org>
parents: 1503
diff changeset
1020
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1021 def registerCallback(self, callback, *args, **kwargs):
1603
2b82d846848e core: added callback_id in DataError message of launchCallback
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1022 """Register a callback.
2b82d846848e core: added callback_id in DataError message of launchCallback
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1023
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1024 @param callback(callable): method to call
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1025 @param kwargs: can contain:
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1026 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
1027 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
1028 if possible
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1029 one_shot(bool): True to delete callback once it have been called
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1030 @return: id of the registered callback
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1031 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1032 callback_id = kwargs.pop("force_id", None)
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1033 if callback_id is None:
2167
4b78b4c7f805 core, frontends: various fixes for Libervia:
Goffi <goffi@goffi.org>
parents: 2147
diff changeset
1034 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
1035 else:
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1036 if callback_id in self._cb_map:
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1037 raise exceptions.ConflictError(_(u"id already registered"))
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1038 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
1039
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1040 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
1041
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1042 def purgeCallback():
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1043 try:
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1044 self.removeCallback(callback_id)
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1045 except KeyError:
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1046 pass
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1047
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1048 reactor.callLater(1800, purgeCallback)
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1049
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1050 return callback_id
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1051
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1052 def removeCallback(self, callback_id):
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1053 """ Remove a previously registered callback
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1054 @param callback_id: id returned by [registerCallback] """
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 991
diff changeset
1055 log.debug("Removing callback [%s]" % callback_id)
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1056 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
1057
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 914
diff changeset
1058 def launchCallback(self, callback_id, data=None, profile_key=C.PROF_KEY_NONE):
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1059 """Launch a specific callback
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1060
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1061 @param callback_id: id of the action (callback) to launch
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1062 @param data: optional data
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1063 @profile_key: %(doc_profile_key)s
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1064 @return: a deferred which fire a dict where key can be:
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1065 - xmlui: a XMLUI need to be displayed
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1066 - 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
1067 values
1262
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1068 - C.BOOL_TRUE
f8a8434dbac7 core: improved roster management + misc:
Goffi <goffi@goffi.org>
parents: 1234
diff changeset
1069 - C.BOOL_FALSE
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1070 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1071 #  FIXME: security limit need to be checked here
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1072 try:
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1073 client = self.getClient(profile_key)
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1074 except exceptions.NotFound:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1075 # client is not available yet
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1076 profile = self.memory.getProfileName(profile_key)
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1077 if not profile:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1078 raise exceptions.ProfileUnknownError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1079 _(u"trying to launch action with a non-existant profile")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1080 )
1622
5b24d6bf5d15 core, bridge: actionsGet:
Goffi <goffi@goffi.org>
parents: 1603
diff changeset
1081 else:
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1082 profile = client.profile
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1083 # we check if the action is kept, and remove it
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1084 try:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1085 action_tuple = client.actions[callback_id]
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1086 except KeyError:
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1087 pass
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1088 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1089 action_tuple[-1].cancel() # the last item is the action timer
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1090 del client.actions[callback_id]
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1091
22
bb72c29f3432 added action cb mechanism for buttons. Tested with a temporary new user registration button.
Goffi <goffi@goffi.org>
parents: 18
diff changeset
1092 try:
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1093 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
1094 except KeyError:
1603
2b82d846848e core: added callback_id in DataError message of launchCallback
Goffi <goffi@goffi.org>
parents: 1599
diff changeset
1095 raise exceptions.DataError(u"Unknown callback id {}".format(callback_id))
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1096
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1097 if kwargs.get("with_data", False):
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1098 if data is None:
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1099 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
1100 args, kwargs = (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1101 list(args)[:],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1102 kwargs.copy(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1103 ) # we don't want to modify the original (kw)args
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1104 args.insert(0, data)
1624
7e749e8eefd0 core: fixed launchAction:
Goffi <goffi@goffi.org>
parents: 1622
diff changeset
1105 kwargs["profile"] = profile
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1106 del kwargs["with_data"]
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1107
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1108 if kwargs.pop("one_shot", False):
806
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1109 self.removeCallback(callback_id)
5d6c45d6ee1b core: added "one_shot" option to registered callback:
Goffi <goffi@goffi.org>
parents: 801
diff changeset
1110
759
93bd868b8fb6 backend, frontends: callbacks refactoring:
Goffi <goffi@goffi.org>
parents: 755
diff changeset
1111 return defer.maybeDeferred(callback, *args, **kwargs)
0
goffi@necton2
parents:
diff changeset
1112
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1113 # Menus management
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1114
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1115 def _getMenuCanonicalPath(self, path):
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1116 """give canonical form of path
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1117
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1118 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
1119 @param path(iterable[unicode]): untranslated path to menu
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1120 @return (tuple[unicode]): canonical form of path
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1121 """
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1122 return tuple((p.lower().strip() for p in path))
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1123
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1124 def importMenu(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1125 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1126 path,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1127 callback,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1128 security_limit=C.NO_SECURITY_LIMIT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1129 help_string="",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1130 type_=C.MENU_GLOBAL,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1131 ):
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1132 """register a new menu for frontends
1963
a2bc5089c2eb backend, frontends: message refactoring (huge commit):
Goffi <goffi@goffi.org>
parents: 1955
diff changeset
1133
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1134 @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
1135 (category/subcategory/.../item) (e.g.: ("File", "Open"))
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1136 /!\ 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
1137 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
1138 it must be unique independently of case.
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1139 @param callback(callable): method to be called when menuitem is selected, callable
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1140 or a callback id (string) as returned by [registerCallback]
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1141 @param security_limit(int): %(doc_security_limit)s
809
743b757777d3 core: security limit in menus
Goffi <goffi@goffi.org>
parents: 807
diff changeset
1142 /!\ security_limit MUST be added to data in launchCallback if used #TODO
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1143 @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
1144 show as a tooltip).
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1145 /!\ use D_() instead of _() for translations
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1146 @param type(unicode): one of:
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1147 - 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
1148 something like File/Open)
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1149 - 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
1150 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
1151 - 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
1152 menu_data must contain a "jid" data
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1153 - 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
1154 commands, jid is already filled)
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1155 menu_data must contain a "jid" data
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1156 - 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
1157 roster.
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1158 menu_data must contain a "room_jid" data
2643
189e38fb11ff core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1159 - 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
1160 microblog, group is already filled)
1092
0eefc74c346b core (menus): constants are used for menu types
Goffi <goffi@goffi.org>
parents: 1089
diff changeset
1161 menu_data must contain a "group" data
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1162 @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
1163 """
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1164
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1165 if callable(callback):
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1166 callback_id = self.registerCallback(callback, with_data=True)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1167 elif isinstance(callback, basestring):
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1168 # The callback is already registered
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1169 callback_id = callback
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1170 try:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1171 callback, args, kwargs = self._cb_map[callback_id]
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1172 except KeyError:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1173 raise exceptions.DataError("Unknown callback id")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1174 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
1175 else:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1176 raise exceptions.DataError("Unknown callback type")
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1177
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1178 for menu_data in self._menus.itervalues():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1179 if menu_data["path"] == path and menu_data["type"] == type_:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1180 raise exceptions.ConflictError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1181 _("A menu with the same path and type already exists")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1182 )
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1183
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1184 path_canonical = self._getMenuCanonicalPath(path)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1185 menu_key = (type_, path_canonical)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1186
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1187 if menu_key in self._menus_paths:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1188 raise exceptions.ConflictError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1189 u"this menu path is already used: {path} ({menu_key})".format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1190 path=path_canonical, menu_key=menu_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1191 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1192 )
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1193
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1194 menu_data = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1195 "path": tuple(path),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1196 "path_canonical": path_canonical,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1197 "security_limit": security_limit,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1198 "help_string": help_string,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1199 "type": type_,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1200 }
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1201
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1202 self._menus[callback_id] = menu_data
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1203 self._menus_paths[menu_key] = callback_id
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1204
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1205 return callback_id
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1206
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1207 def getMenus(self, language="", security_limit=C.NO_SECURITY_LIMIT):
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1208 """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
1209
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1210 @param language: language used for translation, or empty string for default
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1211 @param security_limit: %(doc_security_limit)s
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1212 @return: array of tuple with:
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1213 - menu id (same as callback_id)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1214 - menu type
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1215 - raw menu path (array of strings)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1216 - 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
1217 - 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
1218 - 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
1219 - 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
1220 """
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1221 ret = []
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1222 for menu_id, menu_data in self._menus.iteritems():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1223 type_ = menu_data["type"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1224 path = menu_data["path"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1225 menu_security_limit = menu_data["security_limit"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1226 if security_limit != C.NO_SECURITY_LIMIT and (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1227 menu_security_limit == C.NO_SECURITY_LIMIT
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1228 or menu_security_limit > security_limit
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1229 ):
809
743b757777d3 core: security limit in menus
Goffi <goffi@goffi.org>
parents: 807
diff changeset
1230 continue
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1231 languageSwitch(language)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1232 path_i18n = [_(elt) for elt in path]
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1233 languageSwitch()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1234 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
1235 ret.append((menu_id, type_, path, path_i18n, extra))
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1236
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1237 return ret
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1238
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1239 def _launchMenu(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1240 self,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1241 menu_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1242 path,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1243 data=None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1244 security_limit=C.NO_SECURITY_LIMIT,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1245 profile_key=C.PROF_KEY_NONE,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1246 ):
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1247 client = self.getClient(profile_key)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1248 return self.launchMenu(client, menu_type, path, data, security_limit)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1249
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1250 def launchMenu(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1251 self, client, menu_type, path, data=None, security_limit=C.NO_SECURITY_LIMIT
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1252 ):
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1253 """launch action a menu action
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1254
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1255 @param menu_type(unicode): type of menu to launch
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1256 @param path(iterable[unicode]): canonical path of the menu
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1257 @params data(dict): menu data
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1258 @raise NotFound: this path is not known
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1259 """
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1260 # FIXME: manage security_limit here
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1261 # defaut security limit should be high instead of C.NO_SECURITY_LIMIT
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1262 canonical_path = self._getMenuCanonicalPath(path)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1263 menu_key = (menu_type, canonical_path)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1264 try:
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1265 callback_id = self._menus_paths[menu_key]
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1266 except KeyError:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1267 raise exceptions.NotFound(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1268 u"Can't find menu {path} ({menu_type})".format(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1269 path=canonical_path, menu_type=menu_type
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1270 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1271 )
2126
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1272 return self.launchCallback(callback_id, data, client.profile)
2f264f3df280 core (menus): improvments:
Goffi <goffi@goffi.org>
parents: 2113
diff changeset
1273
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1274 def getMenuHelp(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
1275 """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
1276
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1277 @param menu_id: id of the menu (same as callback_id)
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1278 @param language: language used for translation, or empty string for default
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1279 @param return: translated help
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1280
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1281 """
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1282 try:
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1283 menu_data = self._menus[menu_id]
101
783e9d6980ec Couchsurfing plugin: first draft
Goffi <goffi@goffi.org>
parents: 90
diff changeset
1284 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
1285 raise exceptions.DataError("Trying to access an unknown menu")
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1286 languageSwitch(language)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2597
diff changeset
1287 help_string = _(menu_data["help_string"])
773
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1288 languageSwitch()
eac23b1aad90 core: dynamics menus refactoring:
Goffi <goffi@goffi.org>
parents: 771
diff changeset
1289 return help_string