Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0277.py @ 4100:810921c33a47
tools (common/template): add filter to get media types:
Add 2 filters to get main type and subtype of media type. Jinja2 and Nunjucks don't handle
slices in the same way (Python way for Jinja2, JS way for Nunjucks), making it difficult
to retrieve main type of a media from media type. Thoses filters work in both cases.
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 22 Jun 2023 15:49:06 +0200 |
parents | 4b842c1fb686 |
children | 0e48181d50ab |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 325 "XHML content not wrapped in a <div/> element, this is not " |
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 | 335 key = check_conflict("{}_xhtml".format(elem.name)) |
1791 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 429 microblog_data["content"] = microblog_data["title"] |
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 | 432 microblog_data["content_xhtml"] = microblog_data["title_xhtml"] |
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 | 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 | 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 | 441 microblog_data["updated"] = calendar.timegm( |
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 | 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 | 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 | 449 microblog_data["published"] = calendar.timegm( |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 561 microblog_data["author_jid"] = ( |
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 | 573 log.debug("No publisher attribute, we can't verify author jid") |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 892 "comments are not allowed but there is already a comments node, " |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 [] |