Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0470.py @ 4118:07370d2a9bde
plugin XEP-0167: keep media order when starting a call:
media content order is relevant when building Jingle contents/SDP notably for bundling.
This patch fixes the previous behaviour of always using the same order by keeping the
order of the data (i.e. order of original SDP offer). Previous behaviour could lead to
call failure.
rel 424
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 03 Oct 2023 15:15:24 +0200 |
parents | 4b842c1fb686 |
children | 2109d864a3e7 |
rev | line source |
---|---|
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python3 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 # Libervia plugin for Pubsub Attachments |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # Copyright (C) 2009-2022 Jérôme Poisson (goffi@goffi.org) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # This program is free software: you can redistribute it and/or modify |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # it under the terms of the GNU Affero General Public License as published by |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # the Free Software Foundation, either version 3 of the License, or |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # (at your option) any later version. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # This program is distributed in the hope that it will be useful, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # You should have received a copy of the GNU Affero General Public License |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 from typing import List, Tuple, Dict, Any, Callable, Optional |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
20 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
21 from twisted.words.protocols.jabber import jid, xmlstream, error |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
22 from twisted.words.xish import domish |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
23 from twisted.internet import defer |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
24 from zope.interface import implementer |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
25 from wokkel import pubsub, disco, iwokkel |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
26 |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
27 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
28 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
29 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
30 from libervia.backend.core.core_types import SatXMPPEntity |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
31 from libervia.backend.core import exceptions |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
32 from libervia.backend.tools.common import uri, data_format, date_utils |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
33 from libervia.backend.tools.utils import as_deferred, xmpp_date |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
34 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
35 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 log = getLogger(__name__) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
38 IMPORT_NAME = "XEP-0470" |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 PLUGIN_INFO = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
41 C.PI_NAME: "Pubsub Attachments", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 C.PI_IMPORT_NAME: IMPORT_NAME, |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
43 C.PI_TYPE: C.PLUG_TYPE_XEP, |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 C.PI_MODES: C.PLUG_MODE_BOTH, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
45 C.PI_PROTOCOLS: [], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 C.PI_DEPENDENCIES: ["XEP-0060"], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 C.PI_MAIN: "PubsubAttachments", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 C.PI_HANDLER: "yes", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 C.PI_DESCRIPTION: _("""Pubsub Attachments implementation"""), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
50 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
51 NS_PREFIX = "urn:xmpp:pubsub-attachments:" |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
52 NS_PUBSUB_ATTACHMENTS = f"{NS_PREFIX}1" |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
53 NS_PUBSUB_ATTACHMENTS_SUM = f"{NS_PREFIX}summary:1" |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 class PubsubAttachments: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 namespace = NS_PUBSUB_ATTACHMENTS |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 def __init__(self, host): |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
60 log.info(_("XEP-0470 (Pubsub Attachments) plugin initialization")) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
61 host.register_namespace("pubsub-attachments", NS_PUBSUB_ATTACHMENTS) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
62 self.host = host |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
63 self._p = host.plugins["XEP-0060"] |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
64 self.handlers: Dict[Tuple[str, str], dict[str, Any]] = {} |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
65 host.trigger.add("XEP-0277_send", self.on_mb_send) |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
66 self.register_attachment_handler( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
67 "noticed", NS_PUBSUB_ATTACHMENTS, self.noticed_get, self.noticed_set |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
68 ) |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
69 self.register_attachment_handler( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
70 "reactions", NS_PUBSUB_ATTACHMENTS, self.reactions_get, self.reactions_set |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
72 host.bridge.add_method( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
73 "ps_attachments_get", |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
74 ".plugin", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 in_sign="sssasss", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
76 out_sign="(ss)", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
77 method=self._get, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
78 async_=True, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
79 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
80 host.bridge.add_method( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
81 "ps_attachments_set", |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
82 ".plugin", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
83 in_sign="ss", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 out_sign="", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 method=self._set, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 async_=True, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
89 def get_handler(self, client): |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
90 return PubsubAttachments_Handler() |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
91 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
92 def register_attachment_handler( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
94 name: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 namespace: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
96 get_cb: Callable[ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
97 [SatXMPPEntity, domish.Element, Dict[str, Any]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
98 None], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 set_cb: Callable[ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 [SatXMPPEntity, Dict[str, Any], Optional[domish.Element]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 Optional[domish.Element]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 """Register callbacks to handle an attachment |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 @param name: name of the element |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 @param namespace: namespace of the element |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
107 (name, namespace) couple must be unique |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 @param get: method to call when attachments are retrieved |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 it will be called with (client, element, data) where element is the |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 <attachments> element to parse, and data must be updated in place with |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 parsed data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 @param set: method to call when the attachment need to be set or udpated |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 it will be called with (client, data, former_elt of None if there was no |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 former element). When suitable, ``operation`` should be used to check if we |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 request an ``update`` or a ``replace``. |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
116 The callback can be either a blocking method, a Deferred or a coroutine |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 key = (name, namespace) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 if key in self.handlers: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 raise exceptions.ConflictError( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
121 f"({name}, {namespace}) attachment handlers are already registered" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 self.handlers[(name, namespace)] = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 "get": get_cb, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 "set": set_cb |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
128 def get_attachment_node_name(self, service: jid.JID, node: str, item: str) -> str: |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 """Generate name to use for attachment node""" |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
130 target_item_uri = uri.build_xmpp_uri( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 "pubsub", |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 path=service.userhost(), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 node=node, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 item=item |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 return f"{NS_PUBSUB_ATTACHMENTS}/{target_item_uri}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
138 def is_attachment_node(self, node: str) -> bool: |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 """Return True if node name is an attachment node""" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
140 return node.startswith(f"{NS_PUBSUB_ATTACHMENTS}/") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
141 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
142 def attachment_node_2_item(self, node: str) -> Tuple[jid.JID, str, str]: |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
143 """Retrieve service, node and item from attachement node's name""" |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
144 if not self.is_attachment_node(node): |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 raise ValueError("this is not an attachment node!") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 prefix_len = len(f"{NS_PUBSUB_ATTACHMENTS}/") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 item_uri = node[prefix_len:] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
148 parsed_uri = uri.parse_xmpp_uri(item_uri) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
149 if parsed_uri["type"] != "pubsub": |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 raise ValueError(f"unexpected URI type, it must be a pubsub URI: {item_uri}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
151 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 service = jid.JID(parsed_uri["path"]) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
153 except RuntimeError: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 raise ValueError(f"invalid service in pubsub URI: {item_uri}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
155 node = parsed_uri["node"] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
156 item = parsed_uri["item"] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
157 return (service, node, item) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
158 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
159 async def on_mb_send( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
160 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
161 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
162 service: jid.JID, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
163 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
164 item: domish.Element, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
165 data: dict |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
166 ) -> bool: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
167 """trigger to create attachment node on each publication""" |
3945
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
168 await self.create_attachments_node( |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
169 client, service, node, item["id"], autocreate=True |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
170 ) |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
171 return True |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
172 |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
173 async def create_attachments_node( |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
174 self, |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
175 client: SatXMPPEntity, |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
176 service: jid.JID, |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
177 node: str, |
3945
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
178 item_id: str, |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
179 autocreate: bool = False |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
180 ): |
3945
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
181 """Create node for attachements if necessary |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
182 |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
183 @param service: service of target node |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
184 @param node: node where target item is published |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
185 @param item_id: ID of target item |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
186 @param autocrate: if True, target node is create if it doesn't exist |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
187 """ |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
188 try: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
189 node_config = await self._p.getConfiguration(client, service, node) |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
190 except error.StanzaError as e: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
191 if e.condition == "item-not-found" and autocreate: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
192 # we auto-create the missing node |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
193 await self._p.createNode( |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
194 client, service, node |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
195 ) |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
196 node_config = await self._p.getConfiguration(client, service, node) |
3993
722c25818778
plugin XEP-0470: create a default configuration if node config can't be accessed
Goffi <goffi@goffi.org>
parents:
3956
diff
changeset
|
197 elif e.condition == "forbidden": |
722c25818778
plugin XEP-0470: create a default configuration if node config can't be accessed
Goffi <goffi@goffi.org>
parents:
3956
diff
changeset
|
198 node_config = self._p.make_configuration_form({}) |
3945
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
199 else: |
2b2856ae5eeb
plugin XEP-0470: fix autocreate in `create_attachments_node`:
Goffi <goffi@goffi.org>
parents:
3901
diff
changeset
|
200 raise e |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
201 try: |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
202 # FIXME: check if this is the best publish_model option |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
203 node_config.fields["pubsub#publish_model"].value = "open" |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
204 except KeyError: |
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
205 log.warning("pubsub#publish_model field is missing") |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
206 attachment_node = self.get_attachment_node_name(service, node, item_id) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
207 # we use the same options as target node |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
208 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
209 await self._p.create_if_new_node( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 client, service, attachment_node, options=dict(node_config) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
211 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 except Exception as e: |
3901
43024e50b701
plugin XEP-0470: add `create_attachments_node` method:
Goffi <goffi@goffi.org>
parents:
3888
diff
changeset
|
213 log.warning(f"Can't create attachment node {attachment_node}: {e}") |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
215 def items_2_attachment_data( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 items: List[domish.Element] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 ) -> List[Dict[str, Any]]: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 """Convert items from attachment node to attachment data""" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 list_data = [] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
222 for item in items: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
224 attachments_elt = next( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 item.elements(NS_PUBSUB_ATTACHMENTS, "attachments") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 except StopIteration: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
229 "item is missing <attachments> elements, ignoring it: {item.toXml()}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
231 continue |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
232 item_id = item["id"] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
233 publisher_s = item.getAttribute("publisher") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
234 # publisher is not filled by all pubsub service, so we can't count on it |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 if publisher_s: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 publisher = jid.JID(publisher_s) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
237 if publisher.userhost() != item_id: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
238 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
239 f"publisher {publisher.userhost()!r} doesn't correspond to item " |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
240 f"id {item['id']!r}, ignoring. This may be a hack attempt.\n" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
241 f"{item.toXml()}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
242 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
243 continue |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
244 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
245 jid.JID(item_id) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
246 except RuntimeError: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
247 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
248 "item ID is not a JID, this is not compliant and is ignored: " |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
249 f"{item.toXml}" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
250 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
251 continue |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
252 data = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
253 "from": item_id |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
254 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
255 for handler in self.handlers.values(): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
256 handler["get"](client, attachments_elt, data) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
257 if len(data) > 1: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
258 list_data.append(data) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
259 return list_data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
260 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
261 def _get( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
262 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
263 service_s: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
264 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
265 item: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
266 senders_s: List[str], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
267 extra_s: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
268 profile_key: str |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
269 ) -> defer.Deferred: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
270 client = self.host.get_client(profile_key) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
271 extra = data_format.deserialise(extra_s) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
272 senders = [jid.JID(s) for s in senders_s] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
273 d = defer.ensureDeferred( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
274 self.get_attachments(client, jid.JID(service_s), node, item, senders) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
275 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
276 d.addCallback( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
277 lambda ret: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
278 (data_format.serialise(ret[0]), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
279 data_format.serialise(ret[1])) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
280 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
281 return d |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
282 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
283 async def get_attachments( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
284 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
285 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
286 service: jid.JID, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
287 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
288 item: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
289 senders: Optional[List[jid.JID]], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
290 extra: Optional[dict] = None |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
291 ) -> Tuple[List[Dict[str, Any]], dict]: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
292 """Retrieve data attached to a pubsub item |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
293 |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
294 @param service: pubsub service where the node is |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
295 @param node: pubsub node containing the item |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
296 @param item: ID of the item for which attachments will be retrieved |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
297 @param senders: bare JIDs of entities that are checked. Attachments from those |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
298 entities will be retrieved. |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
299 If None, attachments from all entities will be retrieved |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
300 @param extra: extra data, will be used as ``extra`` argument when doing |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
301 ``get_items`` call. |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
302 @return: A tuple with: |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
303 - the list of attachments data, one item per found sender. The attachments |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
304 data are dict containing attachment, no ``extra`` field is used here |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
305 (contrarily to attachments data used with ``set_attachements``). |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
306 - metadata returned by the call to ``get_items`` |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
307 """ |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
308 if extra is None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
309 extra = {} |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
310 attachment_node = self.get_attachment_node_name(service, node, item) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
311 item_ids = [e.userhost() for e in senders] if senders else None |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
312 items, metadata = await self._p.get_items( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
313 client, service, attachment_node, item_ids=item_ids, extra=extra |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
314 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
315 list_data = self.items_2_attachment_data(client, items) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
316 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
317 return list_data, metadata |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
318 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
319 def _set( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
320 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
321 attachments_s: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
322 profile_key: str |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
323 ) -> None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
324 client = self.host.get_client(profile_key) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
325 attachments = data_format.deserialise(attachments_s) or {} |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
326 return defer.ensureDeferred(self.set_attachements(client, attachments)) |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
327 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
328 async def apply_set_handler( |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
329 self, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
330 client: SatXMPPEntity, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
331 attachments_data: dict, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
332 item_elt: Optional[domish.Element], |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
333 handlers: Optional[List[Tuple[str, str]]] = None, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
334 from_jid: Optional[jid.JID] = None, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
335 ) -> domish.Element: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
336 """Apply all ``set`` callbacks to an attachments item |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
337 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
338 @param attachments_data: data describing the attachments |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
339 ``extra`` key will be used, and created if not found |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
340 @param from_jid: jid of the author of the attachments |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
341 ``client.jid.userhostJID()`` will be used if not specified |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
342 @param item_elt: item containing an <attachments> element |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
343 will be modified in place |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
344 if None, a new element will be created |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
345 @param handlers: list of (name, namespace) of handlers to use. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
346 if None, all registered handlers will be used. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
347 @return: updated item_elt if given, otherwise a new item_elt |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
348 """ |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
349 attachments_data.setdefault("extra", {}) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
350 if item_elt is None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
351 item_id = client.jid.userhost() if from_jid is None else from_jid.userhost() |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
352 item_elt = pubsub.Item(item_id) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
353 item_elt.addElement((NS_PUBSUB_ATTACHMENTS, "attachments")) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
354 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
355 try: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
356 attachments_elt = next( |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
357 item_elt.elements(NS_PUBSUB_ATTACHMENTS, "attachments") |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
358 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
359 except StopIteration: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
360 log.warning( |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
361 f"no <attachments> element found, creating a new one: {item_elt.toXml()}" |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
362 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
363 attachments_elt = item_elt.addElement((NS_PUBSUB_ATTACHMENTS, "attachments")) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
364 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
365 if handlers is None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
366 handlers = list(self.handlers.keys()) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
367 |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
368 for name, namespace in handlers: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
369 try: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
370 handler = self.handlers[(name, namespace)] |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
371 except KeyError: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
372 log.error( |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
373 f"unregistered handler ({name!r}, {namespace!r}) is requested, " |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
374 "ignoring" |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
375 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
376 continue |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
377 try: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
378 former_elt = next(attachments_elt.elements(namespace, name)) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
379 except StopIteration: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
380 former_elt = None |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
381 new_elt = await as_deferred( |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
382 handler["set"], client, attachments_data, former_elt |
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
383 ) |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
384 if new_elt != former_elt: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
385 if former_elt is not None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
386 attachments_elt.children.remove(former_elt) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
387 if new_elt is not None: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
388 attachments_elt.addChild(new_elt) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
389 return item_elt |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
390 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
391 async def set_attachements( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
392 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
393 client: SatXMPPEntity, |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
394 attachments_data: Dict[str, Any] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
395 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
396 """Set or update attachments |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
397 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
398 Former <attachments> element will be retrieved and updated. Individual |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
399 attachments replace or update their elements individually, according to the |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
400 "operation" key. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
401 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
402 "operation" key may be "update" or "replace", and defaults to update, it is only |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
403 used in attachments where "update" makes sense (e.g. it's used for "reactions" |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
404 but not for "noticed"). |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
405 |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
406 @param attachments_data: data describing attachments. Various keys (usually stored |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
407 in attachments_data["extra"]) may be used depending on the attachments |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
408 handlers registered. The keys "service", "node" and "id" MUST be set. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
409 ``attachments_data`` is thought to be compatible with microblog data. |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
410 |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
411 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
412 try: |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
413 service = jid.JID(attachments_data["service"]) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
414 node = attachments_data["node"] |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
415 item = attachments_data["id"] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
416 except (KeyError, RuntimeError): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
417 raise ValueError( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
418 'data must have "service", "node" and "id" set' |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
419 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
420 attachment_node = self.get_attachment_node_name(service, node, item) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
421 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
422 items, __ = await self._p.get_items( |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
423 client, service, attachment_node, item_ids=[client.jid.userhost()] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
424 ) |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
425 except exceptions.NotFound: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
426 item_elt = None |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
427 else: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
428 if not items: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
429 item_elt = None |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
430 else: |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
431 item_elt = items[0] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
432 |
3956
3cb9ade2ab84
plugin pubsub signing: pubsub items signature implementation:
Goffi <goffi@goffi.org>
parents:
3945
diff
changeset
|
433 item_elt = await self.apply_set_handler( |
3869
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
434 client, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
435 attachments_data, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
436 item_elt=item_elt, |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
437 ) |
c0bcbcf5b4b7
component AP gateway: handle `Like` and `Undo`/`Like` activities:
Goffi <goffi@goffi.org>
parents:
3864
diff
changeset
|
438 |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
439 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
440 await self._p.send_items(client, service, attachment_node, [item_elt]) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
441 except error.StanzaError as e: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
442 if e.condition == "item-not-found": |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
443 # the node doesn't exist, we can't publish attachments |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
444 log.warning( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
445 f"no attachment node found at {service} on {node!r} for item " |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
446 f"{item!r}, we can't update attachments." |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
447 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
448 raise exceptions.NotFound("No attachment node available") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
449 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
450 raise e |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
451 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
452 async def subscribe( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
453 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
454 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
455 service: jid.JID, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
456 node: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
457 item: str, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
458 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
459 """Subscribe to attachment node targeting the item |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
460 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
461 @param service: service of target item (will also be used for attachment node) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
462 @param node: node of target item (used to get attachment node's name) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
463 @param item: name of target item (used to get attachment node's name) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
464 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
465 attachment_node = self.get_attachment_node_name(service, node, item) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
466 await self._p.subscribe(client, service, attachment_node) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
467 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
468 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
469 def set_timestamp(self, attachment_elt: domish.Element, data: dict) -> None: |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
470 """Check if a ``timestamp`` attribute is set, parse it, and fill data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
471 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
472 @param attachments_elt: element where the ``timestamp`` attribute may be set |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
473 @param data: data specific to the attachment (i.e. not the whole microblog data) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
474 ``timestamp`` field will be set there if timestamp exists and is parsable |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
475 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
476 timestamp_raw = attachment_elt.getAttribute("timestamp") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
477 if timestamp_raw: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
478 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
479 timestamp = date_utils.date_parse(timestamp_raw) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
480 except date_utils.ParserError: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
481 log.warning(f"can't parse timestamp: {timestamp_raw}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
482 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
483 data["timestamp"] = timestamp |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
484 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
485 def noticed_get( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
486 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
487 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
488 attachments_elt: domish.Element, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
489 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
490 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
491 try: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
492 noticed_elt = next( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
493 attachments_elt.elements(NS_PUBSUB_ATTACHMENTS, "noticed") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
494 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
495 except StopIteration: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
496 pass |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
497 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
498 noticed_data = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
499 "noticed": True |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
500 } |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
501 self.set_timestamp(noticed_elt, noticed_data) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
502 data["noticed"] = noticed_data |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
503 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
504 def noticed_set( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
505 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
506 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
507 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
508 former_elt: Optional[domish.Element] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
509 ) -> Optional[domish.Element]: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
510 """add or remove a <noticed> attachment |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
511 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
512 if data["noticed"] is True, element is added, if it's False, it's removed, and |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
513 it's not present or None, the former element is kept. |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
514 """ |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
515 noticed = data["extra"].get("noticed") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
516 if noticed is None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
517 return former_elt |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
518 elif noticed: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
519 return domish.Element( |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
520 (NS_PUBSUB_ATTACHMENTS, "noticed"), |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
521 attribs = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
522 "timestamp": xmpp_date() |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
523 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
524 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
525 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
526 return None |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
527 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
528 def reactions_get( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
529 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
530 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
531 attachments_elt: domish.Element, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
532 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
533 ) -> None: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
534 try: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
535 reactions_elt = next( |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
536 attachments_elt.elements(NS_PUBSUB_ATTACHMENTS, "reactions") |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
537 ) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
538 except StopIteration: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
539 pass |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
540 else: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
541 reactions_data = {"reactions": []} |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
542 reactions = reactions_data["reactions"] |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
543 for reaction_elt in reactions_elt.elements(NS_PUBSUB_ATTACHMENTS, "reaction"): |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
544 reactions.append(str(reaction_elt)) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
545 self.set_timestamp(reactions_elt, reactions_data) |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
546 data["reactions"] = reactions_data |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
547 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3993
diff
changeset
|
548 def reactions_set( |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
549 self, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
550 client: SatXMPPEntity, |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
551 data: Dict[str, Any], |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
552 former_elt: Optional[domish.Element] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
553 ) -> Optional[domish.Element]: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
554 """update the <reaction> attachment""" |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
555 reactions_data = data["extra"].get("reactions") |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
556 if reactions_data is None: |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
557 return former_elt |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
558 operation_type = reactions_data.get("operation", "update") |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
559 if operation_type == "update": |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
560 former_reactions = { |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
561 str(r) for r in former_elt.elements(NS_PUBSUB_ATTACHMENTS, "reaction") |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
562 } if former_elt is not None else set() |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
563 added_reactions = set(reactions_data.get("add") or []) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
564 removed_reactions = set(reactions_data.get("remove") or []) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
565 reactions = list((former_reactions | added_reactions) - removed_reactions) |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
566 elif operation_type == "replace": |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
567 reactions = reactions_data.get("reactions") or [] |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
568 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
569 raise exceptions.DataError(f"invalid reaction operation: {operation_type!r}") |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
570 if reactions: |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
571 reactions_elt = domish.Element( |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
572 (NS_PUBSUB_ATTACHMENTS, "reactions"), |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
573 attribs = { |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
574 "timestamp": xmpp_date() |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
575 } |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
576 ) |
3888
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
577 for reactions_data in reactions: |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
578 reactions_elt.addElement("reaction", content=reactions_data) |
aa7197b67c26
component AP gateway: AP <=> XMPP reactions conversions:
Goffi <goffi@goffi.org>
parents:
3869
diff
changeset
|
579 return reactions_elt |
3864
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
580 else: |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
581 return None |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
582 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
583 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
584 @implementer(iwokkel.IDisco) |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
585 class PubsubAttachments_Handler(xmlstream.XMPPHandler): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
586 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
587 def getDiscoInfo(self, requestor, service, nodeIdentifier=""): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
588 return [disco.DiscoFeature(NS_PUBSUB_ATTACHMENTS)] |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
589 |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
590 def getDiscoItems(self, requestor, service, nodeIdentifier=""): |
ac255a0fbd4c
plugin pubsub attachments: partial implementation of pubsub-attachments protoXEP:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
591 return [] |