annotate sat/plugins/plugin_xep_0060.py @ 3511:db0f4d419448

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