Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0060.py @ 3088:d1464548055a
plugin file download: meta plugin to handle file download:
- first code in backend to use async/await Python syntax \o/
- plugin with file upload
- URL schemes can be registered
- `http` and `https` schemes are handled by default
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 20 Dec 2019 12:28:04 +0100 |
parents | 73db9db8b9e1 |
children | cea52c9ddfd9 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
4 # SAT plugin for Publish-Subscribe (xep-0060) |
2771 | 5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
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:
594
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:
594
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:
594
diff
changeset
|
10 # (at your option) any later version. |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
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:
594
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:
594
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:
594
diff
changeset
|
15 # GNU Affero General Public License for more details. |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
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:
594
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
3062
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
20 |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
21 from collections import namedtuple |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
22 import urllib.request, urllib.parse, urllib.error |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
23 from functools import reduce |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
24 |
771 | 25 from sat.core.i18n import _ |
916
1a759096ccbd
core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents:
891
diff
changeset
|
26 from sat.core.constants import Const as C |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
916
diff
changeset
|
27 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
28 |
1483
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
29 from sat.core import exceptions |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
30 from sat.tools import sat_defer |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
31 from sat.tools.common import data_format |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
32 |
3062
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
33 from zope.interface import implementer |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
34 |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
35 from wokkel import disco |
1777 | 36 from wokkel import data_form |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
37 from wokkel import generic |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
38 |
2413
70399d1acb47
tmp: removed sat.tmp hierarchy and fixed references to it as it is now an independant sat_tmp repository
Goffi <goffi@goffi.org>
parents:
2393
diff
changeset
|
39 # XXX: sat_tmp.wokkel.pubsub is actually use instead of wokkel version |
70399d1acb47
tmp: removed sat.tmp hierarchy and fixed references to it as it is now an independant sat_tmp repository
Goffi <goffi@goffi.org>
parents:
2393
diff
changeset
|
40 # mam and rsm come from sat_tmp.wokkel too |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
41 from wokkel import pubsub |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
42 from wokkel import rsm |
1777 | 43 from wokkel import mam |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
44 |
3062
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
45 from twisted.words.protocols.jabber import jid, error |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
46 from twisted.internet import reactor, defer |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
47 |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
48 |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
49 log = getLogger(__name__) |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 |
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 PLUGIN_INFO = { |
3028 | 52 C.PI_NAME: "Publish-Subscribe", |
53 C.PI_IMPORT_NAME: "XEP-0060", | |
54 C.PI_TYPE: "XEP", | |
55 C.PI_PROTOCOLS: ["XEP-0060"], | |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
56 C.PI_DEPENDENCIES: [], |
3028 | 57 C.PI_RECOMMENDATIONS: ["XEP-0059", "XEP-0313"], |
58 C.PI_MAIN: "XEP_0060", | |
59 C.PI_HANDLER: "yes", | |
60 C.PI_DESCRIPTION: _("""Implementation of PubSub Protocol"""), | |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
61 } |
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 |
1777 | 63 UNSPECIFIED = "unspecified error" |
64 | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
65 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
66 Extra = namedtuple("Extra", ("rsm_request", "extra")) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
67 # rsm_request is the rsm.RSMRequest build with rsm_ prefixed keys, or None |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
68 # extra is a potentially empty dict |
2769
9282b289b964
plugin XEP-0060: set a 30s timeout on items get
Goffi <goffi@goffi.org>
parents:
2760
diff
changeset
|
69 TIMEOUT = 30 |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
70 |
588
beaf6bec2fcd
Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
587
diff
changeset
|
71 class XEP_0060(object): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
72 OPT_ACCESS_MODEL = "pubsub#access_model" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
73 OPT_PERSIST_ITEMS = "pubsub#persist_items" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
74 OPT_MAX_ITEMS = "pubsub#max_items" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
75 OPT_DELIVER_PAYLOADS = "pubsub#deliver_payloads" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
76 OPT_SEND_ITEM_SUBSCRIBE = "pubsub#send_item_subscribe" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
77 OPT_NODE_TYPE = "pubsub#node_type" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
78 OPT_SUBSCRIPTION_TYPE = "pubsub#subscription_type" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
79 OPT_SUBSCRIPTION_DEPTH = "pubsub#subscription_depth" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
80 OPT_ROSTER_GROUPS_ALLOWED = "pubsub#roster_groups_allowed" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
81 OPT_PUBLISH_MODEL = "pubsub#publish_model" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
82 ACCESS_OPEN = "open" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
83 ACCESS_PRESENCE = "presence" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
84 ACCESS_ROSTER = "roster" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
85 ACCESS_PUBLISHER_ROSTER = "publisher-roster" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
86 ACCESS_AUTHORIZE = "authorize" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
87 ACCESS_WHITELIST = "whitelist" |
2647
1bf7e89fded0
plugin XEP-0060: added singleton ID ("current")
Goffi <goffi@goffi.org>
parents:
2643
diff
changeset
|
88 ID_SINGLETON = "current" |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 |
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 def __init__(self, host): |
3028 | 91 log.info(_("PubSub plugin initialization")) |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
92 self.host = host |
3028 | 93 self._rsm = host.plugins.get("XEP-0059") |
94 self._mam = host.plugins.get("XEP-0313") | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
95 self._node_cb = {} # dictionnary of callbacks for node (key: node, value: list of callbacks) |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
96 self.rt_sessions = sat_defer.RTDeferredSessions() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
97 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
98 "psNodeCreate", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
99 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
100 in_sign="ssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
101 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
102 method=self._createNode, |
3028 | 103 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
104 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
105 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
106 "psNodeConfigurationGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
107 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
108 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
109 out_sign="a{ss}", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
110 method=self._getNodeConfiguration, |
3028 | 111 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
112 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
113 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
114 "psNodeConfigurationSet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
115 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
116 in_sign="ssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
117 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
118 method=self._setNodeConfiguration, |
3028 | 119 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
120 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
121 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
122 "psNodeAffiliationsGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
123 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
124 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
125 out_sign="a{ss}", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
126 method=self._getNodeAffiliations, |
3028 | 127 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
128 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
129 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
130 "psNodeAffiliationsSet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
131 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
132 in_sign="ssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
133 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
134 method=self._setNodeAffiliations, |
3028 | 135 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
136 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
137 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
138 "psNodeSubscriptionsGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
139 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
140 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
141 out_sign="a{ss}", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
142 method=self._getNodeSubscriptions, |
3028 | 143 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
144 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
145 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
146 "psNodeSubscriptionsSet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
147 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
148 in_sign="ssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
149 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
150 method=self._setNodeSubscriptions, |
3028 | 151 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
152 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
153 host.bridge.addMethod( |
2801
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
154 "psNodePurge", |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
155 ".plugin", |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
156 in_sign="sss", |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
157 out_sign="", |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
158 method=self._purgeNode, |
3028 | 159 async_=True, |
2801
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
160 ) |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
161 host.bridge.addMethod( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
162 "psNodeDelete", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
163 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
164 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
165 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
166 method=self._deleteNode, |
3028 | 167 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
168 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
169 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
170 "psNodeWatchAdd", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
171 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
172 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
173 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
174 method=self._addWatch, |
3028 | 175 async_=False, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
176 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
177 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
178 "psNodeWatchRemove", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
179 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
180 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
181 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
182 method=self._removeWatch, |
3028 | 183 async_=False, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
184 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
185 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
186 "psAffiliationsGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
187 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
188 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
189 out_sign="a{ss}", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
190 method=self._getAffiliations, |
3028 | 191 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
192 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
193 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
194 "psItemsGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
195 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
196 in_sign="ssiassa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
197 out_sign="(asa{ss})", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
198 method=self._getItems, |
3028 | 199 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
200 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
201 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
202 "psItemSend", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
203 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
204 in_sign="ssssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
205 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
206 method=self._sendItem, |
3028 | 207 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
208 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
209 host.bridge.addMethod( |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
210 "psItemsSend", |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
211 ".plugin", |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
212 in_sign="ssasa{ss}s", |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
213 out_sign="as", |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
214 method=self._sendItems, |
3028 | 215 async_=True, |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
216 ) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
217 host.bridge.addMethod( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
218 "psRetractItem", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
219 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
220 in_sign="sssbs", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
221 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
222 method=self._retractItem, |
3028 | 223 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
224 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
225 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
226 "psRetractItems", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
227 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
228 in_sign="ssasbs", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
229 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
230 method=self._retractItems, |
3028 | 231 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
232 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
233 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
234 "psSubscribe", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
235 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
236 in_sign="ssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
237 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
238 method=self._subscribe, |
3028 | 239 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
240 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
241 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
242 "psUnsubscribe", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
243 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
244 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
245 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
246 method=self._unsubscribe, |
3028 | 247 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
248 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
249 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
250 "psSubscriptionsGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
251 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
252 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
253 out_sign="aa{ss}", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
254 method=self._subscriptions, |
3028 | 255 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
256 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
257 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
258 "psSubscribeToMany", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
259 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
260 in_sign="a(ss)sa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
261 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
262 method=self._subscribeToMany, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
263 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
264 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
265 "psGetSubscribeRTResult", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
266 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
267 in_sign="ss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
268 out_sign="(ua(sss))", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
269 method=self._manySubscribeRTResult, |
3028 | 270 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
271 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
272 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
273 "psGetFromMany", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
274 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
275 in_sign="a(ss)ia{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
276 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
277 method=self._getFromMany, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
278 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
279 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
280 "psGetFromManyRTResult", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
281 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
282 in_sign="ss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
283 out_sign="(ua(sssasa{ss}))", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
284 method=self._getFromManyRTResult, |
3028 | 285 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
286 ) |
2444
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
287 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
288 # high level observer method |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
289 host.bridge.addSignal( |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
290 "psEvent", ".plugin", signature="ssssss" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
291 ) # args: category, service(jid), node, type (C.PS_ITEMS, C.PS_DELETE), data, profile |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
292 |
2444
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
293 # low level observer method, used if service/node is in watching list (see psNodeWatch* methods) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
294 host.bridge.addSignal( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
295 "psEventRaw", ".plugin", signature="sssass" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
296 ) # args: service(jid), node, type (C.PS_ITEMS, C.PS_DELETE), list of item_xml, profile |
2444
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
297 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
298 def getHandler(self, client): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
299 client.pubsub_client = SatPubSubClient(self.host, self) |
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
300 return client.pubsub_client |
1282
74d558e6c9fd
plugin XEP-0060: free SatPubSubClient instance on profile disconnection
souliane <souliane@mailoo.org>
parents:
1268
diff
changeset
|
301 |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
302 @defer.inlineCallbacks |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
303 def profileConnected(self, client): |
2444
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
304 client.pubsub_watching = set() |
2459
a9c092bf4ee9
plugin XEP-0060: added an config option to set pubsub service
Goffi <goffi@goffi.org>
parents:
2444
diff
changeset
|
305 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
306 client.pubsub_service = jid.JID( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
307 self.host.memory.getConfig("", "pubsub_service") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
308 ) |
2459
a9c092bf4ee9
plugin XEP-0060: added an config option to set pubsub service
Goffi <goffi@goffi.org>
parents:
2444
diff
changeset
|
309 except RuntimeError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
310 log.info( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
311 _( |
3028 | 312 "Can't retrieve pubsub_service from conf, we'll use first one that we find" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
313 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
314 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
315 client.pubsub_service = yield self.host.findServiceEntity( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
316 client, "pubsub", "service" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
317 ) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
318 |
1483
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
319 def getFeatures(self, profile): |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
320 try: |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
321 client = self.host.getClient(profile) |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
322 except exceptions.ProfileNotSetError: |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
323 return {} |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
324 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
325 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
326 "service": client.pubsub_service.full() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
327 if client.pubsub_service is not None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
328 else "" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
329 } |
1483
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
330 except AttributeError: |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
331 if self.host.isConnected(profile): |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
332 log.debug("Profile is not connected, service is not checked yet") |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
333 else: |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
334 log.error("Service should be available !") |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
335 return {} |
0f0889028eea
plugin XEP-0060: implemented getFeatures, data has a "service" key if service is found for this profile
Goffi <goffi@goffi.org>
parents:
1459
diff
changeset
|
336 |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
337 def parseExtra(self, extra): |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
338 """Parse extra dictionnary |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
339 |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
340 used bridge's extra dictionnaries |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
341 @param extra(dict): extra data used to configure request |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
342 @return(Extra): filled Extra instance |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
343 """ |
2484 | 344 if extra is None: |
345 rsm_request = None | |
346 extra = {} | |
347 else: | |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
348 # order-by |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
349 if C.KEY_ORDER_BY in extra: |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
350 # FIXME: we temporarily manage only one level of ordering |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
351 # we need to switch to a fully serialised extra data |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
352 # to be able to encode a whole ordered list |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
353 extra[C.KEY_ORDER_BY] = [extra.pop(C.KEY_ORDER_BY)] |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
354 |
1777 | 355 # rsm |
2702
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
356 if self._rsm is None: |
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
357 rsm_request = None |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
358 else: |
2702
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
359 rsm_request = self._rsm.parseExtra(extra) |
1777 | 360 |
361 # mam | |
2702
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
362 if self._mam is None: |
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
363 mam_request = None |
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
364 else: |
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
365 mam_request = self._mam.parseExtra(extra, with_rsm=False) |
1777 | 366 |
2702
6555e9835ff8
plugin XEP-0060: use new parseExtra methods from MAM and RSM
Goffi <goffi@goffi.org>
parents:
2647
diff
changeset
|
367 if mam_request is not None: |
3028 | 368 assert "mam" not in extra |
369 extra["mam"] = mam_request | |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
370 |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
371 return Extra(rsm_request, extra) |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
372 |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
373 def addManagedNode(self, node, **kwargs): |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
374 """Add a handler for a node |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
375 |
1760
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
376 @param node(unicode): node to monitor |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
377 all node *prefixed* with this one will be triggered |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
378 @param **kwargs: method(s) to call when the node is found |
2305
972e33507609
plugin XEP-0060: addManagedNode callbacks now use client syntax instead of profile
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
379 the method must be named after PubSub constants in lower case |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
380 and suffixed with "_cb" |
2305
972e33507609
plugin XEP-0060: addManagedNode callbacks now use client syntax instead of profile
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
381 e.g.: "items_cb" for C.PS_ITEMS, "delete_cb" for C.PS_DELETE |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
382 """ |
1760
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
383 assert node is not None |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
384 assert kwargs |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
385 callbacks = self._node_cb.setdefault(node, {}) |
3028 | 386 for event, cb in kwargs.items(): |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
387 event_name = event[:-3] |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
388 assert event_name in C.PS_EVENTS |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
389 callbacks.setdefault(event_name, []).append(cb) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
390 |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
391 def removeManagedNode(self, node, *args): |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
392 """Add a handler for a node |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
393 |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
394 @param node(unicode): node to monitor |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
395 @param *args: callback(s) to remove |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
396 """ |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
397 assert args |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
398 try: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
399 registred_cb = self._node_cb[node] |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
400 except KeyError: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
401 pass |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
402 else: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
403 for callback in args: |
3028 | 404 for event, cb_list in registred_cb.items(): |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
405 try: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
406 cb_list.remove(callback) |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
407 except ValueError: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
408 pass |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
409 else: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
410 log.debug( |
3028 | 411 "removed callback {cb} for event {event} on node {node}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
412 cb=callback, event=event, node=node |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
413 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
414 ) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
415 if not cb_list: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
416 del registred_cb[event] |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
417 if not registred_cb: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
418 del self._node_cb[node] |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
419 return |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
420 log.error( |
3028 | 421 "Trying to remove inexistant callback {cb} for node {node}".format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
422 cb=callback, node=node |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
423 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
424 ) |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
425 |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
426 # def listNodes(self, service, nodeIdentifier='', profile=C.PROF_KEY_NONE): |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
427 # """Retrieve the name of the nodes that are accessible on the target service. |
1242
f584fbda4773
plugin XEP-0060: fixes listing the nodes on the pubsub service
souliane <souliane@mailoo.org>
parents:
1219
diff
changeset
|
428 |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
429 # @param service (JID): target service |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
430 # @param nodeIdentifier (str): the parent node name (leave empty to retrieve first-level nodes) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
431 # @param profile (str): %(doc_profile)s |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
432 # @return: deferred which fire a list of nodes |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
433 # """ |
2148
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
434 # client = self.host.getClient(profile) |
a543eda2c923
core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
435 # d = self.host.getDiscoItems(client, service, nodeIdentifier) |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
436 # d.addCallback(lambda result: [item.getAttribute('node') for item in result.toElement().children if item.hasAttribute('node')]) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
437 # return d |
1242
f584fbda4773
plugin XEP-0060: fixes listing the nodes on the pubsub service
souliane <souliane@mailoo.org>
parents:
1219
diff
changeset
|
438 |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
439 # def listSubscribedNodes(self, service, nodeIdentifier='', filter_='subscribed', profile=C.PROF_KEY_NONE): |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
440 # """Retrieve the name of the nodes to which the profile is subscribed on the target service. |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
441 |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
442 # @param service (JID): target service |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
443 # @param nodeIdentifier (str): the parent node name (leave empty to retrieve all subscriptions) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
444 # @param filter_ (str): filter the result according to the given subscription type: |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
445 # - None: do not filter |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
446 # - 'pending': subscription has not been approved yet by the node owner |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
447 # - 'unconfigured': subscription options have not been configured yet |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
448 # - 'subscribed': subscription is complete |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
449 # @param profile (str): %(doc_profile)s |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
450 # @return: Deferred list[str] |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
451 # """ |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
452 # d = self.subscriptions(service, nodeIdentifier, profile_key=profile) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
453 # d.addCallback(lambda subs: [sub.getAttribute('node') for sub in subs if sub.getAttribute('subscription') == filter_]) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
454 # return d |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
455 |
2776
838f53730ce4
plugin pubsub admin: pubsub administrator first draft:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
456 def _sendItem(self, service, nodeIdentifier, payload, item_id=None, extra=None, |
838f53730ce4
plugin pubsub admin: pubsub administrator first draft:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
457 profile_key=C.PROF_KEY_NONE): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
458 client = self.host.getClient(profile_key) |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
459 service = None if not service else jid.JID(service) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
460 d = self.sendItem( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
461 client, service, nodeIdentifier, payload, item_id or None, extra |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
462 ) |
3028 | 463 d.addCallback(lambda ret: ret or "") |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
464 return d |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
465 |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
466 def _sendItems(self, service, nodeIdentifier, items, extra=None, |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
467 profile_key=C.PROF_KEY_NONE): |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
468 client = self.host.getClient(profile_key) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
469 service = None if not service else jid.JID(service) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
470 try: |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
471 items = [generic.parseXml(item.encode('utf-8')) for item in items] |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
472 except Exception as e: |
3028 | 473 raise exceptions.DataError(_("Can't parse items: {msg}").format( |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
474 msg=e)) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
475 d = self.sendItems( |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
476 client, service, nodeIdentifier, items, extra |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
477 ) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
478 return d |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
479 |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
480 def _getPublishedItemId(self, iq_elt, original_id): |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
481 """return item of published id if found in answer |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
482 |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
483 if not found original_id is returned, or empty string if it is None or empty |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
484 string |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
485 """ |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
486 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
487 item_id = iq_elt.pubsub.publish.item["id"] |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
488 except (AttributeError, KeyError): |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
489 item_id = None |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
490 return item_id or original_id |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
491 |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
492 def sendItem(self, client, service, nodeIdentifier, payload, item_id=None, |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
493 extra=None): |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
494 """High level method to send one item |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
495 |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
496 @param service(jid.JID, None): service to send the item to |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
497 None to use PEP |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
498 @param NodeIdentifier(unicode): PubSub node to use |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
499 @param payload(domish.Element, unicode): payload of the item to send |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
500 @param item_id(unicode, None): id to use or None to create one |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
501 @param extra(dict, None): extra option, not used yet |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
502 @return (unicode, None): id of the created item |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
503 """ |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
504 item_elt = pubsub.Item(id=item_id, payload=payload) |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
505 d = self.publish(client, service, nodeIdentifier, [item_elt]) |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
506 d.addCallback(self._getPublishedItemId, item_id) |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
507 return d |
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
508 |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
509 def _publishCb(self, iq_result): |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
510 """Parse publish result, and return ids given by pubsub service""" |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
511 try: |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
512 item_ids = [item['id'] |
3028 | 513 for item in iq_result.pubsub.publish.elements(pubsub.NS_PUBSUB, 'item')] |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
514 except AttributeError: |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
515 return [] |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
516 return item_ids |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
517 |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
518 def sendItems(self, client, service, nodeIdentifier, items, extra=None): |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
519 """High level method to send several items at once |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
520 |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
521 @param service(jid.JID, None): service to send the item to |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
522 None to use PEP |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
523 @param NodeIdentifier(unicode): PubSub node to use |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
524 @param items(list[domish.Element]): whole item elements to send, |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
525 "id" will be used if set |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
526 @param extra(dict, None): extra option, not used yet |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
527 @return (list[unicode]): ids of the created items |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
528 """ |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
529 parsed_items = [] |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
530 for item in items: |
3028 | 531 if item.name != 'item': |
532 raise exceptions.DataError(_("Invalid item: {xml}").format(item.toXml())) | |
533 item_id = item.getAttribute("id") | |
2800
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
534 parsed_items.append(pubsub.Item(id=item_id, payload=item.firstChildElement())) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
535 d = self.publish(client, service, nodeIdentifier, parsed_items) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
536 d.addCallback(self._publishCb) |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
537 return d |
3b68293a60d4
plugin XEP-0060: added sendItems/psItemsSend method to publish several items at once
Goffi <goffi@goffi.org>
parents:
2776
diff
changeset
|
538 |
2272
b5befe7722d3
plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents:
2226
diff
changeset
|
539 def publish(self, client, service, nodeIdentifier, items=None): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
540 return client.pubsub_client.publish( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
541 service, nodeIdentifier, items, client.pubsub_client.parent.jid |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
542 ) |
286
3b382fa0ac28
plugin xep-0163: added mood publishing
Goffi <goffi@goffi.org>
parents:
283
diff
changeset
|
543 |
1777 | 544 def _unwrapMAMMessage(self, message_elt): |
545 try: | |
3062
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
546 item_elt = reduce( |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
547 lambda elt, ns_name: next(elt.elements(*ns_name)), |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
548 (message_elt, |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
549 (mam.NS_MAM, "result"), |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
550 (C.NS_FORWARD, "forwarded"), |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
551 (C.NS_CLIENT, "message"), |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
552 ("http://jabber.org/protocol/pubsub#event", "event"), |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
553 ("http://jabber.org/protocol/pubsub#event", "items"), |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
554 ("http://jabber.org/protocol/pubsub#event", "item"), |
93e8793a735a
plugin XEP-0060: fixed bad MAM unwrapping after Python 3 port
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
555 )) |
1777 | 556 except StopIteration: |
3028 | 557 raise exceptions.DataError("Can't find Item in MAM message element") |
1777 | 558 return item_elt |
559 | |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
560 def _getItems(self, service="", node="", max_items=10, item_ids=None, sub_id=None, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
561 extra_dict=None, profile_key=C.PROF_KEY_NONE): |
2185
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
562 """Get items from pubsub node |
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
563 |
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
564 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit |
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
565 """ |
2360
72cbb6478f97
plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents:
2352
diff
changeset
|
566 client = self.host.getClient(profile_key) |
2185
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
567 service = jid.JID(service) if service else None |
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
568 max_items = None if max_items == C.NO_LIMIT else max_items |
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
569 extra = self.parseExtra(extra_dict) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
570 d = self.getItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
571 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
572 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
573 node or None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
574 max_items or None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
575 item_ids, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
576 sub_id or None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
577 extra.rsm_request, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
578 extra.extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
579 ) |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
580 d.addCallback(self.transItemsData) |
2185
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
581 return d |
dd53d7a3219a
plugin XEP-0060: added psGet bridge method
Goffi <goffi@goffi.org>
parents:
2148
diff
changeset
|
582 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
583 def getItems(self, client, service, node, max_items=None, item_ids=None, sub_id=None, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
584 rsm_request=None, extra=None): |
1268
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
585 """Retrieve pubsub items from a node. |
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
586 |
1865
fc6eeacf31bc
plugin XEP-0277: service can be None in mbGet, resulting in a request on default pubsub service of profile (i.e. profile's PEP)
Goffi <goffi@goffi.org>
parents:
1854
diff
changeset
|
587 @param service (JID, None): pubsub service. |
1268
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
588 @param node (str): node id. |
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
589 @param max_items (int): optional limit on the number of retrieved items. |
2758
f4070693814a
plugin XEP-0060: fixed MAM return value on getItems():
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
590 @param item_ids (list[str]): identifiers of the items to be retrieved (can't be |
f4070693814a
plugin XEP-0060: fixed MAM return value on getItems():
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
591 used with rsm_request). |
1268
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
592 @param sub_id (str): optional subscription identifier. |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
593 @param rsm_request (rsm.RSMRequest): RSM request data |
1268
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
594 @return: a deferred couple (list[dict], dict) containing: |
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
595 - list of items |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
596 - metadata with the following keys: |
2718
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2702
diff
changeset
|
597 - rsm_first, rsm_last, rsm_count, rsm_index: first, last, count and index |
bb6adaa580ee
plugin XEP-0313, XEP-0045: loop MAM requests until whole archive is retrieved:
Goffi <goffi@goffi.org>
parents:
2702
diff
changeset
|
598 value of RSMResponse |
1903
29564cec913f
plugin XEP-0060: service, node and uri are added to metadata when doing a getItems
Goffi <goffi@goffi.org>
parents:
1865
diff
changeset
|
599 - service, node: service and node used |
1268
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
600 """ |
2319
e715a29c4f9b
plugin XEP-0060: remove max_items when item_ids is set on getItems
Goffi <goffi@goffi.org>
parents:
2314
diff
changeset
|
601 if item_ids and max_items is not None: |
e715a29c4f9b
plugin XEP-0060: remove max_items when item_ids is set on getItems
Goffi <goffi@goffi.org>
parents:
2314
diff
changeset
|
602 max_items = None |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
603 if rsm_request and item_ids: |
3028 | 604 raise ValueError("items_id can't be used with rsm") |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
605 if extra is None: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
606 extra = {} |
1777 | 607 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
608 mam_query = extra["mam"] |
1777 | 609 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
610 d = client.pubsub_client.items( |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
611 service = service, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
612 nodeIdentifier = node, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
613 maxItems = max_items, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
614 subscriptionIdentifier = sub_id, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
615 sender = None, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
616 itemIdentifiers = item_ids, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
617 orderBy = extra.get(C.KEY_ORDER_BY), |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
618 rsm_request = rsm_request |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
619 ) |
2758
f4070693814a
plugin XEP-0060: fixed MAM return value on getItems():
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
620 # we have no MAM data here, so we add None |
f4070693814a
plugin XEP-0060: fixed MAM return value on getItems():
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
621 d.addCallback(lambda data: data + (None,)) |
2911
cd391ea847cb
tools (sat_defer), plugin XEP-0060: added a function "stanza2NotFound" to convert item-not-found StanzaError to exceptions.NotFound in an errback
Goffi <goffi@goffi.org>
parents:
2807
diff
changeset
|
622 d.addErrback(sat_defer.stanza2NotFound) |
2769
9282b289b964
plugin XEP-0060: set a 30s timeout on items get
Goffi <goffi@goffi.org>
parents:
2760
diff
changeset
|
623 d.addTimeout(TIMEOUT, reactor) |
1777 | 624 else: |
625 # if mam is requested, we have to do a totally different query | |
626 if self._mam is None: | |
3028 | 627 raise exceptions.NotFound("MAM (XEP-0313) plugin is not available") |
1777 | 628 if max_items is not None: |
3028 | 629 raise exceptions.DataError("max_items parameter can't be used with MAM") |
1777 | 630 if item_ids: |
3028 | 631 raise exceptions.DataError("items_ids parameter can't be used with MAM") |
1777 | 632 if mam_query.node is None: |
633 mam_query.node = node | |
634 elif mam_query.node != node: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
635 raise exceptions.DataError( |
3028 | 636 "MAM query node is incoherent with getItems's node" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
637 ) |
1777 | 638 if mam_query.rsm is None: |
639 mam_query.rsm = rsm_request | |
640 else: | |
641 if mam_query.rsm != rsm_request: | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
642 raise exceptions.DataError( |
3028 | 643 "Conflict between RSM request and MAM's RSM request" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
644 ) |
1777 | 645 d = self._mam.getArchives(client, mam_query, service, self._unwrapMAMMessage) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
646 |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
647 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
648 subscribe = C.bool(extra["subscribe"]) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
649 except KeyError: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
650 subscribe = False |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
651 |
1678
c2d96f74105e
plugin XEP-0060: trap failure when subscription to a node is not possible
souliane <souliane@mailoo.org>
parents:
1552
diff
changeset
|
652 def subscribeEb(failure, service, node): |
c2d96f74105e
plugin XEP-0060: trap failure when subscription to a node is not possible
souliane <souliane@mailoo.org>
parents:
1552
diff
changeset
|
653 failure.trap(error.StanzaError) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
654 log.warning( |
3028 | 655 "Could not subscribe to node {} on service {}: {}".format( |
656 node, str(service), str(failure.value) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
657 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
658 ) |
1760
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
659 |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
660 def doSubscribe(data): |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
661 self.subscribe(client, service, node).addErrback( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
662 subscribeEb, service, node |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
663 ) |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
664 return data |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
665 |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
666 if subscribe: |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
667 d.addCallback(doSubscribe) |
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
668 |
1773
6e867caf4621
plugin XEP-0060, tmp(wokkel.rsm): small refactoring:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
669 def addMetadata(result): |
2758
f4070693814a
plugin XEP-0060: fixed MAM return value on getItems():
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
670 # TODO: handle the third argument (mam_response) |
f4070693814a
plugin XEP-0060: fixed MAM return value on getItems():
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
671 items, rsm_response, mam_response = result |
2314
01f0a954d506
plugin XEP-0060: fixed service in metadata for PEP
Goffi <goffi@goffi.org>
parents:
2305
diff
changeset
|
672 service_jid = service if service else client.jid.userhostJID() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
673 metadata = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
674 "service": service_jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
675 "node": node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
676 "uri": self.getNodeURI(service_jid, node), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
677 } |
1773
6e867caf4621
plugin XEP-0060, tmp(wokkel.rsm): small refactoring:
Goffi <goffi@goffi.org>
parents:
1766
diff
changeset
|
678 if rsm_request is not None and rsm_response is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
679 metadata.update( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
680 { |
3028 | 681 "rsm_" + key: value |
682 for key, value in rsm_response.toDict().items() | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
683 } |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
684 ) |
2758
f4070693814a
plugin XEP-0060: fixed MAM return value on getItems():
Goffi <goffi@goffi.org>
parents:
2718
diff
changeset
|
685 if mam_response is not None: |
3028 | 686 for key, value in mam_response.items(): |
687 metadata["mam_" + key] = value | |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
688 return (items, metadata) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
689 |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
690 d.addCallback(addMetadata) |
1268
bb30bf3ae932
plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents:
1267
diff
changeset
|
691 return d |
303
2b52a5da0978
plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents:
301
diff
changeset
|
692 |
1446
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
693 # @defer.inlineCallbacks |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
694 # def getItemsFromMany(self, service, data, max_items=None, sub_id=None, rsm=None, profile_key=C.PROF_KEY_NONE): |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
695 # """Massively retrieve pubsub items from many nodes. |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
696 # @param service (JID): target service. |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
697 # @param data (dict): dictionnary binding some arbitrary keys to the node identifiers. |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
698 # @param max_items (int): optional limit on the number of retrieved items *per node*. |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
699 # @param sub_id (str): optional subscription identifier. |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
700 # @param rsm (dict): RSM request data |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
701 # @param profile_key (str): %(doc_profile_key)s |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
702 # @return: a deferred dict with: |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
703 # - key: a value in (a subset of) data.keys() |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
704 # - couple (list[dict], dict) containing: |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
705 # - list of items |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
706 # - RSM response data |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
707 # """ |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
708 # client = self.host.getClient(profile_key) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
709 # found_nodes = yield self.listNodes(service, profile=client.profile) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
710 # d_dict = {} |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
711 # for publisher, node in data.items(): |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
712 # if node not in found_nodes: |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
713 # log.debug(u"Skip the items retrieval for [{node}]: node doesn't exist".format(node=node)) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
714 # continue # avoid pubsub "item-not-found" error |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
715 # d_dict[publisher] = self.getItems(service, node, max_items, None, sub_id, rsm, client.profile) |
e8c8e467964b
plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents:
1420
diff
changeset
|
716 # defer.returnValue(d_dict) |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
717 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
718 def getOptions(self, service, nodeIdentifier, subscriber, subscriptionIdentifier=None, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
719 profile_key=C.PROF_KEY_NONE): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
720 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
721 return client.pubsub_client.getOptions( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
722 service, nodeIdentifier, subscriber, subscriptionIdentifier |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
723 ) |
303
2b52a5da0978
plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents:
301
diff
changeset
|
724 |
2643
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
725 def setOptions(self, service, nodeIdentifier, subscriber, options, |
189e38fb11ff
core: style improvments (90 chars limit)
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
726 subscriptionIdentifier=None, profile_key=C.PROF_KEY_NONE): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
727 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
728 return client.pubsub_client.setOptions( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
729 service, nodeIdentifier, subscriber, options, subscriptionIdentifier |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
730 ) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
731 |
2218
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
732 def _createNode(self, service_s, nodeIdentifier, options, profile_key): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
733 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
734 return self.createNode( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
735 client, jid.JID(service_s) if service_s else None, nodeIdentifier, options |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
736 ) |
2218
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
737 |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
738 def createNode(self, client, service, nodeIdentifier=None, options=None): |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
739 """Create a new node |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
740 |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
741 @param service(jid.JID): PubSub service, |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
742 @param NodeIdentifier(unicode, None): node name |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
743 use None to create instant node (identifier will be returned by this method) |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
744 @param option(dict[unicode, unicode], None): node configuration options |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
745 @return (unicode): identifier of the created node (may be different from requested name) |
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
746 """ |
2393
8ed4ac10cb5e
plugin tickets import: create comments nodes with open access/publishing
Goffi <goffi@goffi.org>
parents:
2389
diff
changeset
|
747 # TODO: if pubsub service doesn't hande publish-options, configure it in a second time |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
748 return client.pubsub_client.createNode(service, nodeIdentifier, options) |
303
2b52a5da0978
plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents:
301
diff
changeset
|
749 |
2389
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
750 @defer.inlineCallbacks |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
751 def createIfNewNode(self, client, service, nodeIdentifier, options=None): |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
752 """Helper method similar to createNode, but will not fail in case of conflict""" |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
753 try: |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
754 yield self.createNode(client, service, nodeIdentifier, options) |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
755 except error.StanzaError as e: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
756 if e.condition == "conflict": |
2389
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
757 pass |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
758 else: |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
759 raise e |
5675af905725
plugin XEP-0060: added createIfNewNode method which doesn't fail in case of conflict.
Goffi <goffi@goffi.org>
parents:
2360
diff
changeset
|
760 |
2196
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
761 def _getNodeConfiguration(self, service_s, nodeIdentifier, profile_key): |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
762 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
763 d = self.getConfiguration( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
764 client, jid.JID(service_s) if service_s else None, nodeIdentifier |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
765 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
766 |
2196
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
767 def serialize(form): |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
768 # FIXME: better more generic dataform serialisation should be available in SàT |
3028 | 769 return {f.var: str(f.value) for f in list(form.fields.values())} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
770 |
2196
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
771 d.addCallback(serialize) |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
772 return d |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
773 |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
774 def getConfiguration(self, client, service, nodeIdentifier): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
775 request = pubsub.PubSubRequest("configureGet") |
2196
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
776 request.recipient = service |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
777 request.nodeIdentifier = nodeIdentifier |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
778 |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
779 def cb(iq): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
780 form = data_form.findForm(iq.pubsub.configure, pubsub.NS_PUBSUB_NODE_CONFIG) |
2196
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
781 form.typeCheck() |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
782 return form |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
783 |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
784 d = request.send(client.xmlstream) |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
785 d.addCallback(cb) |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
786 return d |
d3e48c9a255e
plugin XEP-0060: added getConfiguration ad psNodeConfigurationGet bridge method
Goffi <goffi@goffi.org>
parents:
2195
diff
changeset
|
787 |
2198
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
788 def _setNodeConfiguration(self, service_s, nodeIdentifier, options, profile_key): |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
789 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
790 d = self.setConfiguration( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
791 client, jid.JID(service_s) if service_s else None, nodeIdentifier, options |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
792 ) |
2198
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
793 return d |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
794 |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
795 def setConfiguration(self, client, service, nodeIdentifier, options): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
796 request = pubsub.PubSubRequest("configureSet") |
2198
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
797 request.recipient = service |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
798 request.nodeIdentifier = nodeIdentifier |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
799 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
800 form = data_form.Form( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
801 formType="submit", formNamespace=pubsub.NS_PUBSUB_NODE_CONFIG |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
802 ) |
2198
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
803 form.makeFields(options) |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
804 request.options = form |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
805 |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
806 d = request.send(client.xmlstream) |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
807 return d |
44f12990e275
plugin XEP-0060: added setConfiguration/psNodeConfigurationSet + fix in tmp.wokkel.pubsub
Goffi <goffi@goffi.org>
parents:
2196
diff
changeset
|
808 |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
809 def _getAffiliations(self, service_s, nodeIdentifier, profile_key): |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
810 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
811 d = self.getAffiliations( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
812 client, jid.JID(service_s) if service_s else None, nodeIdentifier or None |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
813 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
814 return d |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
815 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
816 def getAffiliations(self, client, service, nodeIdentifier=None): |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
817 """Retrieve affiliations of an entity |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
818 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
819 @param nodeIdentifier(unicode, None): node to get affiliation from |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
820 None to get all nodes affiliations for this service |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
821 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
822 request = pubsub.PubSubRequest("affiliations") |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
823 request.recipient = service |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
824 request.nodeIdentifier = nodeIdentifier |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
825 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
826 def cb(iq_elt): |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
827 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
828 affiliations_elt = next( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
829 iq_elt.pubsub.elements((pubsub.NS_PUBSUB, "affiliations")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
830 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
831 except StopIteration: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
832 raise ValueError( |
3028 | 833 _("Invalid result: missing <affiliations> element: {}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
834 iq_elt.toXml |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
835 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
836 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
837 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
838 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
839 e["node"]: e["affiliation"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
840 for e in affiliations_elt.elements((pubsub.NS_PUBSUB, "affiliation")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
841 } |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
842 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
843 raise ValueError( |
3028 | 844 _("Invalid result: bad <affiliation> element: {}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
845 iq_elt.toXml |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
846 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
847 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
848 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
849 d = request.send(client.xmlstream) |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
850 d.addCallback(cb) |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
851 return d |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
852 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
853 def _getNodeAffiliations(self, service_s, nodeIdentifier, profile_key): |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
854 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
855 d = self.getNodeAffiliations( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
856 client, jid.JID(service_s) if service_s else None, nodeIdentifier |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
857 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
858 d.addCallback( |
3028 | 859 lambda affiliations: {j.full(): a for j, a in affiliations.items()} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
860 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
861 return d |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
862 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
863 def getNodeAffiliations(self, client, service, nodeIdentifier): |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
864 """Retrieve affiliations of a node owned by profile""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
865 request = pubsub.PubSubRequest("affiliationsGet") |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
866 request.recipient = service |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
867 request.nodeIdentifier = nodeIdentifier |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
868 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
869 def cb(iq_elt): |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
870 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
871 affiliations_elt = next( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
872 iq_elt.pubsub.elements((pubsub.NS_PUBSUB_OWNER, "affiliations")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
873 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
874 except StopIteration: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
875 raise ValueError( |
3028 | 876 _("Invalid result: missing <affiliations> element: {}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
877 iq_elt.toXml |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
878 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
879 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
880 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
881 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
882 jid.JID(e["jid"]): e["affiliation"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
883 for e in affiliations_elt.elements( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
884 (pubsub.NS_PUBSUB_OWNER, "affiliation") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
885 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
886 } |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
887 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
888 raise ValueError( |
3028 | 889 _("Invalid result: bad <affiliation> element: {}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
890 iq_elt.toXml |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
891 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
892 ) |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
893 |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
894 d = request.send(client.xmlstream) |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
895 d.addCallback(cb) |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
896 return d |
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
897 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
898 def _setNodeAffiliations( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
899 self, service_s, nodeIdentifier, affiliations, profile_key=C.PROF_KEY_NONE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
900 ): |
2206
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
901 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
902 affiliations = { |
3028 | 903 jid.JID(jid_): affiliation for jid_, affiliation in affiliations.items() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
904 } |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
905 d = self.setNodeAffiliations( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
906 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
907 jid.JID(service_s) if service_s else None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
908 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
909 affiliations, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
910 ) |
2206
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
911 return d |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
912 |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
913 def setNodeAffiliations(self, client, service, nodeIdentifier, affiliations): |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
914 """Update affiliations of a node owned by profile |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
915 |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
916 @param affiliations(dict[jid.JID, unicode]): affiliations to set |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
917 check https://xmpp.org/extensions/xep-0060.html#affiliations for a list of possible affiliations |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
918 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
919 request = pubsub.PubSubRequest("affiliationsSet") |
2206
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
920 request.recipient = service |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
921 request.nodeIdentifier = nodeIdentifier |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
922 request.affiliations = affiliations |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
923 d = request.send(client.xmlstream) |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
924 return d |
59d3de85a0cb
plugin XEP-0060: added setNodeAffiliations and its bridge method (psNodeAffiliationsSet)
Goffi <goffi@goffi.org>
parents:
2203
diff
changeset
|
925 |
2801
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
926 def _purgeNode(self, service_s, nodeIdentifier, profile_key): |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
927 client = self.host.getClient(profile_key) |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
928 return self.purgeNode( |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
929 client, jid.JID(service_s) if service_s else None, nodeIdentifier |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
930 ) |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
931 |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
932 def purgeNode(self, client, service, nodeIdentifier): |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
933 return client.pubsub_client.purgeNode(service, nodeIdentifier) |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
934 |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
935 def _deleteNode(self, service_s, nodeIdentifier, profile_key): |
2218
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
936 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
937 return self.deleteNode( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
938 client, jid.JID(service_s) if service_s else None, nodeIdentifier |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
939 ) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
940 |
2218
6a2fa651d7fa
plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents:
2206
diff
changeset
|
941 def deleteNode(self, client, service, nodeIdentifier): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
942 return client.pubsub_client.deleteNode(service, nodeIdentifier) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
943 |
2444
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
944 def _addWatch(self, service_s, node, profile_key): |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
945 """watch modifications on a node |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
946 |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
947 This method should only be called from bridge |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
948 """ |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
949 client = self.host.getClient(profile_key) |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
950 service = jid.JID(service_s) if service_s else client.jid.userhostJID() |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
951 client.pubsub_watching.add((service, node)) |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
952 |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
953 def _removeWatch(self, service_s, node, profile_key): |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
954 """remove a node watch |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
955 |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
956 This method should only be called from bridge |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
957 """ |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
958 client = self.host.getClient(profile_key) |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
959 service = jid.JID(service_s) if service_s else client.jid.userhostJID() |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
960 client.pubsub_watching.remove((service, node)) |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
961 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
962 def _retractItem( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
963 self, service_s, nodeIdentifier, itemIdentifier, notify, profile_key |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
964 ): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
965 return self._retractItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
966 service_s, nodeIdentifier, (itemIdentifier,), notify, profile_key |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
967 ) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
968 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
969 def _retractItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
970 self, service_s, nodeIdentifier, itemIdentifiers, notify, profile_key |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
971 ): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
972 return self.retractItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
973 jid.JID(service_s) if service_s else None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
974 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
975 itemIdentifiers, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
976 notify, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
977 profile_key, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
978 ) |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
979 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
980 def retractItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
981 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
982 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
983 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
984 itemIdentifiers, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
985 notify=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
986 profile_key=C.PROF_KEY_NONE, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
987 ): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
988 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
989 return client.pubsub_client.retractItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
990 service, nodeIdentifier, itemIdentifiers, notify=True |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
991 ) |
745
812dc38c0094
plugins groupblog (xep-0060, xep-0277): added blog item modification/deletion
souliane <souliane@mailoo.org>
parents:
704
diff
changeset
|
992 |
2442
b8ffb7f8056b
plugin XEP-0060: added "options" argument to psSubscribe, and return subscription id if present
Goffi <goffi@goffi.org>
parents:
2432
diff
changeset
|
993 def _subscribe(self, service, nodeIdentifier, options, profile_key=C.PROF_KEY_NONE): |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
994 client = self.host.getClient(profile_key) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
995 service = None if not service else jid.JID(service) |
2442
b8ffb7f8056b
plugin XEP-0060: added "options" argument to psSubscribe, and return subscription id if present
Goffi <goffi@goffi.org>
parents:
2432
diff
changeset
|
996 d = self.subscribe(client, service, nodeIdentifier, options=options or None) |
3028 | 997 d.addCallback(lambda subscription: subscription.subscriptionIdentifier or "") |
2442
b8ffb7f8056b
plugin XEP-0060: added "options" argument to psSubscribe, and return subscription id if present
Goffi <goffi@goffi.org>
parents:
2432
diff
changeset
|
998 return d |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
999 |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1000 def subscribe(self, client, service, nodeIdentifier, sub_jid=None, options=None): |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
1001 # TODO: reimplement a subscribtion cache, checking that we have not subscription before trying to subscribe |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1002 return client.pubsub_client.subscribe( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1003 service, nodeIdentifier, sub_jid or client.jid.userhostJID(), options=options |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1004 ) |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1005 |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1006 def _unsubscribe(self, service, nodeIdentifier, profile_key=C.PROF_KEY_NONE): |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1007 client = self.host.getClient(profile_key) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1008 service = None if not service else jid.JID(service) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1009 return self.unsubscribe(client, service, nodeIdentifier) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1010 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1011 def unsubscribe( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1012 self, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1013 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1014 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1015 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1016 sub_jid=None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1017 subscriptionIdentifier=None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1018 sender=None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1019 ): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1020 return client.pubsub_client.unsubscribe( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1021 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1022 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1023 sub_jid or client.jid.userhostJID(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1024 subscriptionIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1025 sender, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1026 ) |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1027 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1028 def _subscriptions(self, service, nodeIdentifier="", profile_key=C.PROF_KEY_NONE): |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
1029 client = self.host.getClient(profile_key) |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1030 service = None if not service else jid.JID(service) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1031 |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1032 def gotSubscriptions(subscriptions): |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1033 # we replace pubsub.Subscription instance by dict that we can serialize |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1034 for idx, sub in enumerate(subscriptions): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1035 sub_dict = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1036 "node": sub.nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1037 "subscriber": sub.subscriber.full(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1038 "state": sub.state, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1039 } |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1040 if sub.subscriptionIdentifier is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1041 sub_dict["id"] = sub.subscriptionIdentifier |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1042 subscriptions[idx] = sub_dict |
303
2b52a5da0978
plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents:
301
diff
changeset
|
1043 |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1044 return subscriptions |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1045 |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1046 d = self.subscriptions(client, service, nodeIdentifier or None) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1047 d.addCallback(gotSubscriptions) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1048 return d |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1049 |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1050 def subscriptions(self, client, service, nodeIdentifier=None): |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1051 """retrieve subscriptions from a service |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1052 |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1053 @param service(jid.JID): PubSub service |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1054 @param nodeIdentifier(unicode, None): node to check |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1055 None to get all subscriptions |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1056 """ |
1420
7c0acb966fd6
plugins groupblog, xep-0060: first pass of simplification
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
1057 return client.pubsub_client.subscriptions(service, nodeIdentifier) |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1058 |
1829
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1059 ## misc tools ## |
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1060 |
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1061 def getNodeURI(self, service, node, item=None): |
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1062 """Return XMPP URI of a PubSub node |
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1063 |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1064 @param service(jid.JID): PubSub service |
1829
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1065 @param node(unicode): node |
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1066 @return (unicode): URI of the node |
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1067 """ |
1904
614f3abb2c69
plugin XEP-0060: fixed traceback if service was None
Goffi <goffi@goffi.org>
parents:
1903
diff
changeset
|
1068 assert service is not None |
1854
3c0bb714a80b
plugin XEP-0060: fixed bad xmpp: URI generation in getNodeURI
Goffi <goffi@goffi.org>
parents:
1829
diff
changeset
|
1069 # XXX: urllib.urlencode use "&" to separate value, while XMPP URL (cf. RFC 5122) |
3c0bb714a80b
plugin XEP-0060: fixed bad xmpp: URI generation in getNodeURI
Goffi <goffi@goffi.org>
parents:
1829
diff
changeset
|
1070 # use ";" as a separator. So if more than one value is used in query_data, |
3c0bb714a80b
plugin XEP-0060: fixed bad xmpp: URI generation in getNodeURI
Goffi <goffi@goffi.org>
parents:
1829
diff
changeset
|
1071 # urlencode MUST NOT BE USED. |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1072 query_data = [("node", node.encode("utf-8"))] |
1829
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1073 if item is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1074 query_data.append(("item", item.encode("utf-8"))) |
1854
3c0bb714a80b
plugin XEP-0060: fixed bad xmpp: URI generation in getNodeURI
Goffi <goffi@goffi.org>
parents:
1829
diff
changeset
|
1075 return "xmpp:{service}?;{query}".format( |
3028 | 1076 service=service.userhost(), query=urllib.parse.urlencode(query_data) |
1077 ) | |
1829
6079752ffeae
plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents:
1778
diff
changeset
|
1078 |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1079 ## methods to manage several stanzas/jids at once ## |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1080 |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1081 # generic # |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1082 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1083 def getRTResults( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1084 self, session_id, on_success=None, on_error=None, profile=C.PROF_KEY_NONE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1085 ): |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1086 return self.rt_sessions.getResults(session_id, on_success, on_error, profile) |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1087 |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1088 def transItemsData(self, items_data, item_cb=lambda item: item.toXml(), |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1089 serialise=False): |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1090 """Helper method to transform result from [getItems] |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1091 |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1092 the items_data must be a tuple(list[domish.Element], dict[unicode, unicode]) |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1093 as returned by [getItems]. metadata values are then casted to unicode and |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1094 each item is passed to items_cb then optionally serialised with |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1095 data_format.serialise. |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1096 @param items_data(tuple): tuple returned by [getItems] |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1097 @param item_cb(callable): method to transform each item |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1098 @param serialise(bool): if True do a data_format.serialise |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1099 after applying item_cb |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1100 @return (tuple): a serialised form ready to go throught bridge |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1101 """ |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1102 items, metadata = items_data |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1103 if serialise: |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1104 items = [data_format.serialise(item_cb(item)) for item in items] |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1105 else: |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1106 items = [item_cb(item) for item in items] |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1107 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1108 return ( |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1109 items, |
3028 | 1110 {key: str(value) for key, value in metadata.items()}, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1111 ) |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1112 |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1113 def transItemsDataD(self, items_data, item_cb, serialise=False): |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1114 """Helper method to transform result from [getItems], deferred version |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1115 |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1116 the items_data must be a tuple(list[domish.Element], dict[unicode, unicode]) |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1117 as returned by [getItems]. metadata values are then casted to unicode and |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1118 each item is passed to items_cb then optionally serialised with |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1119 data_format.serialise. |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1120 An errback is added to item_cb, and when it is fired the value is filtered from |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1121 final items |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1122 @param items_data(tuple): tuple returned by [getItems] |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1123 @param item_cb(callable): method to transform each item (must return a deferred) |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1124 @param serialise(bool): if True do a data_format.serialise |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1125 after applying item_cb |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1126 @return (tuple): a deferred which fire a serialised form ready to go throught |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1127 bridge |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1128 """ |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1129 items, metadata = items_data |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1130 |
3069
73db9db8b9e1
plugin XEP-0277: fixed comments URLs parsing
Goffi <goffi@goffi.org>
parents:
3062
diff
changeset
|
1131 def eb(failure_): |
73db9db8b9e1
plugin XEP-0277: fixed comments URLs parsing
Goffi <goffi@goffi.org>
parents:
3062
diff
changeset
|
1132 log.warning(f"Error while serialising/parsing item: {failure_.value}") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1133 |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1134 d = defer.gatherResults([item_cb(item).addErrback(eb) for item in items]) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1135 |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1136 def finishSerialisation(parsed_items): |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1137 if serialise: |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1138 items = [data_format.serialise(i) for i in parsed_items if i is not None] |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1139 else: |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1140 items = [i for i in parsed_items if i is not None] |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1141 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1142 return ( |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1143 items, |
3028 | 1144 {key: str(value) for key, value in metadata.items()}, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1145 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1146 |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1147 d.addCallback(finishSerialisation) |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1148 return d |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1149 |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1150 def serDList(self, results, failure_result=None): |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1151 """Serialise a DeferredList result |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1152 |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1153 @param results: DeferredList results |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1154 @param failure_result: value to use as value for failed Deferred |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1155 (default: empty tuple) |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1156 @return (list): list with: |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1157 - failure: empty in case of success, else error message |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1158 - result |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1159 """ |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1160 if failure_result is None: |
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1161 failure_result = () |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1162 return [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1163 ("", result) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1164 if success |
3028 | 1165 else (str(result.result) or UNSPECIFIED, failure_result) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1166 for success, result in results |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1167 ] |
1451
9b88b19b1ca8
plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents:
1449
diff
changeset
|
1168 |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1169 # subscribe # |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1170 |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1171 def _getNodeSubscriptions(self, service_s, nodeIdentifier, profile_key): |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1172 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1173 d = self.getNodeSubscriptions( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1174 client, jid.JID(service_s) if service_s else None, nodeIdentifier |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1175 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1176 d.addCallback( |
3028 | 1177 lambda subscriptions: {j.full(): a for j, a in subscriptions.items()} |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1178 ) |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1179 return d |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1180 |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1181 def getNodeSubscriptions(self, client, service, nodeIdentifier): |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1182 """Retrieve subscriptions to a node |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1183 |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1184 @param nodeIdentifier(unicode): node to get subscriptions from |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1185 """ |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1186 if not nodeIdentifier: |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1187 raise exceptions.DataError("node identifier can't be empty") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1188 request = pubsub.PubSubRequest("subscriptionsGet") |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1189 request.recipient = service |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1190 request.nodeIdentifier = nodeIdentifier |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1191 |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1192 def cb(iq_elt): |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1193 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1194 subscriptions_elt = next( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1195 iq_elt.pubsub.elements((pubsub.NS_PUBSUB, "subscriptions")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1196 ) |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1197 except StopIteration: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1198 raise ValueError( |
3028 | 1199 _("Invalid result: missing <subscriptions> element: {}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1200 iq_elt.toXml |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1201 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1202 ) |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1203 except AttributeError as e: |
3028 | 1204 raise ValueError(_("Invalid result: {}").format(e)) |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1205 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1206 return { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1207 jid.JID(s["jid"]): s["subscription"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1208 for s in subscriptions_elt.elements( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1209 (pubsub.NS_PUBSUB, "subscription") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1210 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1211 } |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1212 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1213 raise ValueError( |
3028 | 1214 _("Invalid result: bad <subscription> element: {}").format( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1215 iq_elt.toXml |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1216 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1217 ) |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1218 |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1219 d = request.send(client.xmlstream) |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1220 d.addCallback(cb) |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1221 return d |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1222 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1223 def _setNodeSubscriptions( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1224 self, service_s, nodeIdentifier, subscriptions, profile_key=C.PROF_KEY_NONE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1225 ): |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1226 client = self.host.getClient(profile_key) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1227 subscriptions = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1228 jid.JID(jid_): subscription |
3028 | 1229 for jid_, subscription in subscriptions.items() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1230 } |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1231 d = self.setNodeSubscriptions( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1232 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1233 jid.JID(service_s) if service_s else None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1234 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1235 subscriptions, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1236 ) |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1237 return d |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1238 |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1239 def setNodeSubscriptions(self, client, service, nodeIdentifier, subscriptions): |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1240 """Set or update subscriptions of a node owned by profile |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1241 |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1242 @param subscriptions(dict[jid.JID, unicode]): subscriptions to set |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1243 check https://xmpp.org/extensions/xep-0060.html#substates for a list of possible subscriptions |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1244 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1245 request = pubsub.PubSubRequest("subscriptionsSet") |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1246 request.recipient = service |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1247 request.nodeIdentifier = nodeIdentifier |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1248 request.subscriptions = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1249 pubsub.Subscription(nodeIdentifier, jid_, state) |
3028 | 1250 for jid_, state in subscriptions.items() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1251 } |
2338
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1252 d = request.send(client.xmlstream) |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1253 return d |
b1bbd2994ceb
plugin XEP-0060: implemented subscriptions management method for node owner:
Goffi <goffi@goffi.org>
parents:
2319
diff
changeset
|
1254 |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1255 def _manySubscribeRTResult(self, session_id, profile_key=C.PROF_KEY_DEFAULT): |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1256 """Get real-time results for subcribeToManu session |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1257 |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1258 @param session_id: id of the real-time deferred session |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1259 @param return (tuple): (remaining, results) where: |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1260 - remaining is the number of still expected results |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1261 - results is a list of tuple(unicode, unicode, bool, unicode) with: |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1262 - service: pubsub service |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1263 - and node: pubsub node |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1264 - failure(unicode): empty string in case of success, error message else |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1265 @param profile_key: %(doc_profile_key)s |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1266 """ |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1267 profile = self.host.getClient(profile_key).profile |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1268 d = self.rt_sessions.getResults( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1269 session_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1270 on_success=lambda result: "", |
3028 | 1271 on_error=lambda failure: str(failure.value), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1272 profile=profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1273 ) |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1274 # we need to convert jid.JID to unicode with full() to serialise it for the bridge |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1275 d.addCallback( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1276 lambda ret: ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1277 ret[0], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1278 [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1279 (service.full(), node, "" if success else failure or UNSPECIFIED) |
3028 | 1280 for (service, node), (success, failure) in ret[1].items() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1281 ], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1282 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1283 ) |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1284 return d |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1285 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1286 def _subscribeToMany( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1287 self, node_data, subscriber=None, options=None, profile_key=C.PROF_KEY_NONE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1288 ): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1289 return self.subscribeToMany( |
3028 | 1290 [(jid.JID(service), str(node)) for service, node in node_data], |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1291 jid.JID(subscriber), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1292 options, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1293 profile_key, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1294 ) |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1295 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1296 def subscribeToMany( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1297 self, node_data, subscriber, options=None, profile_key=C.PROF_KEY_NONE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1298 ): |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1299 """Subscribe to several nodes at once. |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1300 |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1301 @param node_data (iterable[tuple]): iterable of tuple (service, node) where: |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1302 - service (jid.JID) is the pubsub service |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1303 - node (unicode) is the node to subscribe to |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1304 @param subscriber (jid.JID): optional subscription identifier. |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1305 @param options (dict): subscription options |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1306 @param profile_key (str): %(doc_profile_key)s |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1307 @return (str): RT Deferred session id |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1308 """ |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1309 client = self.host.getClient(profile_key) |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1310 deferreds = {} |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1311 for service, node in node_data: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1312 deferreds[(service, node)] = client.pubsub_client.subscribe( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1313 service, node, subscriber, options=options |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1314 ) |
1449
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1315 return self.rt_sessions.newSession(deferreds, client.profile) |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1316 # found_nodes = yield self.listNodes(service, profile=client.profile) |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1317 # subscribed_nodes = yield self.listSubscribedNodes(service, profile=client.profile) |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1318 # d_list = [] |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1319 # for nodeIdentifier in (set(nodeIdentifiers) - set(subscribed_nodes)): |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1320 # if nodeIdentifier not in found_nodes: |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1321 # log.debug(u"Skip the subscription to [{node}]: node doesn't exist".format(node=nodeIdentifier)) |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1322 # continue # avoid sat-pubsub "SubscriptionExists" error |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1323 # d_list.append(client.pubsub_client.subscribe(service, nodeIdentifier, sub_jid or client.pubsub_client.parent.jid.userhostJID(), options=options)) |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1324 # defer.returnValue(d_list) |
389357fd79ce
plugin XEP-0060: use of new RTDeferredSession to subscribe many nodes at once + subscribeToMany can now subscribe on separate services
Goffi <goffi@goffi.org>
parents:
1446
diff
changeset
|
1325 |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1326 # get # |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1327 |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1328 def _getFromManyRTResult(self, session_id, profile_key=C.PROF_KEY_DEFAULT): |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1329 """Get real-time results for getFromMany session |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1330 |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1331 @param session_id: id of the real-time deferred session |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1332 @param profile_key: %(doc_profile_key)s |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1333 @param return (tuple): (remaining, results) where: |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1334 - remaining is the number of still expected results |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1335 - results is a list of tuple with |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1336 - service (unicode): pubsub service |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1337 - node (unicode): pubsub node |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1338 - failure (unicode): empty string in case of success, error message else |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1339 - items (list[s]): raw XML of items |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1340 - metadata(dict): serialised metadata |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1341 """ |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1342 profile = self.host.getClient(profile_key).profile |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1343 d = self.rt_sessions.getResults( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1344 session_id, |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1345 on_success=lambda result: ("", self.transItemsData(result)), |
3028 | 1346 on_error=lambda failure: (str(failure.value) or UNSPECIFIED, ([], {})), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1347 profile=profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1348 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1349 d.addCallback( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1350 lambda ret: ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1351 ret[0], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1352 [ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1353 (service.full(), node, failure, items, metadata) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1354 for (service, node), (success, (failure, (items, metadata))) in ret[ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1355 1 |
3028 | 1356 ].items() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1357 ], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1358 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1359 ) |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1360 return d |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1361 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1362 def _getFromMany( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1363 self, node_data, max_item=10, extra_dict=None, profile_key=C.PROF_KEY_NONE |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1364 ): |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1365 """ |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1366 @param max_item(int): maximum number of item to get, C.NO_LIMIT for no limit |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1367 """ |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1368 max_item = None if max_item == C.NO_LIMIT else max_item |
1459
4c4f88d7b156
plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents:
1452
diff
changeset
|
1369 extra = self.parseExtra(extra_dict) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1370 return self.getFromMany( |
3028 | 1371 [(jid.JID(service), str(node)) for service, node in node_data], |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1372 max_item, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1373 extra.rsm_request, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1374 extra.extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1375 profile_key, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1376 ) |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1377 |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1378 def getFromMany(self, node_data, max_item=None, rsm_request=None, extra=None, |
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2801
diff
changeset
|
1379 profile_key=C.PROF_KEY_NONE): |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1380 """Get items from many nodes at once |
2203
427391c706eb
plugin XEP-0060: added affiliation handling:
Goffi <goffi@goffi.org>
parents:
2201
diff
changeset
|
1381 |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1382 @param node_data (iterable[tuple]): iterable of tuple (service, node) where: |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1383 - service (jid.JID) is the pubsub service |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1384 - node (unicode) is the node to get items from |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1385 @param max_items (int): optional limit on the number of retrieved items. |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1386 @param rsm_request (RSMRequest): RSM request data |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1387 @param profile_key (unicode): %(doc_profile_key)s |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1388 @return (str): RT Deferred session id |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1389 """ |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1390 client = self.host.getClient(profile_key) |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1391 deferreds = {} |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1392 for service, node in node_data: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1393 deferreds[(service, node)] = self.getItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1394 client, service, node, max_item, rsm_request=rsm_request, extra=extra |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1395 ) |
1452
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1396 return self.rt_sessions.newSession(deferreds, client.profile) |
5116d70ddd1c
plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents:
1451
diff
changeset
|
1397 |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1398 |
3028 | 1399 @implementer(disco.IDisco) |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1400 class SatPubSubClient(rsm.PubSubClient): |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1401 |
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1402 def __init__(self, host, parent_plugin): |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
1403 self.host = host |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1404 self.parent_plugin = parent_plugin |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1405 rsm.PubSubClient.__init__(self) |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1406 |
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1407 def connectionInitialized(self): |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1408 rsm.PubSubClient.connectionInitialized(self) |
745
812dc38c0094
plugins groupblog (xep-0060, xep-0277): added blog item modification/deletion
souliane <souliane@mailoo.org>
parents:
704
diff
changeset
|
1409 |
1760
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1410 def _getNodeCallbacks(self, node, event): |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1411 """Generate callbacks from given node and event |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1412 |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1413 @param node(unicode): node used for the item |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1414 any registered node which prefix the node will match |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1415 @param event(unicode): one of C.PS_ITEMS, C.PS_RETRACT, C.PS_DELETE |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1416 @return (iterator[callable]): callbacks for this node/event |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1417 """ |
3028 | 1418 for registered_node, callbacks_dict in self.parent_plugin._node_cb.items(): |
1760
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1419 if not node.startswith(registered_node): |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1420 continue |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1421 try: |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1422 for callback in callbacks_dict[event]: |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1423 yield callback |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1424 except KeyError: |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1425 continue |
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1426 |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2758
diff
changeset
|
1427 |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1428 def itemsReceived(self, event): |
3028 | 1429 log.debug("Pubsub items received") |
1760
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1430 for callback in self._getNodeCallbacks(event.nodeIdentifier, C.PS_ITEMS): |
2305
972e33507609
plugin XEP-0060: addManagedNode callbacks now use client syntax instead of profile
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
1431 callback(self.parent, event) |
2444
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
1432 client = self.parent |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
1433 if (event.sender, event.nodeIdentifier) in client.pubsub_watching: |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
1434 raw_items = [i.toXml() for i in event.items] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1435 self.host.bridge.psEventRaw( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1436 event.sender.full(), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1437 event.nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1438 C.PS_ITEMS, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1439 raw_items, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1440 client.profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1441 ) |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1442 |
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1443 def deleteReceived(self, event): |
3028 | 1444 log.debug(("Publish node deleted")) |
1760
30efe084471c
plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents:
1678
diff
changeset
|
1445 for callback in self._getNodeCallbacks(event.nodeIdentifier, C.PS_DELETE): |
2305
972e33507609
plugin XEP-0060: addManagedNode callbacks now use client syntax instead of profile
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
1446 callback(self.parent, event) |
2444
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
1447 client = self.parent |
30278ea1ca7c
plugin XEP-0060: added node watching methods to bridge:
Goffi <goffi@goffi.org>
parents:
2442
diff
changeset
|
1448 if (event.sender, event.nodeIdentifier) in client.pubsub_watching: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1449 self.host.bridge.psEventRaw( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1450 event.sender.full(), event.nodeIdentifier, C.PS_DELETE, [], client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1451 ) |
615
6f4c31192c7c
plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents:
609
diff
changeset
|
1452 |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1453 def subscriptions(self, service, nodeIdentifier, sender=None): |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1454 """Return the list of subscriptions to the given service and node. |
283
68cd30d982a5
core: added plugins for PubSub et PEP (first drafts)
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1455 |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1456 @param service: The publish subscribe service to retrieve the subscriptions from. |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1457 @type service: L{JID<twisted.words.protocols.jabber.jid.JID>} |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1458 @param nodeIdentifier: The identifier of the node (leave empty to retrieve all subscriptions). |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1459 @type nodeIdentifier: C{unicode} |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1460 @return (list[pubsub.Subscription]): list of subscriptions |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1461 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1462 request = pubsub.PubSubRequest("subscriptions") |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1463 request.recipient = service |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1464 request.nodeIdentifier = nodeIdentifier |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1465 request.sender = sender |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1466 d = request.send(self.xmlstream) |
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1467 |
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1468 def cb(iq): |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1469 subs = [] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1470 for subscription_elt in iq.pubsub.subscriptions.elements( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1471 pubsub.NS_PUBSUB, "subscription" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1472 ): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1473 subscription = pubsub.Subscription( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1474 subscription_elt["node"], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1475 jid.JID(subscription_elt["jid"]), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1476 subscription_elt["subscription"], |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1477 subscriptionIdentifier=subscription_elt.getAttribute("subid"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1478 ) |
2352
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1479 subs.append(subscription) |
6c26f435a02d
plugin XEP-0060: added/fixed subscribe/unsubscribe and subscriptions methods/bridge methods:
Goffi <goffi@goffi.org>
parents:
2338
diff
changeset
|
1480 return subs |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1481 |
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1261
diff
changeset
|
1482 return d.addCallback(cb) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
1483 |
2801
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1484 def purgeNode(self, service, nodeIdentifier): |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1485 """Purge a node (i.e. delete all items from it) |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1486 |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1487 @param service(jid.JID, None): service to send the item to |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1488 None to use PEP |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1489 @param NodeIdentifier(unicode): PubSub node to use |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1490 """ |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1491 # TODO: propose this upstream and remove it once merged |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1492 request = pubsub.PubSubRequest('purge') |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1493 request.recipient = service |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1494 request.nodeIdentifier = nodeIdentifier |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1495 return request.send(self.xmlstream) |
ae127e14b040
plugin XEP-0060: added purgeNode/psNodePurge method to remove all items from a node
Goffi <goffi@goffi.org>
parents:
2800
diff
changeset
|
1496 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1497 def getDiscoInfo(self, requestor, service, nodeIdentifier=""): |
1217
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1498 disco_info = [] |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1499 self.host.trigger.point("PubSub Disco Info", disco_info, self.parent.profile) |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1500 return disco_info |
318eab3f93f8
plugin XEP-0060, groupblog: avoid unecessary pubsub errors while doing massive requests:
souliane <souliane@mailoo.org>
parents:
993
diff
changeset
|
1501 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
1502 def getDiscoItems(self, requestor, service, nodeIdentifier=""): |
1259
633fcd13a7dc
plugin pubsub: fixed a bug introducted in revision 318eab3f93f8: getDiscoItems handler method which is called on disco items request, was calling getDiscoItems from host, which do a request itself, resulting in an infinite items request loop.
Goffi <goffi@goffi.org>
parents:
1246
diff
changeset
|
1503 return [] |