annotate sat/plugins/plugin_xep_0277.py @ 3513:753d151da886

XEP-0277: new preview/mbPreview method: This method does more or less the same thing as sending, but without actually sending the item, and parse the generated element just after. This way, the triggers are run, and a preview of the item can be made for the resulting microblog data.
author Goffi <goffi@goffi.org>
date Thu, 29 Apr 2021 15:49:59 +0200
parents 6132d363f0e9
children 02eec2a5b5f9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
3 # SAT plugin for microblogging over XMPP (xep-0277)
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3341
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
5
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
6 # This program is free software: you can redistribute it and/or modify
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
9 # (at your option) any later version.
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
10
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
11 # This program is distributed in the hope that it will be useful,
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
14 # GNU Affero General Public License for more details.
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
15
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
18
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
19 import time
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
20 import dateutil
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
21 import calendar
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
22 import urllib.parse
3502
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
23 from secrets import token_urlsafe
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
24 from typing import Optional
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
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
37 from wokkel import disco, iwokkel
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
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
40 from sat.core.i18n import _
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
41 from sat.core.constants import Const as C
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
42 from sat.core.log import getLogger
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
43 from sat.core import exceptions
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
44 from sat.core.xmpp import SatXMPPEntity
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
45 from sat.tools import xml_tools
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
46 from sat.tools import sat_defer
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
47 from sat.tools import utils
1919
d3354c80bd1f core (tools): moved common to a separate package, and put data method in a data_format module
Goffi <goffi@goffi.org>
parents: 1913
diff changeset
48 from sat.tools.common import data_format
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
49 from sat.tools.common import uri as xmpp_uri
3502
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
50 from sat.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"
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
58 NS_PUBSUB_EVENT = "{}{}".format(pubsub.NS_PUBSUB, "#event")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
59 NS_COMMENT_PREFIX = "{}:comments/".format(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
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",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
66 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
67 C.PI_DEPENDENCIES: ["XEP-0163", "XEP-0060", "TEXT_SYNTAXES"],
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
68 C.PI_RECOMMENDATIONS: ["XEP-0059", "EXTRA-PEP"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
69 C.PI_MAIN: "XEP_0277",
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
70 C.PI_HANDLER: "yes",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
71 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
72 }
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
73
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
74
339
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
75 class NodeAccessChangeException(Exception):
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
76 pass
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
77
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
78
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
79 class XEP_0277(object):
1831
68c0dc13d821 plugin blog import, XEP-0277: progress + redirect:
Goffi <goffi@goffi.org>
parents: 1829
diff changeset
80 namespace = NS_MICROBLOG
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
81
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
82 def __init__(self, host):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
83 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
84 self.host = host
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
85 host.registerNamespace("microblog", NS_MICROBLOG)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
86 self._p = self.host.plugins[
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
87 "XEP-0060"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
88 ] # this facilitate the access to pubsub plugin
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
89 self.rt_sessions = sat_defer.RTDeferredSessions()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
90 self.host.plugins["XEP-0060"].addManagedNode(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
91 NS_MICROBLOG, items_cb=self._itemsReceived
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
92 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
93
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
94 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
95 "mbSend",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
96 ".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
97 in_sign="ssss",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
98 out_sign="",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
99 method=self._mbSend,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
100 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
101 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
102 host.bridge.addMethod(
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
103 "mbPreview",
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
104 ".plugin",
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
105 in_sign="ssss",
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
106 out_sign="s",
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
107 method=self._mbPreview,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
108 async_=True,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
109 )
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
110 host.bridge.addMethod(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
111 "mbRetract",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
112 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
113 in_sign="ssss",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
114 out_sign="",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
115 method=self._mbRetract,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
116 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
117 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
118 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
119 "mbGet",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
120 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
121 in_sign="ssiasa{ss}s",
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
122 out_sign="s",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
123 method=self._mbGet,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
124 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
125 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
126 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
127 "mbSetAccess",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
128 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
129 in_sign="ss",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
130 out_sign="",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
131 method=self.mbSetAccess,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
132 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
133 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
134 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
135 "mbSubscribeToMany",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
136 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
137 in_sign="sass",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
138 out_sign="s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
139 method=self._mbSubscribeToMany,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
140 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
141 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
142 "mbGetFromManyRTResult",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
143 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
144 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
145 out_sign="(ua(sssasa{ss}))",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
146 method=self._mbGetFromManyRTResult,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
147 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
148 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
149 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
150 "mbGetFromMany",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
151 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
152 in_sign="sasia{ss}s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
153 out_sign="s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
154 method=self._mbGetFromMany,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
155 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
156 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
157 "mbGetFromManyWithCommentsRTResult",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
158 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
159 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
160 out_sign="(ua(sssa(sa(sssasa{ss}))a{ss}))",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
161 method=self._mbGetFromManyWithCommentsRTResult,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
162 async_=True,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
163 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
164 host.bridge.addMethod(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
165 "mbGetFromManyWithComments",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
166 ".plugin",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
167 in_sign="sasiia{ss}a{ss}s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
168 out_sign="s",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
169 method=self._mbGetFromManyWithComments,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
170 )
302
9f3a6cf91668 plugin xep-0277: added getLastMicroblogs method
Goffi <goffi@goffi.org>
parents: 297
diff changeset
171
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
172 def getHandler(self, client):
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
173 return XEP_0277_handler()
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
174
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
175 def _checkFeaturesCb(self, available):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
176 return {"available": C.BOOL_TRUE}
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
177
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
178 def _checkFeaturesEb(self, fail):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
179 return {"available": C.BOOL_FALSE}
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
180
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
181 def getFeatures(self, profile):
2148
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
182 client = self.host.getClient(profile)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
183 d = self.host.checkFeatures(client, [], identity=("pubsub", "pep"))
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
184 d.addCallbacks(self._checkFeaturesCb, self._checkFeaturesEb)
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
185 return d
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
186
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
187 ## plugin management methods ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
188
2305
972e33507609 plugin XEP-0060: addManagedNode callbacks now use client syntax instead of profile
Goffi <goffi@goffi.org>
parents: 2289
diff changeset
189 def _itemsReceived(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
190 """Callback which manage items notifications (publish + retract)"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
191
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
192 def manageItem(data, event):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
193 self.host.bridge.psEvent(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
194 C.PS_MICROBLOG,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
195 itemsEvent.sender.full(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
196 itemsEvent.nodeIdentifier,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
197 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
198 data_format.serialise(data),
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
199 client.profile,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
200 )
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
201
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
202 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
203 if item.name == C.PS_ITEM:
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
204 # FIXME: service and node should be used here
3341
13b91b7280bc plugin XEP-0277: fixed item2mbdata call
Goffi <goffi@goffi.org>
parents: 3328
diff changeset
205 self.item2mbdata(client, item, None, None).addCallbacks(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
206 manageItem, lambda failure: None, (C.PS_PUBLISH,)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
207 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
208 elif item.name == C.PS_RETRACT:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
209 manageItem({"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
210 else:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
211 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
212
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
213 ## 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
214
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
215 @defer.inlineCallbacks
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
216 def item2mbdata(
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
217 self,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
218 client: SatXMPPEntity,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
219 item_elt: domish.Element,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
220 service: Optional[jid.JID],
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
221 # FIXME: node is Optional until all calls to item2mbdata set properly service
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
222 # 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
223 node: Optional[str]
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
224 ) -> 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
225 """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
226
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
227 @param item_elt: microblog item element
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
228 @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
229 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
230 @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
231 if None, "uri" won't be set
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
232 @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
233 """
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
234 microblog_data = {}
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
235
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
236 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
237 """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
238
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
239 @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
240 @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
241 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
242 @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
243 (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
244 """
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
245 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
246 if not increment:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
247 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
248 exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
249 "key {} is already present for item {}"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
250 ).format(key, item_elt["id"])
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
251 )
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
252 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
253 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
254 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
255 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
256 while new_key in microblog_data:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
257 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
258 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
259 key = new_key
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
260 return key
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
261
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
262 @defer.inlineCallbacks
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
263 def parseElement(elem):
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
264 """Parse title/content elements and fill microblog_data accordingly"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
265 type_ = elem.getAttribute("type")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
266 if type_ == "xhtml":
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
267 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
268 if data_elt is None:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
269 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
270 exceptions.DataError(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
271 "XHML content not wrapped in a <div/> element, this is not "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
272 "standard !"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
273 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
274 )
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
275 if data_elt.uri != C.NS_XHTML:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
276 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
277 exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
278 _("Content of type XHTML must declare its namespace!")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
279 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
280 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
281 key = check_conflict("{}_xhtml".format(elem.name))
1791
1359ad0b37c2 reverted patch 3770d13776e8
Goffi <goffi@goffi.org>
parents: 1779
diff changeset
282 data = data_elt.toXml()
2780
85d3240a400f plugin text syntaxes: changed import name to TEXT_SYNTAX (better with underscore for autocompletion)
Goffi <goffi@goffi.org>
parents: 2771
diff changeset
283 microblog_data[key] = yield self.host.plugins["TEXT_SYNTAXES"].cleanXHTML(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
284 data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
285 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
286 else:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
287 key = check_conflict(elem.name)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
288 microblog_data[key] = str(elem)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
289
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
290 id_ = item_elt.getAttribute("id", "") # there can be no id for transient nodes
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
291 microblog_data["id"] = id_
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
292 if item_elt.uri not in (pubsub.NS_PUBSUB, NS_PUBSUB_EVENT):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
293 msg = "Unsupported namespace {ns} in pubsub item {id_}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
294 ns=item_elt.uri, id_=id_
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
295 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
296 log.warning(msg)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
297 raise failure.Failure(exceptions.DataError(msg))
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
298
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
299 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
300 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
301 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
302 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
303 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
304
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
305 # uri
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
306 # 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
307 if node is not None:
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
308 microblog_data['uri'] = xmpp_uri.buildXMPPUri(
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
309 "pubsub",
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
310 path=service.full() if service is not None else client.jid.userhost(),
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
311 node=node,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
312 item=id_,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
313 )
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
314
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
315 # language
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
316 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
317 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
318 except KeyError:
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
319 pass
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
320
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
321 # 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
322 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
323 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
324 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
325 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
326 .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
327 log.warning(msg)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
328 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
329 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
330 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
331
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
332 # 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
333
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
334 # 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
335 # 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
336 # 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
337 # 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
338 # 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
339 # 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
340 # 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
341 # 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
342 # raise failure.Failure(exceptions.DataError(msg))
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
343 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
344 if not title_elts:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
345 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
346 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
347 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
348 yield parseElement(title_elt)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
349
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
350 # 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
351 # 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
352 # if more than one can be present
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
353 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
354 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
355
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
356 # we check that text content is present
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
357 for key in ("title", "content"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
358 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
359 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
360 "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
361 id_=id_, key=key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
362 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
363 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
364 # ... 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
365 microblog_data[key] = yield self.host.plugins["TEXT_SYNTAXES"].convert(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
366 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
367 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
368 self.host.plugins["TEXT_SYNTAXES"].SYNTAX_TEXT,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
369 False,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
370 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
371
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
372 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
373 # use the atom title data as the microblog body content
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
374 microblog_data["content"] = microblog_data["title"]
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
375 del microblog_data["title"]
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
376 if "title_xhtml" in microblog_data:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
377 microblog_data["content_xhtml"] = microblog_data["title_xhtml"]
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
378 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
379
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
380 # 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
381 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
382 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
383 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
384 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
385 raise failure.Failure(exceptions.DataError(msg))
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
386 microblog_data["updated"] = calendar.timegm(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
387 dateutil.parser.parse(str(updated_elt)).utctimetuple()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
388 )
302
9f3a6cf91668 plugin xep-0277: added getLastMicroblogs method
Goffi <goffi@goffi.org>
parents: 297
diff changeset
389 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
390 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
391 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
392 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
393 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
394 microblog_data["published"] = calendar.timegm(
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
395 dateutil.parser.parse(str(published_elt)).utctimetuple()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
396 )
859
64ec04991d9d plugin XEP-0277: fix pubsub entry parsing using lxml instead of feed.atom
souliane <souliane@mailoo.org>
parents: 858
diff changeset
397
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
398 # links
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
399 comments = microblog_data['comments'] = []
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
400 for link_elt in entry_elt.elements(NS_ATOM, "link"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
401 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
402 link_elt.getAttribute("rel") == "replies"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
403 and link_elt.getAttribute("title") == "comments"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
404 ):
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
405 uri = link_elt["href"]
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
406 comments_data = {
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
407 "uri": uri,
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
408 }
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
409 try:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
410 service, node = self.parseCommentUrl(uri)
3069
73db9db8b9e1 plugin XEP-0277: fixed comments URLs parsing
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
411 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
412 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
413 continue
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
414 else:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
415 comments_data["service"] = service.full()
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
416 comments_data["node"] = node
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
417 comments.append(comments_data)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
418 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
419 rel = link_elt.getAttribute("rel", "")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
420 title = link_elt.getAttribute("title", "")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
421 href = link_elt.getAttribute("href", "")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
422 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
423 "Unmanaged link element: rel={rel} title={title} href={href}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
424 rel=rel, title=title, href=href
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
425 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
426 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
427
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
428 # author
3492
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
429 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
430 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
431 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
432 except StopIteration:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
433 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
434 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
435 # name
770
64dd7c0f4feb plugin groupblog, XEP-0277: store both published and updated timestamps
souliane <souliane@mailoo.org>
parents: 745
diff changeset
436 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
437 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
438 except StopIteration:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
439 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
440 "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
441 )
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
442 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
443 microblog_data["author"] = str(name_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
444 # 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
445 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
446 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
447 except StopIteration:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
448 log.debug(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
449 "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
450 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
451 if publisher:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
452 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
453 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
454 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
455 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
456 uri = uri[5:]
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
457 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
458 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
459 microblog_data["author_jid"] = (
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
460 item_elt.getAttribute("publisher") or ""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
461 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
462
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
463 if not publisher:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
464 log.debug("No publisher attribute, we can't verify author jid")
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
465 microblog_data["author_jid_verified"] = False
1681
c6c835046681 plugin XEP-0277: minor fixes for publisher attribute
Goffi <goffi@goffi.org>
parents: 1680
diff changeset
466 elif jid.JID(publisher).userhostJID() == jid.JID(uri).userhostJID():
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
467 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
468 else:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
469 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
470 "item atom:uri differ from publisher attribute, spoofing "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
471 "attempt ? atom:uri = {} publisher = {}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
472 uri, item_elt.getAttribute("publisher")
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
473 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
474 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
475 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
476 # 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
477 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
478 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
479 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
480 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
481 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
482 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
483
3493
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
484 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
485 if publisher:
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
486 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
487 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
488 else:
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
489 iq_elt = xml_tools.findAncestor(item_elt, "iq", C.NS_CLIENT)
b54bdd4ec507 plugin XEP-0277: be sure to have an `author_jid` set
Goffi <goffi@goffi.org>
parents: 3492
diff changeset
490 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
491 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
492
3492
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
493 # categories
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
494 categories = [
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
495 category_elt.getAttribute("term", "")
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
496 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
497 ]
fa796612adad plugin XEP-0277: better resilience to broken items:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
498 microblog_data["tags"] = categories
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
499
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
500 ## 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
501 # if other plugins have things to add or change
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
502 yield self.host.trigger.point(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
503 "XEP-0277_item2data", item_elt, entry_elt, microblog_data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
504 )
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
505
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
506 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
507
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
508 @defer.inlineCallbacks
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
509 def data2entry(self, client, 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
510 """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
511
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
512 @param 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
513 @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
514 @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
515 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
516 @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
517 Needed to construct Atom id
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
518 @return: deferred which fire domish.Element
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
519 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
520 entry_elt = domish.Element((NS_ATOM, "entry"))
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
521
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
522 ## language ##
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
523 if "language" in data:
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
524 entry_elt[(C.NS_XML, "lang")] = data["language"].strip()
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
525
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
526 ## 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
527 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
528
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
529 for elem_name in ("title", "content"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
530 for type_ in ["", "_rich", "_xhtml"]:
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
531 attr = "{}{}".format(elem_name, type_)
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
532 if attr in data:
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
533 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
534 if type_:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
535 if type_ == "_rich": # convert input from current syntax to XHTML
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
536 xml_content = yield synt.convert(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
537 data[attr], synt.getCurrentSyntax(client.profile), "XHTML"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
538 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
539 if "{}_xhtml".format(elem_name) in data:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
540 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
541 exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
542 _(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
543 "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
544 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
545 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
546 )
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
547 else:
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
548 xml_content = 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
549
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
550 div_elt = xml_tools.ElementParser()(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
551 xml_content, namespace=C.NS_XHTML
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
552 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
553 if (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
554 div_elt.name != "div"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
555 or div_elt.uri != C.NS_XHTML
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
556 or div_elt.attributes
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
557 ):
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
558 # 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
559 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
560 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
561 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
562 elem.addChild(div_elt)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
563 elem["type"] = "xhtml"
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
564 if elem_name not in data:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
565 # 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
566 # 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
567 elem_txt = entry_elt.addElement(elem_name)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
568 text_content = yield 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
569 "TEXT_SYNTAXES"
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
570 ].convert(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
571 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
572 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
573 self.host.plugins["TEXT_SYNTAXES"].SYNTAX_TEXT,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
574 False,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
575 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
576 elem_txt.addContent(text_content)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
577 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
578
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
579 else: # raw text only needs to be escaped to get HTML-safe sequence
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
580 elem.addContent(data[attr])
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
581 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
582
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
583 try:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
584 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
585 except StopIteration:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
586 # 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
587 # so we transform content element to title
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
588 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
589 if not elems:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
590 raise exceptions.DataError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
591 "There must be at least one content or title element"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
592 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
593 for elem in elems:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
594 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
595
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
596 ## author ##
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
597 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
598 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
599 author_name = 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
600 except KeyError:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
601 # 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
602 author_name = client.jid.user
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
603 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
604
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
605 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
606 author_jid_s = 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
607 except KeyError:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
608 author_jid_s = client.jid.userhost()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
609 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
610
1820
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
611 try:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
612 author_jid_s = data["author_email"]
1820
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
613 except KeyError:
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
614 pass
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
615
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
616 ## 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
617 current_time = time.time()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
618 entry_elt.addElement(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
619 "updated", content=utils.xmpp_date(float(data.get("updated", current_time)))
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
620 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
621 entry_elt.addElement(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
622 "published",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
623 content=utils.xmpp_date(float(data.get("published", current_time))),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
624 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
625
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
626 ## categories ##
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
627 for tag in data.get('tags', []):
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
628 category_elt = entry_elt.addElement("category")
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
629 category_elt["term"] = tag
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
630
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
631 ## id ##
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
632 entry_id = data.get(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
633 "id",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
634 xmpp_uri.buildXMPPUri(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
635 "pubsub",
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
636 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
637 node=node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
638 item=item_id,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
639 ),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
640 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
641 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
642
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
643 ## comments ##
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
644 for comments_data in data.get('comments', []):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
645 link_elt = entry_elt.addElement("link")
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
646 # XXX: "uri" is set in self._manageComments if not already existing
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
647 link_elt["href"] = comments_data["uri"]
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
648 link_elt["rel"] = "replies"
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
649 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
650
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
651 ## 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
652 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
653
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
654 ## the trigger ##
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
655 # if other plugins have things to add or change
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
656 yield self.host.trigger.point(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
657 "XEP-0277_data2entry", client, data, entry_elt, item_elt
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
658 )
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
659
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
660 defer.returnValue(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
661
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
662 ## publish/preview ##
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
663
1831
68c0dc13d821 plugin blog import, XEP-0277: progress + redirect:
Goffi <goffi@goffi.org>
parents: 1829
diff changeset
664 def getCommentsNode(self, item_id):
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
665 """Generate comment node
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
666
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
667 @param item_id(unicode): id of the parent item
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
668 @return (unicode): comment node to use
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
669 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
670 return "{}{}".format(NS_COMMENT_PREFIX, item_id)
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
671
1831
68c0dc13d821 plugin blog import, XEP-0277: progress + redirect:
Goffi <goffi@goffi.org>
parents: 1829
diff changeset
672 def getCommentsService(self, client, parent_service=None):
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
673 """Get prefered PubSub service to create comment node
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
674
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
675 @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
676 @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
677 """
2433
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
678 if parent_service is not None:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
679 if parent_service.user:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
680 # we are on a PEP
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
681 if parent_service.host == client.jid.host:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
682 #  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
683 pass
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
684 else:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
685 # other server, let's try to find a non PEP service there
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
686 d = self.host.findServiceEntity(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
687 client, "pubsub", "service", parent_service
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
688 )
2433
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
689 d.addCallback(lambda entity: entity or parent_service)
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
690 else:
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
691 # 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
692 return defer.succeed(parent_service)
014feb75092d plugin XEP-0277: better getCommentsService:
Goffi <goffi@goffi.org>
parents: 2415
diff changeset
693
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
694 return defer.succeed(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
695 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
696 )
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
697
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
698 @defer.inlineCallbacks
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
699 def _manageComments(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
700 """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
701
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
702 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
703 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
704 @param mb_data(dict): microblog mb_data
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
705 @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
706 @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
707 @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
708 @param access(unicode, None): access model
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
709 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
710 """
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
711 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
712 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
713 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
714 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
715 else:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
716 # 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
717 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
718 elif allow_comments == False:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
719 if "comments" in mb_data:
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
720 log.warning(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
721 "comments are not allowed but there is already a comments node, "
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
722 "it may be lost: {uri}".format(
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
723 uri=mb_data["comments"]
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
724 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
725 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
726 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
727 return
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
728
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
729 # 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
730 # 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
731 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
732 # 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
733 comments_data = {}
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
734 mb_data['comments'].append({})
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
735
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
736 if access is None:
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
737 # TODO: cache access models per service/node
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
738 parent_node_config = yield self._p.getConfiguration(client, service, node)
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
739 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
740
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
741 options = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
742 self._p.OPT_ACCESS_MODEL: access,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
743 self._p.OPT_PERSIST_ITEMS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
744 self._p.OPT_MAX_ITEMS: -1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
745 self._p.OPT_DELIVER_PAYLOADS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
746 self._p.OPT_SEND_ITEM_SUBSCRIBE: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
747 # 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
748 self._p.OPT_PUBLISH_MODEL: self._p.ACCESS_OPEN,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
749 }
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
750
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
751 # if other plugins need to change the options
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
752 yield self.host.trigger.point("XEP-0277_comments", client, mb_data, options)
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
753
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
754 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
755 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
756 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
757 try:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
758 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
759 except KeyError:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
760 comments_service = None
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
761
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
762 if uri:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
763 uri_service, uri_node = self.parseCommentUrl(uri)
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
764 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
765 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
766 raise ValueError(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
767 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
768 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
769 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
770 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
771 else:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
772 if not comments_node:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
773 comments_node = self.getCommentsNode(item_id)
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
774 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
775 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
776 comments_service = yield self.getCommentsService(client, service)
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
777 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
778 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
779 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
780
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
781 comments_data['uri'] = xmpp_uri.buildXMPPUri(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
782 "pubsub",
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
783 path=comments_service.full(),
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
784 node=comments_node,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
785 )
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
786
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
787 try:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
788 yield self._p.createNode(client, comments_service, comments_node, options)
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
789 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
790 if e.condition == "conflict":
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
791 log.info(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
792 "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
793 comments_node, comments_service
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
794 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
795 )
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
796 else:
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
797 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
798 else:
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
799 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
800 # for whitelist access we need to copy affiliations from parent item
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
801 comments_affiliations = yield self._p.getNodeAffiliations(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
802 client, service, node
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
803 )
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
804 # …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
805 # 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
806 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
807 if affiliation == "member":
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
808 comments_affiliations[jid_] == "publisher"
2286
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
809
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
810 yield self._p.setNodeAffiliations(
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
811 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
812 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
813
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
814 def friendlyId(self, data):
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
815 """Generate a user friendly id from title or content"""
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
816 id_base = regex.urlFriendlyText(data.get('title') or data.get('content', ''))
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
817 return f"{id_base}-{token_urlsafe(3)}"
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
818
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
819 def _mbSend(self, service, node, data, profile_key):
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
820 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
821 node = node if node else NS_MICROBLOG
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
822 client = self.host.getClient(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
823 data = data_format.deserialise(data)
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
824 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
825
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
826 async def send(
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
827 self,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
828 client: SatXMPPEntity,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
829 data: dict,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
830 service: Optional[jid.JID] = None,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
831 node: Optional[str] = NS_MICROBLOG
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
832 ) -> None:
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
833 """Send XEP-0277's microblog data
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
834
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
835 @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
836 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
837 @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
838 None to publish on profile's PEP
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
839 @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
840 None is equivalend as using default value
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
841 """
1699
a72f04c67ac9 plugin XEP-0277: just a reminder
Goffi <goffi@goffi.org>
parents: 1681
diff changeset
842 # 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
843 # by accident (e.g. if group plugin is not loaded, and "group*" key are not used)
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
844 if node is None:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
845 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
846
3502
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
847 item_id = data.get("id")
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
848 if item_id is None:
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
849 if data.get("user_friendly_id", True):
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
850 item_id = self.friendlyId(data)
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
851 else:
6132d363f0e9 plugin XEP-0277: user friendly ID:
Goffi <goffi@goffi.org>
parents: 3493
diff changeset
852 item_id = str(shortuuid.uuid())
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
853
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
854 try:
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
855 await self._manageComments(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
856 except error.StanzaError:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
857 log.warning("Can't create comments node for item {}".format(item_id))
3513
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
858 item = await self.data2entry(client, data, item_id, service, node)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
859 return await self._p.publish(client, service, node, [item])
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
860
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
861 def _mbPreview(self, service, node, data, profile_key):
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
862 service = jid.JID(service) if service else None
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
863 node = node if node else NS_MICROBLOG
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
864 client = self.host.getClient(profile_key)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
865 data = data_format.deserialise(data)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
866 d = defer.ensureDeferred(self.preview(client, data, service, node))
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
867 d.addCallback(data_format.serialise)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
868 return d
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
869
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
870 async def preview(
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
871 self,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
872 client: SatXMPPEntity,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
873 data: dict,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
874 service: Optional[jid.JID] = None,
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
875 node: Optional[str] = NS_MICROBLOG
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
876 ) -> dict:
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
877 """Preview microblog data without publishing them
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
878
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
879 params are the same as for [send]
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
880 @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
881 """
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
882 if node is None:
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
883 node = NS_MICROBLOG
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
884
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
885 item_id = data.get("id", "")
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
886
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
887 # we have to serialise then deserialise to be sure that all triggers are called
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
888 item_elt = await self.data2entry(client, data, item_id, service, node)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
889 item_elt.uri = pubsub.NS_PUBSUB
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
890 return await self.item2mbdata(client, item_elt, service, node)
753d151da886 XEP-0277: new preview/mbPreview method:
Goffi <goffi@goffi.org>
parents: 3502
diff changeset
891
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
892
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
893 ## retract ##
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
894
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
895 def _mbRetract(self, service_jid_s, nodeIdentifier, itemIdentifier, profile_key):
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
896 """Call self._p._retractItem, but use default node if node is empty"""
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
897 return self._p._retractItem(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
898 service_jid_s,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
899 nodeIdentifier or NS_MICROBLOG,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
900 itemIdentifier,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
901 True,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
902 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
903 )
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
904
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
905 ## get ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
906
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
907 def _mbGetSerialise(self, data):
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
908 items, metadata = data
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
909 metadata['items'] = items
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
910 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
911
2760
3480d4fdf83a plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
912 def _mbGet(self, service="", node="", max_items=10, item_ids=None, extra_dict=None,
3480d4fdf83a plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
913 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
914 """
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
915 @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
916 @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
917 """
2286
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
918 client = self.host.getClient(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
919 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
920 max_items = None if max_items == C.NO_LIMIT else max_items
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
921 extra = self._p.parseExtra(extra_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
922 d = self.mbGet(client, service, node or None, max_items, item_ids,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
923 extra.rsm_request, extra.extra)
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
924 d.addCallback(self._mbGetSerialise)
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
925 return d
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
926
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
927 @defer.inlineCallbacks
2760
3480d4fdf83a plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
928 def mbGet(self, client, service=None, node=None, max_items=10, item_ids=None,
3480d4fdf83a plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents: 2624
diff changeset
929 rsm_request=None, extra=None):
1516
afa0894dcc71 plugin XEP-0277, misc_groupblog: move getGroupBlogsAtom to XEP-0277, rename to mbGetAtom
souliane <souliane@mailoo.org>
parents: 1513
diff changeset
930 """Get some microblogs
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
931
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
932 @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
933 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
934 @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
935 @param max_items(int): maximum number of item to get, None 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
936 @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
937 @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
938 @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
939
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
940 @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
941 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
942 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
943 node = NS_MICROBLOG
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
944 items_data = yield self._p.getItems(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
945 client,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
946 service,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
947 node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
948 max_items=max_items,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
949 item_ids=item_ids,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
950 rsm_request=rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
951 extra=extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
952 )
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
953 mb_data = yield self._p.transItemsDataD(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
954 items_data, partial(self.item2mbdata, client, service=service, node=node))
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
955 defer.returnValue(mb_data)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
956
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
957 def parseCommentUrl(self, node_url):
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
958 """Parse a XMPP URI
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
959
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
960 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
961 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
962 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
963 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
964 @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
965 """
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
966 parsed_url = urllib.parse.urlparse(node_url, "xmpp")
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
967 service = jid.JID(parsed_url.path)
3069
73db9db8b9e1 plugin XEP-0277: fixed comments URLs parsing
Goffi <goffi@goffi.org>
parents: 3028
diff changeset
968 parsed_queries = urllib.parse.parse_qs(parsed_url.query)
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
969 node = parsed_queries.get("node", [""])[0]
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
970
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
971 if not node:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
972 raise failure.Failure(exceptions.DataError("Invalid comments link"))
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
973
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
974 return (service, node)
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
975
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
976 ## configure ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
977
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
978 def mbSetAccess(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
979 """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
980
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
981 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
982 @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
983 @param profile_key: profile key
6a2fa651d7fa plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
984 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
985 #  FIXME: check if this mehtod is need, deprecate it if not
2218
6a2fa651d7fa plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
986 client = self.host.getClient(profile_key)
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
987
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
988 _options = {
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
989 self._p.OPT_ACCESS_MODEL: access,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
990 self._p.OPT_PERSIST_ITEMS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
991 self._p.OPT_MAX_ITEMS: -1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
992 self._p.OPT_DELIVER_PAYLOADS: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
993 self._p.OPT_SEND_ITEM_SUBSCRIBE: 1,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
994 }
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
995
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
996 def cb(result):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
997 # Node is created with right permission
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
998 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
999
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1000 def fatal_err(s_error):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1001 # Something went wrong
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1002 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
1003 raise NodeAccessChangeException()
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1004
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1005 def err_cb(s_error):
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1006 # If the node already exists, the condition is "conflict",
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1007 # else we have an unmanaged error
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1008 if s_error.value.condition == "conflict":
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1009 # 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
1010 # d.addCallback(lambda x: create_node().addCallback(cb).addErrback(fatal_err))
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
1011 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
1012 else:
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1013 fatal_err(s_error)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1014
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1015 def create_node():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1016 return self._p.createNode(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1017 client, client.jid.userhostJID(), NS_MICROBLOG, _options
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1018 )
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
1019
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
1020 def change_node_options():
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1021 return self._p.setOptions(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1022 client.jid.userhostJID(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1023 NS_MICROBLOG,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1024 client.jid.userhostJID(),
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1025 _options,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1026 profile_key=profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1027 )
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1028
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
1029 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
1030
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1031 ## 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
1032
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1033 # common
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1034
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1035 def _getClientAndNodeData(self, publishers_type, publishers, profile_key):
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1036 """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
1037
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1038 @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
1039 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
1040 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
1041 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
1042 @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
1043 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
1044 @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
1045 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1046 client = self.host.getClient(profile_key)
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1047 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
1048 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
1049 else:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1050 jids_set = client.roster.getJidsSet(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
1051 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
1052 try:
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1053 # display messages from salut-a-toi@libervia.org or other PEP services
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1054 services = self.host.plugins["EXTRA-PEP"].getFollowedEntities(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1055 profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1056 )
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
1057 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
1058 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
1059 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
1060 if services:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1061 log.debug(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1062 "Extra PEP followed entities: %s"
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1063 % ", ".join([str(service) for service in services])
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1064 )
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
1065 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
1066
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1067 node_data = []
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1068 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
1069 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
1070 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
1071
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1072 def _checkPublishers(self, publishers_type, publishers):
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1073 """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
1074
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1075 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
1076 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
1077 @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
1078 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1079 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
1080 if publishers:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1081 raise failure.Failure(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1082 ValueError(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1083 "Can't use publishers with {} type".format(publishers_type)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1084 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1085 )
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1086 else:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1087 publishers = None
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1088 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
1089 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
1090 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
1091
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1092 # subscribe #
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1093
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1094 def _mbSubscribeToMany(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
1095 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1096
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1097 @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
1098 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1099 publishers_type, publishers = self._checkPublishers(publishers_type, publishers)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1100 return self.mbSubscribeToMany(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
1101
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1102 def mbSubscribeToMany(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
1103 """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
1104
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1105 @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
1106 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
1107 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
1108 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
1109 @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
1110 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
1111 @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
1112 @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
1113 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1114 client, node_data = self._getClientAndNodeData(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1115 publishers_type, publishers, profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1116 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1117 return self._p.subscribeToMany(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1118 node_data, client.jid.userhostJID(), profile_key=profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1119 )
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
1120
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1121 # get #
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1122
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1123 def _mbGetFromManyRTResult(self, session_id, profile_key=C.PROF_KEY_DEFAULT):
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1124 """Get real-time results for mbGetFromMany session
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1125
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1126 @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
1127 @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
1128 - 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
1129 - 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
1130 - service (unicode): pubsub service
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1131 - node (unicode): pubsub node
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1132 - failure (unicode): empty string in case of success, error message else
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
1133 - items_data(list): data as returned by [mbGet]
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
1134 - items_metadata(dict): metadata as returned by [mbGet]
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1135 @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
1136 """
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1137
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1138 client = self.host.getClient(profile_key)
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1139
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1140 def onSuccess(items_data):
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1141 """convert items elements to list of microblog data in items_data"""
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1142 d = self._p.transItemsDataD(
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1143 items_data,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1144 # FIXME: service and node should be used here
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1145 partial(self.item2mbdata, client),
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1146 serialise=True
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1147 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1148 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
1149 return d
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1150
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1151 d = self._p.getRTResults(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1152 session_id,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1153 on_success=onSuccess,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1154 on_error=lambda failure: (str(failure.value), ([], {})),
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1155 profile=client.profile,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1156 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1157 d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1158 lambda ret: (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1159 ret[0],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1160 [
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1161 (service.full(), node, failure, items, metadata)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1162 for (service, node), (success, (failure, (items, metadata))) in ret[
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1163 1
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1164 ].items()
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1165 ],
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1166 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1167 )
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1168 return d
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1169
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1170 def _mbGetFromMany(self, publishers_type, publishers, max_items=10, 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
1171 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
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 @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
1174 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1175 max_items = None if max_items == C.NO_LIMIT else max_items
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1176 publishers_type, publishers = self._checkPublishers(publishers_type, publishers)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1177 extra = self._p.parseExtra(extra_dict)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1178 return self.mbGetFromMany(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1179 publishers_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1180 publishers,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1181 max_items,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1182 extra.rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1183 extra.extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1184 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1185 )
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
1186
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1187 def mbGetFromMany(self, publishers_type, publishers, max_items=None, rsm_request=None,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1188 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
1189 """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
1190
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 @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
1192 "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
1193 @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
1194 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
1195 @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
1196 @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
1197 @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
1198 @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
1199 @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
1200 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1201 # XXX: extra is unused here so far
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1202 client, node_data = self._getClientAndNodeData(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1203 publishers_type, publishers, profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1204 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1205 return self._p.getFromMany(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1206 node_data, max_items, rsm_request, profile_key=profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1207 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1208
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1209 # comments #
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1210
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1211 def _mbGetFromManyWithCommentsRTResultSerialise(self, data):
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1212 """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
1213
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1214 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
1215 @param data(dict): data as received by rt_sessions
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1216 @return (tuple): see [_mbGetFromManyWithCommentsRTResult]
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1217 """
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1218 ret = []
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1219 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
1220 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
1221 items = []
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1222 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
1223 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
1224 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
1225 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
1226 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
1227 node,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1228 failure_,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1229 items,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1230 metadata))
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1231
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1232 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
1233
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1234 def _mbGetFromManyWithCommentsRTResult(self, session_id,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1235 profile_key=C.PROF_KEY_DEFAULT):
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1236 """Get real-time results for [mbGetFromManyWithComments] session
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1237
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1238 @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
1239 @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
1240 - 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
1241 - 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
1242 - 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
1243 - 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
1244 - 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
1245 - 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
1246 - 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
1247 - 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
1248 - 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
1249 - 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
1250 - 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
1251 - 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
1252 - 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
1253 - 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
1254 @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
1255 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1256 profile = self.host.getClient(profile_key).profile
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1257 d = self.rt_sessions.getResults(session_id, profile=profile)
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1258 d.addCallback(self._mbGetFromManyWithCommentsRTResultSerialise)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1259 return d
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1260
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1261 def _mbGetFromManyWithComments(self, publishers_type, publishers, max_items=10,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1262 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
1263 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
1264 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1265 @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
1266 @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
1267 limit
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1268 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1269 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
1270 max_comments = None if max_comments == C.NO_LIMIT else max_comments
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1271 publishers_type, publishers = self._checkPublishers(publishers_type, publishers)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1272 extra = self._p.parseExtra(extra_dict)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
1273 extra_comments = self._p.parseExtra(extra_comments_dict)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1274 return self.mbGetFromManyWithComments(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1275 publishers_type,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1276 publishers,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1277 max_items,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1278 max_comments or None,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1279 extra.rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1280 extra.extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1281 extra_comments.rsm_request,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1282 extra_comments.extra,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1283 profile_key,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1284 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1285
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1286 def mbGetFromManyWithComments(self, publishers_type, publishers, max_items=None,
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1287 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
1288 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
1289 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
1290 """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
1291
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1292 @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
1293 "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
1294 @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
1295 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
1296 @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
1297 @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
1298 @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
1299 @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
1300 @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
1301 @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
1302 @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
1303 @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
1304 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1305 # 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
1306 # 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
1307 # 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
1308
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1309 client, node_data = self._getClientAndNodeData(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1310 publishers_type, publishers, profile_key
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1311 )
2360
72cbb6478f97 plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents: 2341
diff changeset
1312
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1313 def getComments(items_data):
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1314 """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
1315
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1316 @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
1317 @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
1318 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
1319 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1320 items, metadata = items_data
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1321 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
1322 for item in items:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1323 dlist = [] # deferred list for comments
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1324 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
1325 # we look for comments
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1326 if key.startswith("comments") and key.endswith("_service"):
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1327 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
1328 service_s = value
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1329 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
1330 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
1331 # time to get the comments
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1332 d = self._p.getItems(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1333 client,
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1334 service,
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1335 node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1336 max_comments,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1337 rsm_request=rsm_comments,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1338 extra=extra_comments,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1339 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1340 # then serialise
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1341 d.addCallback(
2807
0b7ce5daee9b plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents: 2780
diff changeset
1342 lambda items_data: self._p.transItemsDataD(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1343 items_data,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1344 partial(
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1345 self.item2mbdata, client, service=service, node=node
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1346 ),
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1347 serialise=True
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1348 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1349 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1350 # with failure handling
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1351 d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1352 lambda serialised_items_data: ("",) + serialised_items_data
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1353 )
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1354 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
1355 # 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
1356 # comments nodes)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1357 d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1358 lambda serialised, service_s=service_s, node=node: (
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1359 service_s,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1360 node,
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1361 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1362 + serialised
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1363 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1364 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
1365 # 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
1366 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
1367 # and add them to the item data
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1368 comments_d.addCallback(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1369 lambda comments_data, item=item: (item, comments_data)
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1370 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1371 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
1372 # 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
1373 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
1374 # 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
1375 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
1376 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
1377
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1378 deferreds = {}
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1379 for service, node in node_data:
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1380 d = deferreds[(service, node)] = self._p.getItems(
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1381 client, service, node, max_items, rsm_request=rsm_request, extra=extra
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1382 )
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1383 d.addCallback(
3308
384283adcce1 plugins XEP-0059, XEP-0060, XEP-0277, XEP-0313: better serialisation:
Goffi <goffi@goffi.org>
parents: 3179
diff changeset
1384 lambda items_data: self._p.transItemsDataD(
3328
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1385 items_data,
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1386 partial(self.item2mbdata, client, service=service, node=node),
d49607e3a066 plugin XEP-0277: set "uri" in item2mbdata
Goffi <goffi@goffi.org>
parents: 3308
diff changeset
1387 )
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1388 )
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1389 d.addCallback(getComments)
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1390 d.addCallback(lambda items_comments_data: ("", items_comments_data))
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1391 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
1392
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
1393 return self.rt_sessions.newSession(deferreds, client.profile)
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1394
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1395
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2807
diff changeset
1396 @implementer(iwokkel.IDisco)
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1397 class XEP_0277_handler(XMPPHandler):
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1398
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1399 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
1400 return [disco.DiscoFeature(NS_MICROBLOG)]
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
1401
2624
56f94936df1e code style reformatting using black
Goffi <goffi@goffi.org>
parents: 2562
diff changeset
1402 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
1403 return []