annotate libervia/backend/plugins/plugin_xep_0277.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 0e48181d50ab
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
3 # SAT plugin for microblogging over XMPP (xep-0277)
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3341
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
5
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
6 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
9 # (at your option) any later version.
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
10
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
11 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
14 # GNU Affero General Public License for more details.
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
15
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
18
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
19 import time
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
20 import dateutil
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
21 import calendar
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
22 from mimetypes import guess_type
3502
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
23 from secrets import token_urlsafe
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
24 from typing import List, Optional, Dict, Tuple, Any, Dict
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
25 from functools import partial
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
26
3502
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
27 import shortuuid
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
28
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
29 from twisted.words.protocols.jabber import jid, error
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
30 from twisted.words.protocols.jabber.xmlstream import XMPPHandler
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
31 from twisted.words.xish import domish
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
32 from twisted.internet import defer
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
33 from twisted.python import failure
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
34
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
35 # XXX: sat_tmp.wokkel.pubsub is actually used instead of wokkel version
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
36 from wokkel import pubsub
3949
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
37 from wokkel import disco, iwokkel, rsm
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
38 from zope.interface import implementer
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
39
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
40 from libervia.backend.core.i18n import _
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
41 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
42 from libervia.backend.core.log import getLogger
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
43 from libervia.backend.core import exceptions
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
44 from libervia.backend.core.core_types import SatXMPPEntity
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
45 from libervia.backend.tools import xml_tools
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
46 from libervia.backend.tools import sat_defer
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
47 from libervia.backend.tools import utils
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
48 from libervia.backend.tools.common import data_format
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
49 from libervia.backend.tools.common import uri as xmpp_uri
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
50 from libervia.backend.tools.common import regex
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
51
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
52
3179
84a94b385760 bridge: messageSend's extra is now serialised
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
53 log = getLogger(__name__)
84a94b385760 bridge: messageSend's extra is now serialised
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
54
84a94b385760 bridge: messageSend's extra is now serialised
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
55
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
56 NS_MICROBLOG = "urn:xmpp:microblog:0"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
57 NS_ATOM = "http://www.w3.org/2005/Atom"
3598
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
58 NS_PUBSUB_EVENT = f"{pubsub.NS_PUBSUB}#event"
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
59 NS_COMMENT_PREFIX = f"{NS_MICROBLOG}:comments/"
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
60
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
61
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
62 PLUGIN_INFO = {
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
63 C.PI_NAME: "Microblogging over XMPP Plugin",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
64 C.PI_IMPORT_NAME: "XEP-0277",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
65 C.PI_TYPE: "XEP",
3726
33d75cd3c371 plugin XEP-0060, XEP-0163, XEP-0277, text syntaxes: make those plugins usable with components
Goffi <goffi@goffi.org>
parents: 3724
diff changeset
66 C.PI_MODES: C.PLUG_MODE_BOTH,
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
67 C.PI_PROTOCOLS: ["XEP-0277"],
2780
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
68 C.PI_DEPENDENCIES: ["XEP-0163", "XEP-0060", "TEXT_SYNTAXES"],
3598
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
69 C.PI_RECOMMENDATIONS: ["XEP-0059", "EXTRA-PEP", "PUBSUB_CACHE"],
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
70 C.PI_MAIN: "XEP_0277",
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
71 C.PI_HANDLER: "yes",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
72 C.PI_DESCRIPTION: _("""Implementation of microblogging Protocol"""),
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
73 }
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
74
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
75
339
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
76 class NodeAccessChangeException(Exception):
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
77 pass
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
78
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
79
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
80 class XEP_0277(object):
1831
68c0dc13d821 plugin blog import, XEP-0277: progress + redirect:
Goffi <goffi@goffi.org>
parents: 1829
diff changeset
81 namespace = NS_MICROBLOG
3724
a0c08fcfe11e plugin XEP-0277: various fixes + async:
Goffi <goffi@goffi.org>
parents: 3680
diff changeset
82 NS_ATOM = NS_ATOM
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
83
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
84 def __init__(self, host):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
85 log.info(_("Microblogging plugin initialization"))
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
86 self.host = host
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
87 host.register_namespace("microblog", NS_MICROBLOG)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
88 self._p = self.host.plugins[
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
89 "XEP-0060"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
90 ] # this facilitate the access to pubsub plugin
3598
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
91 ps_cache = self.host.plugins.get("PUBSUB_CACHE")
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
92 if ps_cache is not None:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
93 ps_cache.register_analyser(
3598
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
94 {
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
95 "name": "XEP-0277",
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
96 "node": NS_MICROBLOG,
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
97 "namespace": NS_ATOM,
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
98 "type": "blog",
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
99 "to_sync": True,
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
100 "parser": self.item_2_mb_data,
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
101 "match_cb": self._cache_node_match_cb,
3598
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
102 }
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
103 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
104 self.rt_sessions = sat_defer.RTDeferredSessions()
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
105 self.host.plugins["XEP-0060"].add_managed_node(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
106 NS_MICROBLOG, items_cb=self._items_received
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
107 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
108
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
109 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
110 "mb_send",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
111 ".plugin",
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
112 in_sign="ssss",
3848
e9c380ef41c8 plugin XEP-0277: return ID of published item in `send` and bridge's `mbSend`
Goffi <goffi@goffi.org>
parents: 3840
diff changeset
113 out_sign="s",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
114 method=self._mb_send,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
115 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
116 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
117 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
118 "mb_repeat",
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
119 ".plugin",
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
120 in_sign="sssss",
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
121 out_sign="s",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
122 method=self._mb_repeat,
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
123 async_=True,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
124 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
125 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
126 "mb_preview",
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
127 ".plugin",
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
128 in_sign="ssss",
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
129 out_sign="s",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
130 method=self._mb_preview,
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
131 async_=True,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
132 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
133 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
134 "mb_retract",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
135 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
136 in_sign="ssss",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
137 out_sign="",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
138 method=self._mb_retract,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
139 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
140 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
141 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
142 "mb_get",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
143 ".plugin",
3586
5f65f4e9f8cb plugin XEP-0060: getItems extra is now serialised dict
Goffi <goffi@goffi.org>
parents: 3584
diff changeset
144 in_sign="ssiasss",
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
145 out_sign="s",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
146 method=self._mb_get,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
147 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
148 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
149 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
150 "mb_rename",
3519
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
151 ".plugin",
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
152 in_sign="sssss",
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
153 out_sign="",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
154 method=self._mb_rename,
3519
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
155 async_=True,
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
156 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
157 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
158 "mb_access_set",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
159 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
160 in_sign="ss",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
161 out_sign="",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
162 method=self.mb_access_set,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
163 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
164 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
165 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
166 "mb_subscribe_to_many",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
167 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
168 in_sign="sass",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
169 out_sign="s",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
170 method=self._mb_subscribe_to_many,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
171 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
172 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
173 "mb_get_from_many_rt_result",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
174 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
175 in_sign="ss",
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
176 out_sign="(ua(sssasa{ss}))",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
177 method=self._mb_get_from_many_rt_result,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
178 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
179 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
180 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
181 "mb_get_from_many",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
182 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
183 in_sign="sasia{ss}s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
184 out_sign="s",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
185 method=self._mb_get_from_many,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
186 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
187 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
188 "mb_get_from_many_with_comments_rt_result",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
189 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
190 in_sign="ss",
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
191 out_sign="(ua(sssa(sa(sssasa{ss}))a{ss}))",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
192 method=self._mb_get_from_many_with_comments_rt_result,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
193 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
194 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
195 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
196 "mb_get_from_many_with_comments",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
197 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
198 in_sign="sasiia{ss}a{ss}s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
199 out_sign="s",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
200 method=self._mb_get_from_many_with_comments,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
201 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
202 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
203 "mb_is_comment_node",
3762
becd7f1aa033 plugin XEP-0277: bridge method `mbIsCommentNode` + methods renaming
Goffi <goffi@goffi.org>
parents: 3761
diff changeset
204 ".plugin",
becd7f1aa033 plugin XEP-0277: bridge method `mbIsCommentNode` + methods renaming
Goffi <goffi@goffi.org>
parents: 3761
diff changeset
205 in_sign="s",
becd7f1aa033 plugin XEP-0277: bridge method `mbIsCommentNode` + methods renaming
Goffi <goffi@goffi.org>
parents: 3761
diff changeset
206 out_sign="b",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
207 method=self.is_comment_node,
3762
becd7f1aa033 plugin XEP-0277: bridge method `mbIsCommentNode` + methods renaming
Goffi <goffi@goffi.org>
parents: 3761
diff changeset
208 )
302
9f3a6cf91668 plugin xep-0277: added getLastMicroblogs method
Goffi <goffi@goffi.org>
parents: 297
diff changeset
209
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
210 def get_handler(self, client):
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
211 return XEP_0277_handler()
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
212
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
213 def _cache_node_match_cb(
3598
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
214 self,
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
215 client: SatXMPPEntity,
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
216 analyse: dict,
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
217 ) -> None:
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
218 """Check is analysed node is a comment and fill analyse accordingly"""
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
219 if analyse["node"].startswith(NS_COMMENT_PREFIX):
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
220 analyse["subtype"] = "comment"
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
221
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
222 def _check_features_cb(self, available):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
223 return {"available": C.BOOL_TRUE}
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
224
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
225 def _check_features_eb(self, fail):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
226 return {"available": C.BOOL_FALSE}
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
227
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
228 def features_get(self, profile):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
229 client = self.host.get_client(profile)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
230 d = self.host.check_features(client, [], identity=("pubsub", "pep"))
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
231 d.addCallbacks(self._check_features_cb, self._check_features_eb)
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
232 return d
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
233
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
234 ## plugin management methods ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
235
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
236 def _items_received(self, client, itemsEvent):
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
237 """Callback which manage items notifications (publish + retract)"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
238
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
239 def manage_item(data, event):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
240 self.host.bridge.ps_event(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
241 C.PS_MICROBLOG,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
242 itemsEvent.sender.full(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
243 itemsEvent.nodeIdentifier,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
244 event,
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
245 data_format.serialise(data),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
246 client.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
247 )
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
248
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
249 for item in itemsEvent.items:
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
250 if item.name == C.PS_ITEM:
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
251 # FIXME: service and node should be used here
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
252 self.item_2_mb_data(client, item, None, None).addCallbacks(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
253 manage_item, lambda failure: None, (C.PS_PUBLISH,)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
254 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
255 elif item.name == C.PS_RETRACT:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
256 manage_item({"id": item["id"]}, C.PS_RETRACT)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
257 else:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
258 raise exceptions.InternalError("Invalid event value")
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
259
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
260 ## data/item transformation ##
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
261
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
262 @defer.inlineCallbacks
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
263 def item_2_mb_data(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
264 self,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
265 client: SatXMPPEntity,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
266 item_elt: domish.Element,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
267 service: Optional[jid.JID],
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
268 # FIXME: node is Optional until all calls to item_2_mb_data set properly service
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
269 # and node. Once done, the Optional must be removed here
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
270 node: Optional[str]
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
271 ) -> dict:
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
272 """Convert an XML Item to microblog data
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
273
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
274 @param item_elt: microblog item element
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
275 @param service: PubSub service where the item has been retrieved
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
276 profile's PEP is used when service is None
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
277 @param node: PubSub node where the item has been retrieved
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
278 if None, "uri" won't be set
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
279 @return: microblog data
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
280 """
3763
b2ade5ecdbab plugin XEP-0277: be sure to have `service` set in `item2mbdata` and `node` when provided
Goffi <goffi@goffi.org>
parents: 3762
diff changeset
281 if service is None:
b2ade5ecdbab plugin XEP-0277: be sure to have `service` set in `item2mbdata` and `node` when provided
Goffi <goffi@goffi.org>
parents: 3762
diff changeset
282 service = client.jid.userhostJID()
b2ade5ecdbab plugin XEP-0277: be sure to have `service` set in `item2mbdata` and `node` when provided
Goffi <goffi@goffi.org>
parents: 3762
diff changeset
283
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
284 extra: Dict[str, Any] = {}
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
285 microblog_data: Dict[str, Any] = {
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
286 "service": service.full(),
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
287 "extra": extra
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
288 }
832
c4b22aedb7d7 plugin groupblog, XEP-0071, XEP-0277, text_syntaxes: manage raw/rich/xhtml data for content/title:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
289
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
290 def check_conflict(key, increment=False):
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
291 """Check if key is already in microblog data
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
292
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
293 @param key(unicode): key to check
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
294 @param increment(bool): if suffix the key with an increment
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
295 instead of raising an exception
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
296 @raise exceptions.DataError: the key already exists
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
297 (not raised if increment is True)
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
298 """
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
299 if key in microblog_data:
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
300 if not increment:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
301 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
302 exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
303 "key {} is already present for item {}"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
304 ).format(key, item_elt["id"])
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
305 )
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
306 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
307 idx = 1 # the idx 0 is the key without suffix
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
308 fmt = "{}#{}"
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
309 new_key = fmt.format(key, idx)
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
310 while new_key in microblog_data:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
311 idx += 1
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
312 new_key = fmt.format(key, idx)
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
313 key = new_key
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
314 return key
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
315
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
316 @defer.inlineCallbacks
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
317 def parseElement(elem):
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
318 """Parse title/content elements and fill microblog_data accordingly"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
319 type_ = elem.getAttribute("type")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
320 if type_ == "xhtml":
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
321 data_elt = elem.firstChildElement()
1709
c47ba491a85a plugin XEP-0277: raise a failure if XHTML content is not wrapped in a <div/>
Goffi <goffi@goffi.org>
parents: 1708
diff changeset
322 if data_elt is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
323 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
324 exceptions.DataError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
325 "XHML content not wrapped in a <div/> element, this is not "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
326 "standard !"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
327 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
328 )
1822
aaf034bc6f7a plugin XEP-0277: moved NS_XHTML namespace to constants + adapted parsing to new behaviour of ElementParser
Goffi <goffi@goffi.org>
parents: 1821
diff changeset
329 if data_elt.uri != C.NS_XHTML:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
330 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
331 exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
332 _("Content of type XHTML must declare its namespace!")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
333 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
334 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
335 key = check_conflict("{}_xhtml".format(elem.name))
1791
1359ad0b37c2 reverted patch 3770d13776e8
Goffi <goffi@goffi.org>
parents: 1779
diff changeset
336 data = data_elt.toXml()
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
337 microblog_data[key] = yield self.host.plugins["TEXT_SYNTAXES"].clean_xhtml(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
338 data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
339 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
340 else:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
341 key = check_conflict(elem.name)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
342 microblog_data[key] = str(elem)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
343
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
344 id_ = item_elt.getAttribute("id", "") # there can be no id for transient nodes
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
345 microblog_data["id"] = id_
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
346 if item_elt.uri not in (pubsub.NS_PUBSUB, NS_PUBSUB_EVENT):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
347 msg = "Unsupported namespace {ns} in pubsub item {id_}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
348 ns=item_elt.uri, id_=id_
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
349 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
350 log.warning(msg)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
351 raise failure.Failure(exceptions.DataError(msg))
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
352
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
353 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
354 entry_elt = next(item_elt.elements(NS_ATOM, "entry"))
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
355 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
356 msg = "No atom entry found in the pubsub item {}".format(id_)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
357 raise failure.Failure(exceptions.DataError(msg))
859
64ec04991d9d plugin XEP-0277: fix pubsub entry parsing using lxml instead of feed.atom
souliane <souliane@mailoo.org>
parents: 858
diff changeset
358
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
359 # uri
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
360 # FIXME: node should alway be set in the future, check FIXME in method signature
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
361 if node is not None:
3763
b2ade5ecdbab plugin XEP-0277: be sure to have `service` set in `item2mbdata` and `node` when provided
Goffi <goffi@goffi.org>
parents: 3762
diff changeset
362 microblog_data["node"] = node
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
363 microblog_data['uri'] = xmpp_uri.build_xmpp_uri(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
364 "pubsub",
3763
b2ade5ecdbab plugin XEP-0277: be sure to have `service` set in `item2mbdata` and `node` when provided
Goffi <goffi@goffi.org>
parents: 3762
diff changeset
365 path=service.full(),
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
366 node=node,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
367 item=id_,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
368 )
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
369
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
370 # language
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
371 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
372 microblog_data["language"] = entry_elt[(C.NS_XML, "lang")].strip()
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
373 except KeyError:
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
374 pass
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
375
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
376 # atom:id
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
377 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
378 id_elt = next(entry_elt.elements(NS_ATOM, "id"))
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
379 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
380 msg = ("No atom id found in the pubsub item {}, this is not standard !"
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
381 .format(id_))
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
382 log.warning(msg)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
383 microblog_data["atom_id"] = ""
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
384 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
385 microblog_data["atom_id"] = str(id_elt)
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
386
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
387 # title/content(s)
1708
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
388
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
389 # FIXME: ATOM and XEP-0277 only allow 1 <title/> element
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
390 # but in the wild we have some blogs with several ones
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
391 # so we don't respect the standard for now (it doesn't break
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
392 # anything anyway), and we'll find a better option later
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
393 # try:
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
394 # title_elt = entry_elt.elements(NS_ATOM, 'title').next()
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
395 # except StopIteration:
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
396 # msg = u'No atom title found in the pubsub item {}'.format(id_)
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
397 # raise failure.Failure(exceptions.DataError(msg))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
398 title_elts = list(entry_elt.elements(NS_ATOM, "title"))
1708
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
399 if not title_elts:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
400 msg = "No atom title found in the pubsub item {}".format(id_)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
401 raise failure.Failure(exceptions.DataError(msg))
1708
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
402 for title_elt in title_elts:
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
403 yield parseElement(title_elt)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
404
1708
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
405 # FIXME: as for <title/>, Atom only authorise at most 1 content
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
406 # but XEP-0277 allows several ones. So for no we handle as
6d6eae490681 plugin XEP-0277: accept several <title/> elements, there is a standard issue so for now it's the most flexible behaviour
Goffi <goffi@goffi.org>
parents: 1699
diff changeset
407 # if more than one can be present
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
408 for content_elt in entry_elt.elements(NS_ATOM, "content"):
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
409 yield parseElement(content_elt)
859
64ec04991d9d plugin XEP-0277: fix pubsub entry parsing using lxml instead of feed.atom
souliane <souliane@mailoo.org>
parents: 858
diff changeset
410
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
411 # we check that text content is present
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
412 for key in ("title", "content"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
413 if key not in microblog_data and ("{}_xhtml".format(key)) in microblog_data:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
414 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
415 "item {id_} provide a {key}_xhtml data but not a text one".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
416 id_=id_, key=key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
417 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
418 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
419 # ... and do the conversion if it's not
2780
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
420 microblog_data[key] = yield self.host.plugins["TEXT_SYNTAXES"].convert(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
421 microblog_data["{}_xhtml".format(key)],
2780
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
422 self.host.plugins["TEXT_SYNTAXES"].SYNTAX_XHTML,
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
423 self.host.plugins["TEXT_SYNTAXES"].SYNTAX_TEXT,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
424 False,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
425 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
426
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
427 if "content" not in microblog_data:
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
428 # use the atom title data as the microblog body content
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
429 microblog_data["content"] = microblog_data["title"]
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
430 del microblog_data["title"]
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
431 if "title_xhtml" in microblog_data:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
432 microblog_data["content_xhtml"] = microblog_data["title_xhtml"]
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
433 del microblog_data["title_xhtml"]
832
c4b22aedb7d7 plugin groupblog, XEP-0071, XEP-0277, text_syntaxes: manage raw/rich/xhtml data for content/title:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
434
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
435 # published/updated dates
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
436 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
437 updated_elt = next(entry_elt.elements(NS_ATOM, "updated"))
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
438 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
439 msg = "No atom updated element found in the pubsub item {}".format(id_)
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
440 raise failure.Failure(exceptions.DataError(msg))
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
441 microblog_data["updated"] = calendar.timegm(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
442 dateutil.parser.parse(str(updated_elt)).utctimetuple()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
443 )
302
9f3a6cf91668 plugin xep-0277: added getLastMicroblogs method
Goffi <goffi@goffi.org>
parents: 297
diff changeset
444 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
445 published_elt = next(entry_elt.elements(NS_ATOM, "published"))
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
446 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
447 microblog_data["published"] = microblog_data["updated"]
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
448 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
449 microblog_data["published"] = calendar.timegm(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
450 dateutil.parser.parse(str(published_elt)).utctimetuple()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
451 )
859
64ec04991d9d plugin XEP-0277: fix pubsub entry parsing using lxml instead of feed.atom
souliane <souliane@mailoo.org>
parents: 858
diff changeset
452
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
453 # links
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
454 comments = microblog_data['comments'] = []
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
455 for link_elt in entry_elt.elements(NS_ATOM, "link"):
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
456 href = link_elt.getAttribute("href")
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
457 if not href:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
458 log.warning(
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
459 f'missing href in <link> element: {link_elt.toXml()}'
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
460 )
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
461 continue
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
462 rel = link_elt.getAttribute("rel")
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
463 if (rel == "replies" and link_elt.getAttribute("title") == "comments"):
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
464 uri = href
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
465 comments_data = {
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
466 "uri": uri,
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
467 }
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
468 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
469 comment_service, comment_node = self.parse_comment_url(uri)
3069
73db9db8b9e1 plugin XEP-0277: fixed comments URLs parsing
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
470 except Exception as e:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
471 log.warning(f"Can't parse comments url: {e}")
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
472 continue
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
473 else:
3763
b2ade5ecdbab plugin XEP-0277: be sure to have `service` set in `item2mbdata` and `node` when provided
Goffi <goffi@goffi.org>
parents: 3762
diff changeset
474 comments_data["service"] = comment_service.full()
b2ade5ecdbab plugin XEP-0277: be sure to have `service` set in `item2mbdata` and `node` when provided
Goffi <goffi@goffi.org>
parents: 3762
diff changeset
475 comments_data["node"] = comment_node
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
476 comments.append(comments_data)
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
477 elif rel == "via":
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
478 try:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
479 repeater_jid = jid.JID(item_elt["publisher"])
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
480 except (KeyError, RuntimeError):
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
481 try:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
482 # we look for stanza element which is at the root, meaning that it
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
483 # has not parent
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
484 top_elt = item_elt.parent
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
485 while top_elt.parent is not None:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
486 top_elt = top_elt.parent
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
487 repeater_jid = jid.JID(top_elt["from"])
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
488 except (AttributeError, RuntimeError):
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
489 # we should always have either the "publisher" attribute or the
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
490 # stanza available
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
491 log.error(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
492 f"Can't find repeater of the post: {item_elt.toXml()}"
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
493 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
494 continue
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
495
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
496 extra["repeated"] = {
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
497 "by": repeater_jid.full(),
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
498 "uri": href
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
499 }
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
500 elif rel in ("related", "enclosure"):
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
501 attachment: Dict[str, Any] = {
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
502 "sources": [{"url": href}]
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
503 }
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
504 if rel == "related":
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
505 attachment["external"] = True
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
506 for attr, key in (
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
507 ("type", "media_type"),
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
508 ("title", "desc"),
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
509 ):
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
510 value = link_elt.getAttribute(attr)
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
511 if value:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
512 attachment[key] = value
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
513 try:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
514 attachment["size"] = int(link_elt.attributes["lenght"])
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
515 except (KeyError, ValueError):
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
516 pass
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
517 if "media_type" not in attachment:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
518 media_type = guess_type(href, False)[0]
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
519 if media_type is not None:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
520 attachment["media_type"] = media_type
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
521
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
522 attachments = extra.setdefault("attachments", [])
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
523 attachments.append(attachment)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
524 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
525 log.warning(
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
526 f"Unmanaged link element: {link_elt.toXml()}"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
527 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
528
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
529 # author
3492
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
530 publisher = item_elt.getAttribute("publisher")
859
64ec04991d9d plugin XEP-0277: fix pubsub entry parsing using lxml instead of feed.atom
souliane <souliane@mailoo.org>
parents: 858
diff changeset
531 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
532 author_elt = next(entry_elt.elements(NS_ATOM, "author"))
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
533 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
534 log.debug("Can't find author element in item {}".format(id_))
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
535 else:
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
536 # name
770
64dd7c0f4feb plugin groupblog, XEP-0277: store both published and updated timestamps
souliane <souliane@mailoo.org>
parents: 745
diff changeset
537 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
538 name_elt = next(author_elt.elements(NS_ATOM, "name"))
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
539 except StopIteration:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
540 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
541 "No name element found in author element of item {}".format(id_)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
542 )
3724
a0c08fcfe11e plugin XEP-0277: various fixes + async:
Goffi <goffi@goffi.org>
parents: 3680
diff changeset
543 author = None
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
544 else:
3550
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
545 author = microblog_data["author"] = str(name_elt).strip()
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
546 # uri
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
547 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
548 uri_elt = next(author_elt.elements(NS_ATOM, "uri"))
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
549 except StopIteration:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
550 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
551 "No uri element found in author element of item {}".format(id_)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
552 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
553 if publisher:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
554 microblog_data["author_jid"] = publisher
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
555 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
556 uri = str(uri_elt)
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
557 if uri.startswith("xmpp:"):
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
558 uri = uri[5:]
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
559 microblog_data["author_jid"] = uri
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
560 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
561 microblog_data["author_jid"] = (
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
562 item_elt.getAttribute("publisher") or ""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
563 )
3550
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
564 if not author and microblog_data["author_jid"]:
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
565 # FIXME: temporary workaround for missing author name, would be
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
566 # better to use directly JID's identity (to be done from frontends?)
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
567 try:
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
568 microblog_data["author"] = jid.JID(microblog_data["author_jid"]).user
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
569 except Exception as e:
7df12ffa6620 plugin XEP-0277: "user" part of author jid is used for author name when later is missing
Goffi <goffi@goffi.org>
parents: 3548
diff changeset
570 log.warning(f"No author name found, and can't parse author jid: {e}")
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
571
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
572 if not publisher:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
573 log.debug("No publisher attribute, we can't verify author jid")
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
574 microblog_data["author_jid_verified"] = False
1681
c6c835046681 plugin XEP-0277: minor fixes for publisher attribute
Goffi <goffi@goffi.org>
parents: 1680
diff changeset
575 elif jid.JID(publisher).userhostJID() == jid.JID(uri).userhostJID():
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
576 microblog_data["author_jid_verified"] = True
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
577 else:
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
578 if "repeated" not in extra:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
579 log.warning(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
580 "item atom:uri differ from publisher attribute, spoofing "
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
581 "attempt ? atom:uri = {} publisher = {}".format(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
582 uri, item_elt.getAttribute("publisher")
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
583 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
584 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
585 microblog_data["author_jid_verified"] = False
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
586 # email
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
587 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
588 email_elt = next(author_elt.elements(NS_ATOM, "email"))
1453
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
589 except StopIteration:
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
590 pass
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
591 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
592 microblog_data["author_email"] = str(email_elt)
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
593
3493
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
594 if not microblog_data.get("author_jid"):
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
595 if publisher:
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
596 microblog_data["author_jid"] = publisher
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
597 microblog_data["author_jid_verified"] = True
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
598 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
599 iq_elt = xml_tools.find_ancestor(item_elt, "iq", C.NS_STREAM)
3493
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
600 microblog_data["author_jid"] = iq_elt["from"]
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
601 microblog_data["author_jid_verified"] = False
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
602
3492
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
603 # categories
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
604 categories = [
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
605 category_elt.getAttribute("term", "")
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
606 for category_elt in entry_elt.elements(NS_ATOM, "category")
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
607 ]
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
608 microblog_data["tags"] = categories
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
609
1671
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
610 ## the trigger ##
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
611 # if other plugins have things to add or change
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
612 yield self.host.trigger.point(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
613 "XEP-0277_item2data", item_elt, entry_elt, microblog_data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
614 )
1671
1895846fc9cb plugin XEP-0277, group blog: added item2data trigger + group permission are parsed when receiving a new item
Goffi <goffi@goffi.org>
parents: 1664
diff changeset
615
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
616 defer.returnValue(microblog_data)
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
617
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
618 async def mb_data_2_entry_elt(self, client, mb_data, item_id, service, node):
306
169e7386650a plugin xep-0277: bridge data is now converted in pubsub item in a separate function
Goffi <goffi@goffi.org>
parents: 304
diff changeset
619 """Convert a data dict to en entry usable to create an item
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
620
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
621 @param mb_data: data dict as given by bridge method.
2480
dc55b854ccf3 plugin XEP-0277: use shortuuid instead of uuid + use item's XMPP URI for atom ID
Goffi <goffi@goffi.org>
parents: 2475
diff changeset
622 @param item_id(unicode): id of the item to use
dc55b854ccf3 plugin XEP-0277: use shortuuid instead of uuid + use item's XMPP URI for atom ID
Goffi <goffi@goffi.org>
parents: 2475
diff changeset
623 @param service(jid.JID, None): pubsub service where the item is sent
dc55b854ccf3 plugin XEP-0277: use shortuuid instead of uuid + use item's XMPP URI for atom ID
Goffi <goffi@goffi.org>
parents: 2475
diff changeset
624 Needed to construct Atom id
dc55b854ccf3 plugin XEP-0277: use shortuuid instead of uuid + use item's XMPP URI for atom ID
Goffi <goffi@goffi.org>
parents: 2475
diff changeset
625 @param node(unicode): pubsub node where the item is sent
dc55b854ccf3 plugin XEP-0277: use shortuuid instead of uuid + use item's XMPP URI for atom ID
Goffi <goffi@goffi.org>
parents: 2475
diff changeset
626 Needed to construct Atom id
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
627 @return: deferred which fire domish.Element
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
628 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
629 entry_elt = domish.Element((NS_ATOM, "entry"))
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
630 extra = mb_data.get("extra", {})
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
631
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
632 ## language ##
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
633 if "language" in mb_data:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
634 entry_elt[(C.NS_XML, "lang")] = mb_data["language"].strip()
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
635
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
636 ## content and title ##
2780
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
637 synt = self.host.plugins["TEXT_SYNTAXES"]
832
c4b22aedb7d7 plugin groupblog, XEP-0071, XEP-0277, text_syntaxes: manage raw/rich/xhtml data for content/title:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
638
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
639 for elem_name in ("title", "content"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
640 for type_ in ["", "_rich", "_xhtml"]:
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
641 attr = f"{elem_name}{type_}"
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
642 if attr in mb_data:
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
643 elem = entry_elt.addElement(elem_name)
832
c4b22aedb7d7 plugin groupblog, XEP-0071, XEP-0277, text_syntaxes: manage raw/rich/xhtml data for content/title:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
644 if type_:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
645 if type_ == "_rich": # convert input from current syntax to XHTML
3724
a0c08fcfe11e plugin XEP-0277: various fixes + async:
Goffi <goffi@goffi.org>
parents: 3680
diff changeset
646 xml_content = await synt.convert(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
647 mb_data[attr], synt.get_current_syntax(client.profile), "XHTML"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
648 )
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
649 if f"{elem_name}_xhtml" in mb_data:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
650 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
651 exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
652 _(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
653 "Can't have xhtml and rich content at the same time"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
654 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
655 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
656 )
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1814
diff changeset
657 else:
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
658 xml_content = mb_data[attr]
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
659
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
660 div_elt = xml_tools.ElementParser()(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
661 xml_content, namespace=C.NS_XHTML
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
662 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
663 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
664 div_elt.name != "div"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
665 or div_elt.uri != C.NS_XHTML
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
666 or div_elt.attributes
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
667 ):
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1814
diff changeset
668 # we need a wrapping <div/> at the top with XHTML namespace
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
669 wrap_div_elt = domish.Element((C.NS_XHTML, "div"))
1817
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1814
diff changeset
670 wrap_div_elt.addChild(div_elt)
7ef0f5f90862 core (xml_tools), plugin XEP-0277: ElementParser element now manage automatically the wrapping with <div/> element when needed + fixed content_xhtml/title_xhtml in XEP-0277
Goffi <goffi@goffi.org>
parents: 1814
diff changeset
671 div_elt = wrap_div_elt
1802
fed95a6c56f8 plugin (xep-0277): avoid wrapping XML in an extra <div> in data2entry
Goffi <goffi@goffi.org>
parents: 1791
diff changeset
672 elem.addChild(div_elt)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
673 elem["type"] = "xhtml"
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
674 if elem_name not in mb_data:
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
675 # there is raw text content, which is mandatory
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
676 # so we create one from xhtml content
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
677 elem_txt = entry_elt.addElement(elem_name)
3724
a0c08fcfe11e plugin XEP-0277: various fixes + async:
Goffi <goffi@goffi.org>
parents: 3680
diff changeset
678 text_content = await self.host.plugins[
2780
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
679 "TEXT_SYNTAXES"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
680 ].convert(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
681 xml_content,
2780
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
682 self.host.plugins["TEXT_SYNTAXES"].SYNTAX_XHTML,
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
683 self.host.plugins["TEXT_SYNTAXES"].SYNTAX_TEXT,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
684 False,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
685 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
686 elem_txt.addContent(text_content)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
687 elem_txt["type"] = "text"
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
688
832
c4b22aedb7d7 plugin groupblog, XEP-0071, XEP-0277, text_syntaxes: manage raw/rich/xhtml data for content/title:
souliane <souliane@mailoo.org>
parents: 811
diff changeset
689 else: # raw text only needs to be escaped to get HTML-safe sequence
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
690 elem.addContent(mb_data[attr])
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
691 elem["type"] = "text"
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
692
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
693 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
694 next(entry_elt.elements(NS_ATOM, "title"))
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
695 except StopIteration:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
696 # we have no title element which is mandatory
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
697 # so we transform content element to title
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
698 elems = list(entry_elt.elements(NS_ATOM, "content"))
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
699 if not elems:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
700 raise exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
701 "There must be at least one content or title element"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
702 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
703 for elem in elems:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
704 elem.name = "title"
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
705
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
706 ## attachments ##
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
707 attachments = extra.get(C.KEY_ATTACHMENTS)
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
708 if attachments:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
709 for attachment in attachments:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
710 try:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
711 url = attachment["url"]
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
712 except KeyError:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
713 try:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
714 url = next(
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
715 s['url'] for s in attachment["sources"] if 'url' in s
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
716 )
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
717 except (StopIteration, KeyError):
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
718 log.warning(
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
719 f'"url" missing in attachment, ignoring: {attachment}'
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
720 )
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
721 continue
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
722
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
723 if not url.startswith("http"):
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
724 log.warning(f"non HTTP URL in attachment, ignoring: {attachment}")
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
725 continue
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
726 link_elt = entry_elt.addElement("link")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
727 # XXX: "uri" is set in self._manage_comments if not already existing
4020
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
728 link_elt["href"] = url
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
729 if attachment.get("external", False):
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
730 # this is a link to an external data such as a website
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
731 link_elt["rel"] = "related"
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
732 else:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
733 # this is an attached file
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
734 link_elt["rel"] = "enclosure"
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
735 for key, attr in (
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
736 ("media_type", "type"),
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
737 ("desc", "title"),
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
738 ("size", "lenght")
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
739 ):
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
740 value = attachment.get(key)
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
741 if value:
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
742 link_elt[attr] = str(value)
d8a1219e913f plugin XEP-0277: handle "related" and "enclosure" links:
Goffi <goffi@goffi.org>
parents: 4018
diff changeset
743
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
744 ## author ##
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
745 author_elt = entry_elt.addElement("author")
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
746 try:
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
747 author_name = mb_data["author"]
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
748 except KeyError:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
749 # FIXME: must use better name
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
750 author_name = client.jid.user
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
751 author_elt.addElement("name", content=author_name)
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
752
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
753 try:
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
754 author_jid_s = mb_data["author_jid"]
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
755 except KeyError:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
756 author_jid_s = client.jid.userhost()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
757 author_elt.addElement("uri", content="xmpp:{}".format(author_jid_s))
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
758
1820
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
759 try:
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
760 author_jid_s = mb_data["author_email"]
1820
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
761 except KeyError:
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
762 pass
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
763
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
764 ## published/updated time ##
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
765 current_time = time.time()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
766 entry_elt.addElement(
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
767 "updated", content=utils.xmpp_date(float(mb_data.get("updated", current_time)))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
768 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
769 entry_elt.addElement(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
770 "published",
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
771 content=utils.xmpp_date(float(mb_data.get("published", current_time))),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
772 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
773
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
774 ## categories ##
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
775 for tag in mb_data.get('tags', []):
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
776 category_elt = entry_elt.addElement("category")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
777 category_elt["term"] = tag
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
778
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
779 ## id ##
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
780 entry_id = mb_data.get(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
781 "id",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
782 xmpp_uri.build_xmpp_uri(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
783 "pubsub",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
784 path=service.full() if service is not None else client.jid.userhost(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
785 node=node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
786 item=item_id,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
787 ),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
788 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
789 entry_elt.addElement("id", content=entry_id) #
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
790
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
791 ## comments ##
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
792 for comments_data in mb_data.get('comments', []):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
793 link_elt = entry_elt.addElement("link")
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
794 # XXX: "uri" is set in self._manage_comments if not already existing
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
795 link_elt["href"] = comments_data["uri"]
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
796 link_elt["rel"] = "replies"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
797 link_elt["title"] = "comments"
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
798
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
799 if "repeated" in extra:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
800 try:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
801 repeated = extra["repeated"]
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
802 link_elt = entry_elt.addElement("link")
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
803 link_elt["rel"] = "via"
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
804 link_elt["href"] = repeated["uri"]
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
805 except KeyError as e:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
806 log.warning(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
807 f"invalid repeated element({e}): {extra['repeated']}"
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
808 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
809
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
810 ## final item building ##
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
811 item_elt = pubsub.Item(id=item_id, payload=entry_elt)
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
812
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
813 ## the trigger ##
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
814 # if other plugins have things to add or change
3724
a0c08fcfe11e plugin XEP-0277: various fixes + async:
Goffi <goffi@goffi.org>
parents: 3680
diff changeset
815 self.host.trigger.point(
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
816 "XEP-0277_data2entry", client, mb_data, entry_elt, item_elt
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
817 )
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
818
3724
a0c08fcfe11e plugin XEP-0277: various fixes + async:
Goffi <goffi@goffi.org>
parents: 3680
diff changeset
819 return item_elt
306
169e7386650a plugin xep-0277: bridge data is now converted in pubsub item in a separate function
Goffi <goffi@goffi.org>
parents: 304
diff changeset
820
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
821 ## publish/preview ##
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
822
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
823 def is_comment_node(self, node: str) -> bool:
3740
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
824 """Indicate if the node is prefixed with comments namespace"""
3762
becd7f1aa033 plugin XEP-0277: bridge method `mbIsCommentNode` + methods renaming
Goffi <goffi@goffi.org>
parents: 3761
diff changeset
825 return node.startswith(NS_COMMENT_PREFIX)
3740
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
826
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
827 def get_parent_item(self, item_id: str) -> str:
3740
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
828 """Return parent of a comment node
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
829
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
830 @param item_id: a comment node
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
831 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
832 if not self.is_comment_node(item_id):
3740
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
833 raise ValueError("This node is not a comment node")
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
834 return item_id[len(NS_COMMENT_PREFIX):]
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
835
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
836 def get_comments_node(self, item_id):
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
837 """Generate comment node
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
838
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
839 @param item_id(unicode): id of the parent item
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
840 @return (unicode): comment node to use
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
841 """
3598
d390ff50af0f plugin XEP-0277: pubsub cache analyser implementation
Goffi <goffi@goffi.org>
parents: 3591
diff changeset
842 return f"{NS_COMMENT_PREFIX}{item_id}"
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
843
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
844 def get_comments_service(self, client, parent_service=None):
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
845 """Get prefered PubSub service to create comment node
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
846
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
847 @param pubsub_service(jid.JID, None): PubSub service of the parent item
2433
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
848 @param return((D)jid.JID, None): PubSub service to use
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
849 """
2433
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
850 if parent_service is not None:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
851 if parent_service.user:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
852 # we are on a PEP
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
853 if parent_service.host == client.jid.host:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
854 #  it's our server, we use already found client.pubsub_service below
2433
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
855 pass
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
856 else:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
857 # other server, let's try to find a non PEP service there
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
858 d = self.host.find_service_entity(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
859 client, "pubsub", "service", parent_service
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
860 )
2433
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
861 d.addCallback(lambda entity: entity or parent_service)
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
862 else:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
863 # parent is already on a normal Pubsub service, we re-use it
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
864 return defer.succeed(parent_service)
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
865
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
866 return defer.succeed(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
867 client.pubsub_service if client.pubsub_service is not None else parent_service
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
868 )
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
869
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
870 async def _manage_comments(self, client, mb_data, service, node, item_id, access=None):
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
871 """Check comments keys in mb_data and create comments node if necessary
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
872
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
873 if a comments node metadata is set in the mb_data['comments'] list, it is used
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
874 otherwise it is generated (if allow_comments is True).
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
875 @param mb_data(dict): microblog mb_data
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
876 @param service(jid.JID, None): PubSub service of the parent item
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
877 @param node(unicode): node of the parent item
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
878 @param item_id(unicode): id of the parent item
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
879 @param access(unicode, None): access model
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
880 None to use same access model as parent item
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
881 """
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
882 allow_comments = mb_data.pop("allow_comments", None)
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
883 if allow_comments is None:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
884 if "comments" in mb_data:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
885 mb_data["allow_comments"] = True
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
886 else:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
887 # no comments set or requested, nothing to do
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
888 return
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
889 elif allow_comments == False:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
890 if "comments" in mb_data:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
891 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
892 "comments are not allowed but there is already a comments node, "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
893 "it may be lost: {uri}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
894 uri=mb_data["comments"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
895 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
896 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
897 del mb_data["comments"]
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
898 return
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
899
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
900 # we have usually a single comment node, but the spec allow several, so we need to
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
901 # handle this in a list
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
902 if len(mb_data.setdefault('comments', [])) == 0:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
903 # we need at least one comment node
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
904 comments_data = {}
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
905 mb_data['comments'].append({})
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
906
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
907 if access is None:
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
908 # TODO: cache access models per service/node
3740
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
909 parent_node_config = await self._p.getConfiguration(client, service, node)
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
910 access = parent_node_config.get(self._p.OPT_ACCESS_MODEL, self._p.ACCESS_OPEN)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
911
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
912 options = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
913 self._p.OPT_ACCESS_MODEL: access,
4018
86efd854dee1 plugin XEP-0277: ensure that `max-items` is set to `max` when creating a node
Goffi <goffi@goffi.org>
parents: 4011
diff changeset
914 self._p.OPT_MAX_ITEMS: "max",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
915 self._p.OPT_PERSIST_ITEMS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
916 self._p.OPT_DELIVER_PAYLOADS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
917 self._p.OPT_SEND_ITEM_SUBSCRIBE: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
918 # FIXME: would it make sense to restrict publish model to subscribers?
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
919 self._p.OPT_PUBLISH_MODEL: self._p.ACCESS_OPEN,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
920 }
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
921
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
922 # if other plugins need to change the options
3761
e0ff2f277e13 plugin XEP-0277: fix `await` trigger incorrectly used on a sync trigger
Goffi <goffi@goffi.org>
parents: 3740
diff changeset
923 self.host.trigger.point("XEP-0277_comments", client, mb_data, options)
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
924
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
925 for comments_data in mb_data['comments']:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
926 uri = comments_data.get('uri')
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
927 comments_node = comments_data.get('node')
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
928 try:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
929 comments_service = jid.JID(comments_data["service"])
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
930 except KeyError:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
931 comments_service = None
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
932
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
933 if uri:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
934 uri_service, uri_node = self.parse_comment_url(uri)
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
935 if ((comments_node is not None and comments_node!=uri_node)
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
936 or (comments_service is not None and comments_service!=uri_service)):
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
937 raise ValueError(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
938 f"Incoherence between comments URI ({uri}) and comments_service "
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
939 f"({comments_service}) or comments_node ({comments_node})")
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
940 comments_data['service'] = comments_service = uri_service
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
941 comments_data['node'] = comments_node = uri_node
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
942 else:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
943 if not comments_node:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
944 comments_node = self.get_comments_node(item_id)
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
945 comments_data['node'] = comments_node
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
946 if comments_service is None:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
947 comments_service = await self.get_comments_service(client, service)
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
948 if comments_service is None:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
949 comments_service = client.jid.userhostJID()
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
950 comments_data['service'] = comments_service
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
951
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
952 comments_data['uri'] = xmpp_uri.build_xmpp_uri(
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
953 "pubsub",
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
954 path=comments_service.full(),
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
955 node=comments_node,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
956 )
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
957
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
958 try:
3740
ea6fda69bb9f plugin XEP-0277: methods to check is a node is a comments node and to get its parent
Goffi <goffi@goffi.org>
parents: 3726
diff changeset
959 await self._p.createNode(client, comments_service, comments_node, options)
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
960 except error.StanzaError as e:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
961 if e.condition == "conflict":
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
962 log.info(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
963 "node {} already exists on service {}".format(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
964 comments_node, comments_service
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
965 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
966 )
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
967 else:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
968 raise e
1711
e5b569d0c2e7 plugin XEP-0277: don't try to create a new comments node if it already exists
souliane <souliane@mailoo.org>
parents: 1709
diff changeset
969 else:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
970 if access == self._p.ACCESS_WHITELIST:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
971 # for whitelist access we need to copy affiliations from parent item
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
972 comments_affiliations = await self._p.get_node_affiliations(
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
973 client, service, node
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
974 )
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
975 # …except for "member", that we transform to publisher
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
976 # because we wants members to be able to write to comments
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
977 for jid_, affiliation in list(comments_affiliations.items()):
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
978 if affiliation == "member":
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
979 comments_affiliations[jid_] == "publisher"
2286
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
980
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
981 await self._p.set_node_affiliations(
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
982 client, comments_service, comments_node, comments_affiliations
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
983 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
984
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
985 def friendly_id(self, data):
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
986 """Generate a user friendly id from title or content"""
3519
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
987 # TODO: rich content should be converted to plain text
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
988 id_base = regex.url_friendly_text(
3519
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
989 data.get('title')
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
990 or data.get('title_rich')
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
991 or data.get('content')
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
992 or data.get('content_rich')
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
993 or ''
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
994 )
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
995 return f"{id_base}-{token_urlsafe(3)}"
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
996
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
997 def _mb_send(self, service, node, data, profile_key):
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
998 service = jid.JID(service) if service else None
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
999 node = node if node else NS_MICROBLOG
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1000 client = self.host.get_client(profile_key)
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1001 data = data_format.deserialise(data)
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1002 return defer.ensureDeferred(self.send(client, data, service, node))
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1003
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1004 async def send(
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1005 self,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1006 client: SatXMPPEntity,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1007 data: dict,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1008 service: Optional[jid.JID] = None,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1009 node: Optional[str] = NS_MICROBLOG
3848
e9c380ef41c8 plugin XEP-0277: return ID of published item in `send` and bridge's `mbSend`
Goffi <goffi@goffi.org>
parents: 3840
diff changeset
1010 ) -> Optional[str]:
306
169e7386650a plugin xep-0277: bridge data is now converted in pubsub item in a separate function
Goffi <goffi@goffi.org>
parents: 304
diff changeset
1011 """Send XEP-0277's microblog data
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
1012
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1013 @param data: microblog data (must include at least a "content" or a "title" key).
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
1014 see http://wiki.goffi.org/wiki/Bridge_API_-_Microblogging/en for details
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1015 @param service: PubSub service where the microblog must be published
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1016 None to publish on profile's PEP
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1017 @param node: PubSub node to use (defaut to microblog NS)
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
1018 None is equivalend as using default value
3848
e9c380ef41c8 plugin XEP-0277: return ID of published item in `send` and bridge's `mbSend`
Goffi <goffi@goffi.org>
parents: 3840
diff changeset
1019 @return: ID of the published item
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1020 """
1699
a72f04c67ac9 plugin XEP-0277: just a reminder
Goffi <goffi@goffi.org>
parents: 1681
diff changeset
1021 # TODO: check that all data keys are used, this would avoid sending publicly a private message
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1022 # by accident (e.g. if group plugin is not loaded, and "group*" key are not used)
3861
37a1193d90db plugin XEP-0277: add a trigger to `send` method:
Goffi <goffi@goffi.org>
parents: 3848
diff changeset
1023 if service is None:
37a1193d90db plugin XEP-0277: add a trigger to `send` method:
Goffi <goffi@goffi.org>
parents: 3848
diff changeset
1024 service = client.jid.userhostJID()
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
1025 if node is None:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
1026 node = NS_MICROBLOG
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1027
3502
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
1028 item_id = data.get("id")
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
1029 if item_id is None:
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
1030 if data.get("user_friendly_id", True):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1031 item_id = self.friendly_id(data)
3502
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
1032 else:
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
1033 item_id = str(shortuuid.uuid())
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
1034
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1035 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1036 await self._manage_comments(client, data, service, node, item_id, access=None)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1037 except error.StanzaError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1038 log.warning("Can't create comments node for item {}".format(item_id))
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
1039 item = await self.mb_data_2_entry_elt(client, data, item_id, service, node)
3861
37a1193d90db plugin XEP-0277: add a trigger to `send` method:
Goffi <goffi@goffi.org>
parents: 3848
diff changeset
1040
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1041 if not await self.host.trigger.async_point(
3861
37a1193d90db plugin XEP-0277: add a trigger to `send` method:
Goffi <goffi@goffi.org>
parents: 3848
diff changeset
1042 "XEP-0277_send", client, service, node, item, data
37a1193d90db plugin XEP-0277: add a trigger to `send` method:
Goffi <goffi@goffi.org>
parents: 3848
diff changeset
1043 ):
37a1193d90db plugin XEP-0277: add a trigger to `send` method:
Goffi <goffi@goffi.org>
parents: 3848
diff changeset
1044 return None
37a1193d90db plugin XEP-0277: add a trigger to `send` method:
Goffi <goffi@goffi.org>
parents: 3848
diff changeset
1045
3957
b8ab6da58ac8 plugin XEP-0277: `signed` flag can now be used in `extra` to use sign the blog post:
Goffi <goffi@goffi.org>
parents: 3949
diff changeset
1046 extra = {}
3972
5fbdf986670c plugin pte: Pubsub Target Encryption implementation:
Goffi <goffi@goffi.org>
parents: 3957
diff changeset
1047 for key in ("encrypted", "encrypted_for", "signed"):
3957
b8ab6da58ac8 plugin XEP-0277: `signed` flag can now be used in `extra` to use sign the blog post:
Goffi <goffi@goffi.org>
parents: 3949
diff changeset
1048 value = data.get(key)
b8ab6da58ac8 plugin XEP-0277: `signed` flag can now be used in `extra` to use sign the blog post:
Goffi <goffi@goffi.org>
parents: 3949
diff changeset
1049 if value is not None:
b8ab6da58ac8 plugin XEP-0277: `signed` flag can now be used in `extra` to use sign the blog post:
Goffi <goffi@goffi.org>
parents: 3949
diff changeset
1050 extra[key] = value
3934
e345d93fb6e5 plugin OXPS: OpenPGP for XMPP Pubsub implementation:
Goffi <goffi@goffi.org>
parents: 3931
diff changeset
1051
e345d93fb6e5 plugin OXPS: OpenPGP for XMPP Pubsub implementation:
Goffi <goffi@goffi.org>
parents: 3931
diff changeset
1052 await self._p.publish(client, service, node, [item], extra=extra)
3848
e9c380ef41c8 plugin XEP-0277: return ID of published item in `send` and bridge's `mbSend`
Goffi <goffi@goffi.org>
parents: 3840
diff changeset
1053 return item_id
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1054
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1055 def _mb_repeat(
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1056 self,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1057 service_s: str,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1058 node: str,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1059 item: str,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1060 extra_s: str,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1061 profile_key: str
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1062 ) -> defer.Deferred:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1063 service = jid.JID(service_s) if service_s else None
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1064 node = node if node else NS_MICROBLOG
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1065 client = self.host.get_client(profile_key)
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1066 extra = data_format.deserialise(extra_s)
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1067 d = defer.ensureDeferred(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1068 self.repeat(client, item, service, node, extra)
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1069 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1070 # [repeat] can return None, and we always need a str
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1071 d.addCallback(lambda ret: ret or "")
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1072 return d
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1073
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1074 async def repeat(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1075 self,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1076 client: SatXMPPEntity,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1077 item: str,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1078 service: Optional[jid.JID] = None,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1079 node: str = NS_MICROBLOG,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1080 extra: Optional[dict] = None,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1081 ) -> Optional[str]:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1082 """Re-publish a post from somewhere else
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1083
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1084 This is a feature often name "share" or "boost", it is generally used to make a
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1085 publication more visible by sharing it with our own audience
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1086 """
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1087 if service is None:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1088 service = client.jid.userhostJID()
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1089
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1090 # we first get the post to repeat
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1091 items, __ = await self._p.get_items(
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1092 client,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1093 service,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1094 node,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1095 item_ids = [item]
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1096 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1097 if not items:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1098 raise exceptions.NotFound(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1099 f"no item found at node {node!r} on {service} with ID {item!r}"
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1100 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1101 item_elt = items[0]
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1102 try:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1103 entry_elt = next(item_elt.elements(NS_ATOM, "entry"))
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1104 except StopIteration:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1105 raise exceptions.DataError(
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1106 "post to repeat is not a XEP-0277 blog item"
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1107 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1108
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1109 # we want to be sure that we have an author element
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1110 try:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1111 author_elt = next(entry_elt.elements(NS_ATOM, "author"))
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1112 except StopIteration:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1113 author_elt = entry_elt.addElement("author")
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1114
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1115 try:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1116 next(author_elt.elements(NS_ATOM, "name"))
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1117 except StopIteration:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1118 author_elt.addElement("name", content=service.user)
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1119
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1120 try:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1121 next(author_elt.elements(NS_ATOM, "uri"))
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1122 except StopIteration:
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1123 entry_elt.addElement(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1124 "uri", content=xmpp_uri.build_xmpp_uri(None, path=service.full())
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1125 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1126
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1127 # we add the link indicating that it's a repeated post
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1128 link_elt = entry_elt.addElement("link")
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1129 link_elt["rel"] = "via"
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1130 link_elt["href"] = xmpp_uri.build_xmpp_uri(
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1131 "pubsub", path=service.full(), node=node, item=item
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1132 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1133
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1134 return await self._p.send_item(
3840
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1135 client,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1136 client.jid.userhostJID(),
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1137 NS_MICROBLOG,
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1138 entry_elt
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1139 )
5b192a5eb72d plugin XEP-0277: post repeating implementation:
Goffi <goffi@goffi.org>
parents: 3763
diff changeset
1140
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1141 def _mb_preview(self, service, node, data, profile_key):
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1142 service = jid.JID(service) if service else None
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1143 node = node if node else NS_MICROBLOG
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1144 client = self.host.get_client(profile_key)
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1145 data = data_format.deserialise(data)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1146 d = defer.ensureDeferred(self.preview(client, data, service, node))
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1147 d.addCallback(data_format.serialise)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1148 return d
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1149
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1150 async def preview(
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1151 self,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1152 client: SatXMPPEntity,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1153 data: dict,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1154 service: Optional[jid.JID] = None,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1155 node: Optional[str] = NS_MICROBLOG
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1156 ) -> dict:
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1157 """Preview microblog data without publishing them
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1158
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1159 params are the same as for [send]
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1160 @return: microblog data as would be retrieved from published item
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1161 """
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1162 if node is None:
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1163 node = NS_MICROBLOG
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1164
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1165 item_id = data.get("id", "")
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1166
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1167 # we have to serialise then deserialise to be sure that all triggers are called
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
1168 item_elt = await self.mb_data_2_entry_elt(client, data, item_id, service, node)
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1169 item_elt.uri = pubsub.NS_PUBSUB
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
1170 return await self.item_2_mb_data(client, item_elt, service, node)
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
1171
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
1172
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1173 ## retract ##
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1174
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1175 def _mb_retract(self, service_jid_s, nodeIdentifier, itemIdentifier, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1176 """Call self._p._retract_item, but use default node if node is empty"""
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1177 return self._p._retract_item(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1178 service_jid_s,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1179 nodeIdentifier or NS_MICROBLOG,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1180 itemIdentifier,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1181 True,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1182 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1183 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1184
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1185 ## get ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1186
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1187 def _mb_get_serialise(self, data):
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1188 items, metadata = data
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
1189 metadata['items'] = items
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
1190 return data_format.serialise(metadata)
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1191
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1192 def _mb_get(self, service="", node="", max_items=10, item_ids=None, extra="",
2760
3480d4fdf83a plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
1193 profile_key=C.PROF_KEY_NONE):
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1194 """
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1195 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
1513
955221487a3e plugin XEP-0277, quick_frontend: rename mbGetLast to mbGet and add it the parameter "item_ids"
souliane <souliane@mailoo.org>
parents: 1511
diff changeset
1196 @param item_ids (list[unicode]): list of item IDs
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1197 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1198 client = self.host.get_client(profile_key)
1865
fc6eeacf31bc plugin XEP-0277: service can be None in mbGet, resulting in a request on default pubsub service of profile (i.e. profile's PEP)
Goffi <goffi@goffi.org>
parents: 1854
diff changeset
1199 service = jid.JID(service) if service else None
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1200 max_items = None if max_items == C.NO_LIMIT else max_items
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1201 extra = self._p.parse_extra(data_format.deserialise(extra))
3584
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1202 d = defer.ensureDeferred(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1203 self.mb_get(client, service, node or None, max_items, item_ids,
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1204 extra.rsm_request, extra.extra)
3584
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1205 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1206 d.addCallback(self._mb_get_serialise)
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1207 return d
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
1208
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1209 async def mb_get(
3949
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1210 self,
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1211 client: SatXMPPEntity,
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1212 service: Optional[jid.JID] = None,
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1213 node: Optional[str] = None,
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1214 max_items: Optional[int] = 10,
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1215 item_ids: Optional[List[str]] = None,
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1216 rsm_request: Optional[rsm.RSMRequest] = None,
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1217 extra: Optional[Dict[str, Any]] = None
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1218 ) -> Tuple[List[Dict[str, Any]], Dict[str, Any]]:
1516
afa0894dcc71 plugin XEP-0277, misc_groupblog: move getGroupBlogsAtom to XEP-0277, rename to mbGetAtom
souliane <souliane@mailoo.org>
parents: 1513
diff changeset
1219 """Get some microblogs
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
1220
1865
fc6eeacf31bc plugin XEP-0277: service can be None in mbGet, resulting in a request on default pubsub service of profile (i.e. profile's PEP)
Goffi <goffi@goffi.org>
parents: 1854
diff changeset
1221 @param service(jid.JID, None): jid of the publisher
fc6eeacf31bc plugin XEP-0277: service can be None in mbGet, resulting in a request on default pubsub service of profile (i.e. profile's PEP)
Goffi <goffi@goffi.org>
parents: 1854
diff changeset
1222 None to get profile's PEP
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1223 @param node(unicode, None): node to get (or microblog node if None)
2286
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
1224 @param max_items(int): maximum number of item to get, None for no limit
3591
d830c11eeef3 plugin XEP-0277: ignore `max_items` if `rsm_request` is set
Goffi <goffi@goffi.org>
parents: 3586
diff changeset
1225 ignored if rsm_request is set
1513
955221487a3e plugin XEP-0277, quick_frontend: rename mbGetLast to mbGet and add it the parameter "item_ids"
souliane <souliane@mailoo.org>
parents: 1511
diff changeset
1226 @param item_ids (list[unicode]): list of item IDs
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1227 @param rsm_request (rsm.RSMRequest): RSM request data
1516
afa0894dcc71 plugin XEP-0277, misc_groupblog: move getGroupBlogsAtom to XEP-0277, rename to mbGetAtom
souliane <souliane@mailoo.org>
parents: 1513
diff changeset
1228 @param extra (dict): extra data
1268
bb30bf3ae932 plugins XEP-0060, XEP-0277, groupblog: make use of RSM (XEP-0059)
souliane <souliane@mailoo.org>
parents: 1233
diff changeset
1229
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
1230 @return: a deferred couple with the list of items and metadatas.
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1231 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1232 if node is None:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1233 node = NS_MICROBLOG
3591
d830c11eeef3 plugin XEP-0277: ignore `max_items` if `rsm_request` is set
Goffi <goffi@goffi.org>
parents: 3586
diff changeset
1234 if rsm_request:
d830c11eeef3 plugin XEP-0277: ignore `max_items` if `rsm_request` is set
Goffi <goffi@goffi.org>
parents: 3586
diff changeset
1235 max_items = None
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1236 items_data = await self._p.get_items(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1237 client,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1238 service,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1239 node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1240 max_items=max_items,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1241 item_ids=item_ids,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1242 rsm_request=rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1243 extra=extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1244 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1245 mb_data_list, metadata = await self._p.trans_items_data_d(
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
1246 items_data, partial(self.item_2_mb_data, client, service=service, node=node))
3949
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1247 encrypted = metadata.pop("encrypted", None)
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1248 if encrypted is not None:
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1249 for mb_data in mb_data_list:
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1250 try:
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1251 mb_data["encrypted"] = encrypted[mb_data["id"]]
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1252 except KeyError:
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1253 pass
f7ff893b536e plugin XEP-0277: add `encryption` flag to MB data:
Goffi <goffi@goffi.org>
parents: 3934
diff changeset
1254 return (mb_data_list, metadata)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1255
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1256 def _mb_rename(self, service, node, item_id, new_id, profile_key):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1257 return defer.ensureDeferred(self.mb_rename(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1258 self.host.get_client(profile_key),
3519
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1259 jid.JID(service) if service else None,
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1260 node or None,
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1261 item_id,
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1262 new_id
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1263 ))
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1264
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1265 async def mb_rename(
3519
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1266 self,
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1267 client: SatXMPPEntity,
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1268 service: Optional[jid.JID],
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1269 node: Optional[str],
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1270 item_id: str,
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1271 new_id: str
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1272 ) -> None:
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1273 if not node:
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1274 node = NS_MICROBLOG
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1275 await self._p.rename_item(client, service, node, item_id, new_id)
3519
02eec2a5b5f9 plugin XEP-0060, XEP-0277: new rename methods (`psItemRename`, `mbRename`):
Goffi <goffi@goffi.org>
parents: 3513
diff changeset
1276
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1277 def parse_comment_url(self, node_url):
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
1278 """Parse a XMPP URI
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
1279
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
1280 Determine the fields comments_service and comments_node of a microblog data
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1281 from the href attribute of an entry's link element. For example this input:
2160
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents: 2148
diff changeset
1282 xmpp:sat-pubsub.example.net?;node=urn%3Axmpp%3Acomments%3A_af43b363-3259-4b2a-ba4c-1bc33aa87634__urn%3Axmpp%3Agroupblog%3Asomebody%40example.net
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents: 2148
diff changeset
1283 will return(JID(u'sat-pubsub.example.net'), 'urn:xmpp:comments:_af43b363-3259-4b2a-ba4c-1bc33aa87634__urn:xmpp:groupblog:somebody@example.net')
e67e8cd24141 core (tools/common): data objects first draft:
Goffi <goffi@goffi.org>
parents: 2148
diff changeset
1284 @return (tuple[jid.JID, unicode]): service and node
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1285 """
3643
30196b9a2b4c plugin XEP-0277: use `common.uri` to parse comment URIs
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1286 try:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1287 parsed_url = xmpp_uri.parse_xmpp_uri(node_url)
3643
30196b9a2b4c plugin XEP-0277: use `common.uri` to parse comment URIs
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1288 service = jid.JID(parsed_url["path"])
30196b9a2b4c plugin XEP-0277: use `common.uri` to parse comment URIs
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1289 node = parsed_url["node"]
30196b9a2b4c plugin XEP-0277: use `common.uri` to parse comment URIs
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1290 except Exception as e:
30196b9a2b4c plugin XEP-0277: use `common.uri` to parse comment URIs
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1291 raise exceptions.DataError(f"Invalid comments link: {e}")
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1292
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1293 return (service, node)
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1294
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1295 ## configure ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
1296
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1297 def mb_access_set(self, access="presence", profile_key=C.PROF_KEY_NONE):
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1298 """Create a microblog node on PEP with given access
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
1299
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
1300 If the node already exists, it change options
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1301 @param access: Node access model, according to xep-0060 #4.5
2218
6a2fa651d7fa plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
1302 @param profile_key: profile key
6a2fa651d7fa plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
1303 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1304 #  FIXME: check if this mehtod is need, deprecate it if not
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1305 client = self.host.get_client(profile_key)
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1306
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1307 _options = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1308 self._p.OPT_ACCESS_MODEL: access,
4018
86efd854dee1 plugin XEP-0277: ensure that `max-items` is set to `max` when creating a node
Goffi <goffi@goffi.org>
parents: 4011
diff changeset
1309 self._p.OPT_MAX_ITEMS: "max",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1310 self._p.OPT_PERSIST_ITEMS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1311 self._p.OPT_DELIVER_PAYLOADS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1312 self._p.OPT_SEND_ITEM_SUBSCRIBE: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1313 }
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1314
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1315 def cb(result):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1316 # Node is created with right permission
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1317 log.debug(_("Microblog node has now access %s") % access)
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1318
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1319 def fatal_err(s_error):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1320 # Something went wrong
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1321 log.error(_("Can't set microblog access"))
468
c97640c90a94 D-Bus Bridge: use inspection to name attribute + fix asynchronous calls for dynamically added method, it now use deferred return value instead of callback/errback attributes
Goffi <goffi@goffi.org>
parents: 465
diff changeset
1322 raise NodeAccessChangeException()
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1323
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1324 def err_cb(s_error):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1325 # If the node already exists, the condition is "conflict",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1326 # else we have an unmanaged error
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1327 if s_error.value.condition == "conflict":
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1328 # d = self.host.plugins["XEP-0060"].deleteNode(client, client.jid.userhostJID(), NS_MICROBLOG)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1329 # d.addCallback(lambda x: create_node().addCallback(cb).addErrback(fatal_err))
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
1330 change_node_options().addCallback(cb).addErrback(fatal_err)
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1331 else:
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1332 fatal_err(s_error)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1333
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1334 def create_node():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1335 return self._p.createNode(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1336 client, client.jid.userhostJID(), NS_MICROBLOG, _options
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1337 )
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1338
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
1339 def change_node_options():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1340 return self._p.setOptions(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1341 client.jid.userhostJID(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1342 NS_MICROBLOG,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1343 client.jid.userhostJID(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1344 _options,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1345 profile_key=profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1346 )
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1347
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1348 create_node().addCallback(cb).addErrback(err_cb)
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1349
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1350 ## methods to manage several stanzas/jids at once ##
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1351
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1352 # common
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1353
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1354 def _get_client_and_node_data(self, publishers_type, publishers, profile_key):
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1355 """Helper method to construct node_data from publishers_type/publishers
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1356
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1357 @param publishers_type: type of the list of publishers, one of:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1358 C.ALL: get all jids from roster, publishers is not used
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1359 C.GROUP: get jids from groups
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1360 C.JID: use publishers directly as list of jids
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1361 @param publishers: list of publishers, according to "publishers_type" (None,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1362 list of groups or list of jids)
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1363 @param profile_key: %(doc_profile_key)s
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1364 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1365 client = self.host.get_client(profile_key)
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1366 if publishers_type == C.JID:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1367 jids_set = set(publishers)
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1368 else:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1369 jids_set = client.roster.get_jids_set(publishers_type, publishers)
1728
0eaa1a409dfb plugin XEP-0277, EXTRA-PEP: get massive blogs from all the roster also retrieve items from a special JIDs list defined in EXTRA-PEP
souliane <souliane@mailoo.org>
parents: 1712
diff changeset
1370 if publishers_type == C.ALL:
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1371 try:
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1372 # display messages from salut-a-toi@libervia.org or other PEP services
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1373 services = self.host.plugins["EXTRA-PEP"].get_followed_entities(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1374 profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1375 )
1728
0eaa1a409dfb plugin XEP-0277, EXTRA-PEP: get massive blogs from all the roster also retrieve items from a special JIDs list defined in EXTRA-PEP
souliane <souliane@mailoo.org>
parents: 1712
diff changeset
1376 except KeyError:
1741
cc31dd72526d plugin misc_extra_pep: use a user parameter (jids_list) instead of a general configuration value
souliane <souliane@mailoo.org>
parents: 1734
diff changeset
1377 pass # plugin is not loaded
1728
0eaa1a409dfb plugin XEP-0277, EXTRA-PEP: get massive blogs from all the roster also retrieve items from a special JIDs list defined in EXTRA-PEP
souliane <souliane@mailoo.org>
parents: 1712
diff changeset
1378 else:
1741
cc31dd72526d plugin misc_extra_pep: use a user parameter (jids_list) instead of a general configuration value
souliane <souliane@mailoo.org>
parents: 1734
diff changeset
1379 if services:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1380 log.debug(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1381 "Extra PEP followed entities: %s"
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1382 % ", ".join([str(service) for service in services])
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1383 )
1741
cc31dd72526d plugin misc_extra_pep: use a user parameter (jids_list) instead of a general configuration value
souliane <souliane@mailoo.org>
parents: 1734
diff changeset
1384 jids_set.update(services)
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1385
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1386 node_data = []
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1387 for jid_ in jids_set:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1388 node_data.append((jid_, NS_MICROBLOG))
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1389 return client, node_data
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1390
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1391 def _check_publishers(self, publishers_type, publishers):
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1392 """Helper method to deserialise publishers coming from bridge
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1393
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1394 publishers_type(unicode): type of the list of publishers, one of:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1395 publishers: list of publishers according to type
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1396 @return: deserialised (publishers_type, publishers) tuple
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1397 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1398 if publishers_type == C.ALL:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1399 if publishers:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1400 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1401 ValueError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1402 "Can't use publishers with {} type".format(publishers_type)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1403 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1404 )
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1405 else:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1406 publishers = None
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1407 elif publishers_type == C.JID:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1408 publishers[:] = [jid.JID(publisher) for publisher in publishers]
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1409 return publishers_type, publishers
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1410
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1411 # subscribe #
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1412
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1413 def _mb_subscribe_to_many(self, publishers_type, publishers, profile_key):
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1414 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1415
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1416 @return (str): session id: Use pubsub.getSubscribeRTResult to get the results
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1417 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1418 publishers_type, publishers = self._check_publishers(publishers_type, publishers)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1419 return self.mb_subscribe_to_many(publishers_type, publishers, profile_key)
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1420
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1421 def mb_subscribe_to_many(self, publishers_type, publishers, profile_key):
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1422 """Subscribe microblogs for a list of groups or jids
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1423
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1424 @param publishers_type: type of the list of publishers, one of:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1425 C.ALL: get all jids from roster, publishers is not used
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1426 C.GROUP: get jids from groups
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1427 C.JID: use publishers directly as list of jids
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1428 @param publishers: list of publishers, according to "publishers_type" (None, list
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1429 of groups or list of jids)
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1430 @param profile: %(doc_profile)s
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1431 @return (str): session id
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1432 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1433 client, node_data = self._get_client_and_node_data(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1434 publishers_type, publishers, profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1435 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1436 return self._p.subscribe_to_many(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1437 node_data, client.jid.userhostJID(), profile_key=profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1438 )
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1439
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1440 # get #
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1441
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1442 def _mb_get_from_many_rt_result(self, session_id, profile_key=C.PROF_KEY_DEFAULT):
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1443 """Get real-time results for mb_get_from_many session
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1444
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1445 @param session_id: id of the real-time deferred session
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1446 @param return (tuple): (remaining, results) where:
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1447 - remaining is the number of still expected results
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1448 - results is a list of tuple with
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1449 - service (unicode): pubsub service
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1450 - node (unicode): pubsub node
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1451 - failure (unicode): empty string in case of success, error message else
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1452 - items_data(list): data as returned by [mb_get]
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1453 - items_metadata(dict): metadata as returned by [mb_get]
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1454 @param profile_key: %(doc_profile_key)s
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1455 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1456
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1457 client = self.host.get_client(profile_key)
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1458
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1459 def onSuccess(items_data):
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1460 """convert items elements to list of microblog data in items_data"""
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1461 d = self._p.trans_items_data_d(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1462 items_data,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1463 # FIXME: service and node should be used here
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
1464 partial(self.item_2_mb_data, client),
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1465 serialise=True
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1466 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1467 d.addCallback(lambda serialised: ("", serialised))
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1468 return d
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1469
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1470 d = self._p.get_rt_results(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1471 session_id,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1472 on_success=onSuccess,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1473 on_error=lambda failure: (str(failure.value), ([], {})),
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1474 profile=client.profile,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1475 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1476 d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1477 lambda ret: (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1478 ret[0],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1479 [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1480 (service.full(), node, failure, items, metadata)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1481 for (service, node), (success, (failure, (items, metadata))) in ret[
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1482 1
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1483 ].items()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1484 ],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1485 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1486 )
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1487 return d
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1488
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1489 def _mb_get_from_many(self, publishers_type, publishers, max_items=10, extra_dict=None,
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1490 profile_key=C.PROF_KEY_NONE):
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1491 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1492 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1493 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1494 max_items = None if max_items == C.NO_LIMIT else max_items
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1495 publishers_type, publishers = self._check_publishers(publishers_type, publishers)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1496 extra = self._p.parse_extra(extra_dict)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1497 return self.mb_get_from_many(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1498 publishers_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1499 publishers,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1500 max_items,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1501 extra.rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1502 extra.extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1503 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1504 )
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1505
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1506 def mb_get_from_many(self, publishers_type, publishers, max_items=None, rsm_request=None,
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1507 extra=None, profile_key=C.PROF_KEY_NONE):
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1508 """Get the published microblogs for a list of groups or jids
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1509
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1510 @param publishers_type (str): type of the list of publishers (one of "GROUP" or
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1511 "JID" or "ALL")
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1512 @param publishers (list): list of publishers, according to publishers_type (list
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1513 of groups or list of jids)
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1514 @param max_items (int): optional limit on the number of retrieved items.
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1515 @param rsm_request (rsm.RSMRequest): RSM request data, common to all publishers
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1516 @param extra (dict): Extra data
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1517 @param profile_key: profile key
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1518 @return (str): RT Deferred session id
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1519 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1520 # XXX: extra is unused here so far
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1521 client, node_data = self._get_client_and_node_data(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1522 publishers_type, publishers, profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1523 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1524 return self._p.get_from_many(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1525 node_data, max_items, rsm_request, profile_key=profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1526 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1527
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1528 # comments #
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1529
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1530 def _mb_get_from_many_with_comments_rt_result_serialise(self, data):
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1531 """Serialisation of result
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1532
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1533 This is probably the longest method name of whole SàT ecosystem ^^
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1534 @param data(dict): data as received by rt_sessions
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1535 @return (tuple): see [_mb_get_from_many_with_comments_rt_result]
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1536 """
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1537 ret = []
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1538 data_iter = iter(data[1].items())
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1539 for (service, node), (success, (failure_, (items_data, metadata))) in data_iter:
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1540 items = []
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1541 for item, item_metadata in items_data:
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1542 item = data_format.serialise(item)
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1543 items.append((item, item_metadata))
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1544 ret.append((
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1545 service.full(),
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1546 node,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1547 failure_,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1548 items,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1549 metadata))
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1550
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1551 return data[0], ret
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1552
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1553 def _mb_get_from_many_with_comments_rt_result(self, session_id,
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1554 profile_key=C.PROF_KEY_DEFAULT):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1555 """Get real-time results for [mb_get_from_many_with_comments] session
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1556
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1557 @param session_id: id of the real-time deferred session
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1558 @param return (tuple): (remaining, results) where:
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1559 - remaining is the number of still expected results
1511
83f71763e1a7 plugin XEP-0277: clarify a docstring for one complex method argument
souliane <souliane@mailoo.org>
parents: 1459
diff changeset
1560 - results is a list of 5-tuple with
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1561 - service (unicode): pubsub service
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1562 - node (unicode): pubsub node
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1563 - failure (unicode): empty string in case of success, error message else
1511
83f71763e1a7 plugin XEP-0277: clarify a docstring for one complex method argument
souliane <souliane@mailoo.org>
parents: 1459
diff changeset
1564 - items(list[tuple(dict, list)]): list of 2-tuple with
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1565 - item(dict): item microblog data
1511
83f71763e1a7 plugin XEP-0277: clarify a docstring for one complex method argument
souliane <souliane@mailoo.org>
parents: 1459
diff changeset
1566 - comments_list(list[tuple]): list of 5-tuple with
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1567 - service (unicode): pubsub service where the comments node is
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1568 - node (unicode): comments node
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1569 - failure (unicode): empty in case of success, else error message
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1570 - comments(list[dict]): list of microblog data
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1571 - comments_metadata(dict): metadata of the comment node
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1572 - metadata(dict): original node metadata
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1573 @param profile_key: %(doc_profile_key)s
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1574 """
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1575 profile = self.host.get_client(profile_key).profile
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1576 d = self.rt_sessions.get_results(session_id, profile=profile)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1577 d.addCallback(self._mb_get_from_many_with_comments_rt_result_serialise)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1578 return d
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1579
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1580 def _mb_get_from_many_with_comments(self, publishers_type, publishers, max_items=10,
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1581 max_comments=C.NO_LIMIT, extra_dict=None,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1582 extra_comments_dict=None, profile_key=C.PROF_KEY_NONE):
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1583 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1584 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1585 @param max_comments(int): maximum number of comments to get, C.NO_LIMIT for no
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1586 limit
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1587 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1588 max_items = None if max_items == C.NO_LIMIT else max_items
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1589 max_comments = None if max_comments == C.NO_LIMIT else max_comments
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1590 publishers_type, publishers = self._check_publishers(publishers_type, publishers)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1591 extra = self._p.parse_extra(extra_dict)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1592 extra_comments = self._p.parse_extra(extra_comments_dict)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1593 return self.mb_get_from_many_with_comments(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1594 publishers_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1595 publishers,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1596 max_items,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1597 max_comments or None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1598 extra.rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1599 extra.extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1600 extra_comments.rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1601 extra_comments.extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1602 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1603 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1604
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1605 def mb_get_from_many_with_comments(self, publishers_type, publishers, max_items=None,
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1606 max_comments=None, rsm_request=None, extra=None,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1607 rsm_comments=None, extra_comments=None,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1608 profile_key=C.PROF_KEY_NONE):
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1609 """Helper method to get the microblogs and their comments in one shot
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1610
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1611 @param publishers_type (str): type of the list of publishers (one of "GROUP" or
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1612 "JID" or "ALL")
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1613 @param publishers (list): list of publishers, according to publishers_type (list
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1614 of groups or list of jids)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1615 @param max_items (int): optional limit on the number of retrieved items.
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1616 @param max_comments (int): maximum number of comments to retrieve
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1617 @param rsm_request (rsm.RSMRequest): RSM request for initial items only
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1618 @param extra (dict): extra configuration for initial items only
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1619 @param rsm_comments (rsm.RSMRequest): RSM request for comments only
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1620 @param extra_comments (dict): extra configuration for comments only
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1621 @param profile_key: profile key
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1622 @return (str): RT Deferred session id
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1623 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1624 # XXX: this method seems complicated because it do a couple of treatments
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1625 # to serialise and associate the data, but it make life in frontends side
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1626 # a lot easier
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1627
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1628 client, node_data = self._get_client_and_node_data(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1629 publishers_type, publishers, profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1630 )
2360
72cbb6478f97 plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents: 2341
diff changeset
1631
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1632 def get_comments(items_data):
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1633 """Retrieve comments and add them to the items_data
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1634
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1635 @param items_data: serialised items data
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1636 @return (defer.Deferred): list of items where each item is associated
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1637 with a list of comments data (service, node, list of items, metadata)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1638 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1639 items, metadata = items_data
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1640 items_dlist = [] # deferred list for items
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1641 for item in items:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1642 dlist = [] # deferred list for comments
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1643 for key, value in item.items():
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1644 # we look for comments
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1645 if key.startswith("comments") and key.endswith("_service"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1646 prefix = key[: key.find("_")]
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1647 service_s = value
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1648 service = jid.JID(service_s)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1649 node = item["{}{}".format(prefix, "_node")]
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1650 # time to get the comments
3584
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1651 d = defer.ensureDeferred(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1652 self._p.get_items(
3584
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1653 client,
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1654 service,
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1655 node,
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1656 max_comments,
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1657 rsm_request=rsm_comments,
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1658 extra=extra_comments,
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1659 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1660 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1661 # then serialise
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1662 d.addCallback(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1663 lambda items_data: self._p.trans_items_data_d(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1664 items_data,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1665 partial(
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
1666 self.item_2_mb_data, client, service=service, node=node
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1667 ),
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1668 serialise=True
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1669 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1670 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1671 # with failure handling
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1672 d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1673 lambda serialised_items_data: ("",) + serialised_items_data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1674 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1675 d.addErrback(lambda failure: (str(failure.value), [], {}))
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1676 # and associate with service/node (needed if there are several
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1677 # comments nodes)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1678 d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1679 lambda serialised, service_s=service_s, node=node: (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1680 service_s,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1681 node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1682 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1683 + serialised
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1684 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1685 dlist.append(d)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1686 # we get the comments
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1687 comments_d = defer.gatherResults(dlist)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1688 # and add them to the item data
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1689 comments_d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1690 lambda comments_data, item=item: (item, comments_data)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1691 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1692 items_dlist.append(comments_d)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1693 # we gather the items + comments in a list
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1694 items_d = defer.gatherResults(items_dlist)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1695 # and add the metadata
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1696 items_d.addCallback(lambda items_completed: (items_completed, metadata))
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1697 return items_d
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1698
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1699 deferreds = {}
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1700 for service, node in node_data:
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1701 d = deferreds[(service, node)] = defer.ensureDeferred(self._p.get_items(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1702 client, service, node, max_items, rsm_request=rsm_request, extra=extra
3584
edc79cefe968 plugin XEP-0060: `getItem(s)`, `publish` and `(un)subscribe` are now coroutines
Goffi <goffi@goffi.org>
parents: 3550
diff changeset
1703 ))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1704 d.addCallback(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1705 lambda items_data: self._p.trans_items_data_d(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1706 items_data,
4023
78b5f356900c component AP gateway: handle attachments
Goffi <goffi@goffi.org>
parents: 4020
diff changeset
1707 partial(self.item_2_mb_data, client, service=service, node=node),
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1708 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1709 )
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1710 d.addCallback(get_comments)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1711 d.addCallback(lambda items_comments_data: ("", items_comments_data))
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1712 d.addErrback(lambda failure: (str(failure.value), ([], {})))
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1713
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 4023
diff changeset
1714 return self.rt_sessions.new_session(deferreds, client.profile)
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1715
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1716
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1717 @implementer(iwokkel.IDisco)
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1718 class XEP_0277_handler(XMPPHandler):
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1719
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1720 def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1721 return [disco.DiscoFeature(NS_MICROBLOG)]
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1722
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1723 def getDiscoItems(self, requestor, target, nodeIdentifier=""):
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1724 return []