annotate sat/plugins/plugin_xep_0059.py @ 3861:37a1193d90db

plugin XEP-0277: add a trigger to `send` method: rel 370
author Goffi <goffi@goffi.org>
date Wed, 20 Jul 2022 17:19:53 +0200
parents ffa8c8c78115
children 524856bd7b19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
3592
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
3 # Result Set Management (XEP-0059)
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1465
diff changeset
5 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org)
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
6
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
10 # (at your option) any later version.
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
11
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
16
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
19
3592
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
20 from typing import Optional
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
21 from zope.interface import implementer
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
22 from twisted.words.protocols.jabber import xmlstream
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
23 from wokkel import disco
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
24 from wokkel import iwokkel
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
25 from wokkel import rsm
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
26 from sat.core.i18n import _
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
27 from sat.core.constants import Const as C
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
28 from sat.core.log import getLogger
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
29
3592
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
30
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
31 log = getLogger(__name__)
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
32
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
33
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
34 PLUGIN_INFO = {
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
35 C.PI_NAME: "Result Set Management",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
36 C.PI_IMPORT_NAME: "XEP-0059",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
37 C.PI_TYPE: "XEP",
3738
ffa8c8c78115 plugin XEP-0059, cache: allow those plugins to work in component mode
Goffi <goffi@goffi.org>
parents: 3617
diff changeset
38 C.PI_MODES: C.PLUG_MODE_BOTH,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
39 C.PI_PROTOCOLS: ["XEP-0059"],
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
40 C.PI_MAIN: "XEP_0059",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
41 C.PI_HANDLER: "yes",
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
42 C.PI_DESCRIPTION: _("""Implementation of Result Set Management"""),
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
43 }
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
44
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
45 RSM_PREFIX = "rsm_"
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
46
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
47
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
48 class XEP_0059(object):
1267
ea692d51a0ee plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents: 1219
diff changeset
49 # XXX: RSM management is done directly in Wokkel.
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
50
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
51 def __init__(self, host):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
52 log.info(_("Result Set Management plugin initialization"))
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
53
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
54 def getHandler(self, client):
1465
cbf38047ca60 plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
55 return XEP_0059_handler()
cbf38047ca60 plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents: 1396
diff changeset
56
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
57 def parseExtra(self, extra):
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
58 """Parse extra dictionnary to retrieve RSM arguments
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
59
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
60 @param extra(dict): data for parse
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
61 @return (rsm.RSMRequest, None): request with parsed arguments
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
62 or None if no RSM arguments have been found
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
63 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
64 if int(extra.get(RSM_PREFIX + 'max', 0)) < 0:
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
65 raise ValueError(_("rsm_max can't be negative"))
2763
c4190d5340ab XEP-0059: max value check:
Goffi <goffi@goffi.org>
parents: 2717
diff changeset
66
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
67 rsm_args = {}
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
68 for arg in ("max", "after", "before", "index"):
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
69 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
70 argname = "max_" if arg == "max" else arg
2700
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
71 rsm_args[argname] = extra.pop(RSM_PREFIX + arg)
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
72 except KeyError:
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
73 continue
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
74
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
75 if rsm_args:
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
76 return rsm.RSMRequest(**rsm_args)
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
77 else:
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
78 return None
035901dc946d plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
79
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
80 def response2dict(self, rsm_response, data=None):
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
81 """Return a dict with RSM response
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
82
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
83 Key set in data can be:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
84 - rsm_first: first item id in the page
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
85 - rsm_last: last item id in the page
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
86 - rsm_index: position of the first item in the full set (may be approximate)
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
87 - rsm_count: total number of items in the full set (may be approximage)
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
88 If a value doesn't exists, it's not set.
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
89 All values are set as strings.
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
90 @param rsm_response(rsm.RSMResponse): response to parse
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
91 @param data(dict, None): dict to update with rsm_* data.
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
92 If None, a new dict is created
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
93 @return (dict): data dict
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
94 """
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
95 if data is None:
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
96 data = {}
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
97 if rsm_response.first is not None:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
98 data["first"] = rsm_response.first
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
99 if rsm_response.last is not None:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
100 data["last"] = rsm_response.last
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
101 if rsm_response.index is not None:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
102 data["index"] = rsm_response.index
2717
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
103 return data
e3f6de6ce320 plugin XEP-0059: added serialise method
Goffi <goffi@goffi.org>
parents: 2700
diff changeset
104
3592
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
105 def getNextRequest(
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
106 self,
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
107 rsm_request: rsm.RSMRequest,
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
108 rsm_response: rsm.RSMResponse,
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
109 log_progress: bool = True,
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
110 ) -> Optional[rsm.RSMRequest]:
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
111 """Generate next request to paginate through all items
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
112
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
113 Page will be retrieved forward
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
114 @param rsm_request: last request used
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
115 @param rsm_response: response from the last request
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
116 @return: request to retrive next page, or None if we are at the end
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
117 or if pagination is not possible
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
118 """
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
119 if rsm_request.max == 0:
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
120 log.warning("Can't do pagination if max is 0")
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
121 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
122 if rsm_response is None:
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
123 # may happen if result set it empty, or we are at the end
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
124 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
125 if (
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
126 rsm_response.count is not None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
127 and rsm_response.index is not None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
128 ):
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
129 next_index = rsm_response.index + rsm_request.max
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
130 if next_index >= rsm_response.count:
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
131 # we have reached the last page
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
132 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
133
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
134 if log_progress:
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
135 log.debug(
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
136 f"retrieving items {next_index} to "
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
137 f"{min(next_index+rsm_request.max, rsm_response.count)} on "
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
138 f"{rsm_response.count} ({next_index/rsm_response.count*100:.2f}%)"
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
139 )
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
140
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
141 if rsm_response.last is None:
3617
766729ac4146 plugin XEP-0059: don't show warning message when <last> is missing if there is not message
Goffi <goffi@goffi.org>
parents: 3592
diff changeset
142 if rsm_response.count:
766729ac4146 plugin XEP-0059: don't show warning message when <last> is missing if there is not message
Goffi <goffi@goffi.org>
parents: 3592
diff changeset
143 log.warning("Can't do pagination, no \"last\" received")
3592
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
144 return None
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
145
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
146 return rsm.RSMRequest(
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
147 max_=rsm_request.max,
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
148 after=rsm_response.last
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
149 )
ef144aaea2bb plugin XEP-0059: new `getNextRequest` method to generate request to retrieve next page
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
150
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
151
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
152 @implementer(iwokkel.IDisco)
1769
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
153 class XEP_0059_handler(xmlstream.XMPPHandler):
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
154
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
155 def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
1769
1fc6a380f4db plugin xep-0059: minor cleaning
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
156 return [disco.DiscoFeature(rsm.NS_RSM)]
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
157
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
158 def getDiscoItems(self, requestor, target, nodeIdentifier=""):
1219
16484ebb695b plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff changeset
159 return []