annotate src/plugins/plugin_xep_0277.py @ 2420:03da3ef5fb5b

plugin tickets: added ticketsSet and ticketsSchemaGet methods: those methods are high level methods specialised for tickets. ticketsSet will use default tickets node if node is not set, set "created" and "updated" fields, create comments node if the ticket is new, and associate it with "comments_uri" field. ticketsSchemaGet is like getUISchema with node defaulting to tickets default node.
author Goffi <goffi@goffi.org>
date Sun, 05 Nov 2017 15:36:06 +0100
parents 59100136f07a
children 014feb75092d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1919
diff changeset
1 #!/usr/bin/env python2
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
3
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
4 # SAT plugin for microblogging over XMPP (xep-0277)
2414
8b37a62336c3 misc: date update (yes it's a bit late :p )
Goffi <goffi@goffi.org>
parents: 2413
diff changeset
5 # Copyright (C) 2009-2017 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
6
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
7 # 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
8 # 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
9 # 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
10 # (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
11
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
12 # 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
13 # 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
14 # 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
15 # 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
16
609
84a6e83157c2 fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents: 594
diff changeset
17 # 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
18 # 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
19
1902
085f29c20f7e plugin XEP-0277: removed mbGetAtom which has not reason to be in the backend, as it is highly dependant of (web) frontend elements. The code will be moved to Libervia:
Goffi <goffi@goffi.org>
parents: 1865
diff changeset
20 from sat.core.i18n import _
916
1a759096ccbd core: use of Const for profile_key + replaced '@DEFAULT@' default profile_key by '@NONE@'
Goffi <goffi@goffi.org>
parents: 859
diff changeset
21 from sat.core.constants import Const as C
993
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 916
diff changeset
22 from sat.core.log import getLogger
301b342c697a core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents: 916
diff changeset
23 log = getLogger(__name__)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
24 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
25 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
26 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
27 from twisted.internet import defer
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
28 from twisted.python import failure
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
29 from sat.core import exceptions
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
30 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
31 from sat.tools import sat_defer
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
32 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
33 from sat.tools.common import data_format
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
34
2413
70399d1acb47 tmp: removed sat.tmp hierarchy and fixed references to it as it is now an independant sat_tmp repository
Goffi <goffi@goffi.org>
parents: 2390
diff changeset
35 # XXX: sat_tmp.wokkel.pubsub is actually used instead of wokkel version
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
36 from wokkel import pubsub
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
37 from wokkel import disco, iwokkel
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
38 from zope.interface import implements
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
39 import uuid
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
40 import time
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
41 import dateutil
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
42 import calendar
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
43 import urlparse
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
44
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
45 NS_MICROBLOG = 'urn:xmpp:microblog:0'
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
46 NS_ATOM = 'http://www.w3.org/2005/Atom'
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
47 NS_PUBSUB_EVENT = "{}{}".format(pubsub.NS_PUBSUB, "#event")
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
48 NS_COMMENT_PREFIX = '{}:comments/'.format(NS_MICROBLOG)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
49
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
50
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
51 PLUGIN_INFO = {
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
52 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
53 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
54 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
55 C.PI_PROTOCOLS: ["XEP-0277"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
56 C.PI_DEPENDENCIES: ["XEP-0163", "XEP-0060", "TEXT-SYNTAXES"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
57 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
58 C.PI_MAIN: "XEP_0277",
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
59 C.PI_HANDLER: "yes",
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2117
diff changeset
60 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
61 }
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
62
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
63
339
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
64 class NodeAccessChangeException(Exception):
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
65 pass
b0b773f432e5 plugin XEP-00277: setMicroblogAccess is now asynchronous
Goffi <goffi@goffi.org>
parents: 311
diff changeset
66
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
67
588
beaf6bec2fcd Remove every old-style class.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
68 class XEP_0277(object):
1831
68c0dc13d821 plugin blog import, XEP-0277: progress + redirect:
Goffi <goffi@goffi.org>
parents: 1829
diff changeset
69 namespace = NS_MICROBLOG
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
70
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
71 def __init__(self, host):
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
72 log.info(_(u"Microblogging plugin initialization"))
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
73 self.host = host
1451
9b88b19b1ca8 plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents: 1450
diff changeset
74 self._p = self.host.plugins["XEP-0060"] # 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
75 self.rt_sessions = sat_defer.RTDeferredSessions()
1760
30efe084471c plugin XEP-0060: None is no more used in addManagedNode, but all nodes prefixed with a registered one are now triggered
Goffi <goffi@goffi.org>
parents: 1750
diff changeset
76 self.host.plugins["XEP-0060"].addManagedNode(NS_MICROBLOG, items_cb=self._itemsReceived)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
77
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
78 host.bridge.addMethod("mbSend", ".plugin",
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
79 in_sign='ssa{ss}s', out_sign='',
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
80 method=self._mbSend,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
81 async=True)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
82 host.bridge.addMethod("mbRetract", ".plugin",
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
83 in_sign='ssss', out_sign='',
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
84 method=self._mbRetract,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
85 async=True)
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
86 host.bridge.addMethod("mbGet", ".plugin",
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
87 in_sign='ssiasa{ss}s', out_sign='(aa{ss}a{ss})',
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
88 method=self._mbGet,
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
89 async=True)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
90 host.bridge.addMethod("mbSetAccess", ".plugin", in_sign='ss', out_sign='',
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
91 method=self.mbSetAccess,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
92 async=True)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
93 host.bridge.addMethod("mbSubscribeToMany", ".plugin", in_sign='sass', out_sign='s',
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
94 method=self._mbSubscribeToMany)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
95 host.bridge.addMethod("mbGetFromManyRTResult", ".plugin", in_sign='ss', out_sign='(ua(sssaa{ss}a{ss}))',
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
96 method=self._mbGetFromManyRTResult, async=True)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
97 host.bridge.addMethod("mbGetFromMany", ".plugin", in_sign='sasia{ss}s', out_sign='s',
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
98 method=self._mbGetFromMany)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
99 host.bridge.addMethod("mbGetFromManyWithCommentsRTResult", ".plugin", in_sign='ss', out_sign='(ua(sssa(a{ss}a(sssaa{ss}a{ss}))a{ss}))',
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
100 method=self._mbGetFromManyWithCommentsRTResult, async=True)
1516
afa0894dcc71 plugin XEP-0277, misc_groupblog: move getGroupBlogsAtom to XEP-0277, rename to mbGetAtom
souliane <souliane@mailoo.org>
parents: 1513
diff changeset
101 host.bridge.addMethod("mbGetFromManyWithComments", ".plugin", in_sign='sasiia{ss}a{ss}s', out_sign='s',
afa0894dcc71 plugin XEP-0277, misc_groupblog: move getGroupBlogsAtom to XEP-0277, rename to mbGetAtom
souliane <souliane@mailoo.org>
parents: 1513
diff changeset
102 method=self._mbGetFromManyWithComments)
302
9f3a6cf91668 plugin xep-0277: added getLastMicroblogs method
Goffi <goffi@goffi.org>
parents: 297
diff changeset
103
2341
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
104 def getHandler(self, client):
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
105 return XEP_0277_handler()
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
106
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
107 def _checkFeaturesCb(self, available):
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
108 return {'available': C.BOOL_TRUE}
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
109
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
110 def _checkFeaturesEb(self, fail):
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
111 return {'available': C.BOOL_FALSE}
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
112
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
113 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
114 client = self.host.getClient(profile)
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
115 d = self.host.checkFeatures(client, [], identity=('pubsub', 'pep'))
1656
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
116 d.addCallbacks(self._checkFeaturesCb, self._checkFeaturesEb)
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
117 return d
069abd15354f plugin XEP-0277: checkFeatures implemented
Goffi <goffi@goffi.org>
parents: 1649
diff changeset
118
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
119 ## plugin management methods ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
120
2305
972e33507609 plugin XEP-0060: addManagedNode callbacks now use client syntax instead of profile
Goffi <goffi@goffi.org>
parents: 2289
diff changeset
121 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
122 """Callback which manage items notifications (publish + retract)"""
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
123 def manageItem(data, event):
2305
972e33507609 plugin XEP-0060: addManagedNode callbacks now use client syntax instead of profile
Goffi <goffi@goffi.org>
parents: 2289
diff changeset
124 self.host.bridge.psEvent(C.PS_MICROBLOG, itemsEvent.sender.full(), itemsEvent.nodeIdentifier, event, data, client.profile)
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
125
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
126 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
127 if item.name == C.PS_ITEM:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
128 self.item2mbdata(item).addCallbacks(manageItem, lambda failure: None, (C.PS_PUBLISH,))
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
129 elif item.name == C.PS_RETRACT:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
130 manageItem({'id': item['id']}, C.PS_RETRACT)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
131 else:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
132 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
133
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
134
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
135 ## 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
136
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
137 @defer.inlineCallbacks
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
138 def item2mbdata(self, item_elt):
302
9f3a6cf91668 plugin xep-0277: added getLastMicroblogs method
Goffi <goffi@goffi.org>
parents: 297
diff changeset
139 """Convert an XML Item to microblog data used in bridge API
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
140
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
141 @param item_elt: domish.Element of microblog item
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
142 @return: microblog data (dictionary)
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
143 """
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
144 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
145
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
146 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
147 """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
148
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
149 @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
150 @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
151 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
152 @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
153 (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
154 """
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
155 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
156 if not 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
157 raise failure.Failure(exceptions.DataError("key {} is already present for item {}").format(key, item_elt['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
158 else:
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
159 idx=1 # the idx 0 is the key without suffix
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
160 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
161 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
162 while new_key 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
163 idx+=1
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
164 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
165 key = new_key
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
166 return key
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
167
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
168 @defer.inlineCallbacks
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
169 def parseElement(elem):
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
170 """Parse title/content elements and fill microblog_data accordingly"""
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
171 type_ = elem.getAttribute('type')
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
172 if type_ == 'xhtml':
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
173 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
174 if data_elt is None:
c47ba491a85a plugin XEP-0277: raise a failure if XHTML content is not wrapped in a <div/>
Goffi <goffi@goffi.org>
parents: 1708
diff changeset
175 raise failure.Failure(exceptions.DataError(u"XHML content not wrapped in a <div/> element, this is not standard !"))
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
176 if data_elt.uri != C.NS_XHTML:
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
177 raise failure.Failure(exceptions.DataError(_('Content of type XHTML must declare its namespace!')))
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
178 key = check_conflict(u'{}_xhtml'.format(elem.name))
1791
1359ad0b37c2 reverted patch 3770d13776e8
Goffi <goffi@goffi.org>
parents: 1779
diff changeset
179 data = data_elt.toXml()
1812
160b0d4c6520 plugin XEP-0071, XEP-0277: method clean_xhtml has been renamed to cleanXHTML
souliane <souliane@mailoo.org>
parents: 1802
diff changeset
180 microblog_data[key] = yield self.host.plugins["TEXT-SYNTAXES"].cleanXHTML(data)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
181 else:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
182 key = check_conflict(elem.name)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
183 microblog_data[key] = unicode(elem)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
184
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
185
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
186 id_ = item_elt.getAttribute('id', '') # there can be no id for transient nodes
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
187 microblog_data[u'id'] = id_
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
188 if item_elt.uri not in (pubsub.NS_PUBSUB, NS_PUBSUB_EVENT):
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
189 msg = u"Unsupported namespace {ns} in pubsub item {id_}".format(ns=item_elt.uri, id_=id_)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
190 log.warning(msg)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
191 raise failure.Failure(exceptions.DataError(msg))
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
192
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
193 try:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
194 entry_elt = item_elt.elements(NS_ATOM, 'entry').next()
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
195 except StopIteration:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
196 msg = u'No atom entry found in the pubsub item {}'.format(id_)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
197 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
198
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
199 # language
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
200 try:
2322
310a454c8657 plugins invitation, XEP-0277: strip language, we don't want spaces
Goffi <goffi@goffi.org>
parents: 2305
diff changeset
201 microblog_data[u'language'] = entry_elt[(C.NS_XML, u'lang')].strip()
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
202 except KeyError:
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
203 pass
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
204
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
205 # 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
206 try:
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
207 id_elt = entry_elt.elements(NS_ATOM, 'id').next()
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
208 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
209 msg = u'No atom id found in the pubsub item {}, this is not standard !'.format(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
210 log.warning(msg)
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
211 microblog_data[u'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
212 else:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
213 microblog_data[u'atom_id'] = unicode(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
214
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
215 # 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
216
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
217 # 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
218 # 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
219 # 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
220 # 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
221 # 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
222 # 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
223 # 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
224 # 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
225 # raise failure.Failure(exceptions.DataError(msg))
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
226 title_elts = list(entry_elt.elements(NS_ATOM, 'title'))
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
227 if not title_elts:
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
228 msg = u'No atom title found in the pubsub item {}'.format(id_)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
229 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
230 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
231 yield parseElement(title_elt)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
232
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
233 # 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
234 # 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
235 # if more than one can be present
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
236 for content_elt in entry_elt.elements(NS_ATOM, 'content'):
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
237 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
238
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
239 # we check that text content is present
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
240 for key in ('title', 'content'):
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
241 if key not in microblog_data and ('{}_xhtml'.format(key)) in microblog_data:
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
242 log.warning(u"item {id_} provide a {key}_xhtml data but not a text one".format(id_=id_, key=key))
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
243 # ... and do the conversion if it's not
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
244 microblog_data[key] = yield self.host.plugins["TEXT-SYNTAXES"].\
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
245 convert(microblog_data[u'{}_xhtml'.format(key)],
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
246 self.host.plugins["TEXT-SYNTAXES"].SYNTAX_XHTML,
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
247 self.host.plugins["TEXT-SYNTAXES"].SYNTAX_TEXT,
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
248 False)
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
249
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
250 if 'content' not in microblog_data:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
251 # use the atom title data as the microblog body content
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
252 microblog_data[u'content'] = microblog_data[u'title']
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
253 del microblog_data[u'title']
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
254 if 'title_xhtml' in microblog_data:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
255 microblog_data[u'content_xhtml'] = microblog_data[u'title_xhtml']
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
256 del microblog_data[u'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
257
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 # 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
259 try:
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
260 updated_elt = entry_elt.elements(NS_ATOM, 'updated').next()
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
261 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
262 msg = u'No atom updated element found in the pubsub item {}'.format(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
263 raise failure.Failure(exceptions.DataError(msg))
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
264 microblog_data[u'updated'] = unicode(calendar.timegm(dateutil.parser.parse(unicode(updated_elt)).utctimetuple()))
302
9f3a6cf91668 plugin xep-0277: added getLastMicroblogs method
Goffi <goffi@goffi.org>
parents: 297
diff changeset
265 try:
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
266 published_elt = entry_elt.elements(NS_ATOM, 'published').next()
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
267 except StopIteration:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
268 microblog_data[u'published'] = microblog_data[u'updated']
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
269 else:
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
270 microblog_data[u'published'] = unicode(calendar.timegm(dateutil.parser.parse(unicode(published_elt)).utctimetuple()))
859
64ec04991d9d plugin XEP-0277: fix pubsub entry parsing using lxml instead of feed.atom
souliane <souliane@mailoo.org>
parents: 858
diff changeset
271
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
272 # links
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
273 for link_elt in entry_elt.elements(NS_ATOM, 'link'):
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
274 if link_elt.getAttribute('rel') == 'replies' and link_elt.getAttribute('title') == 'comments':
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
275 key = check_conflict('comments', True)
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
276 microblog_data[key] = link_elt['href']
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
277 try:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
278 service, node = self.parseCommentUrl(microblog_data[key])
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
279 except:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
280 log.warning(u"Can't parse url {}".format(microblog_data[key]))
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
281 del microblog_data[key]
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
282 else:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
283 microblog_data[u'{}_service'.format(key)] = service.full()
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
284 microblog_data[u'{}_node'.format(key)] = node
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
285 else:
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
286 rel = link_elt.getAttribute('rel','')
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
287 title = link_elt.getAttribute('title','')
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
288 href = link_elt.getAttribute('href','')
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
289 log.warning(u"Unmanaged link element: rel={rel} title={title} href={href}".format(rel=rel, title=title, href=href))
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
290
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
291 # author
859
64ec04991d9d plugin XEP-0277: fix pubsub entry parsing using lxml instead of feed.atom
souliane <souliane@mailoo.org>
parents: 858
diff changeset
292 try:
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
293 author_elt = entry_elt.elements(NS_ATOM, 'author').next()
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
294 except StopIteration:
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
295 log.debug(u"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
296 else:
1681
c6c835046681 plugin XEP-0277: minor fixes for publisher attribute
Goffi <goffi@goffi.org>
parents: 1680
diff changeset
297 publisher = item_elt.getAttribute("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
298 # name
770
64dd7c0f4feb plugin groupblog, XEP-0277: store both published and updated timestamps
souliane <souliane@mailoo.org>
parents: 745
diff changeset
299 try:
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
300 name_elt = author_elt.elements(NS_ATOM, 'name').next()
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
301 except StopIteration:
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
302 log.warning(u"No name element found in author element of item {}".format(id_))
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
303 else:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
304 microblog_data[u'author'] = unicode(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
305 # 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
306 try:
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
307 uri_elt = author_elt.elements(NS_ATOM, 'uri').next()
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
308 except StopIteration:
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
309 log.debug(u"No uri element found in author element of item {}".format(id_))
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
310 if publisher:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
311 microblog_data[u'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
312 else:
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
313 uri = unicode(uri_elt)
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
314 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
315 uri = uri[5:]
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
316 microblog_data[u'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
317 else:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
318 microblog_data[u'author_jid'] = item_elt.getAttribute(u"publisher") or ""
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
319
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
320 if not publisher:
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
321 log.debug(u"No publisher attribute, we can't verify author jid")
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
322 microblog_data[u'author_jid_verified'] = C.BOOL_FALSE
1681
c6c835046681 plugin XEP-0277: minor fixes for publisher attribute
Goffi <goffi@goffi.org>
parents: 1680
diff changeset
323 elif jid.JID(publisher).userhostJID() == jid.JID(uri).userhostJID():
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
324 microblog_data[u'author_jid_verified'] = C.BOOL_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
325 else:
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
326 log.warning(u"item atom:uri differ from publisher attribute, spoofing attempt ? atom:uri = {} publisher = {}".format(uri, item_elt.getAttribute("publisher")))
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
327 microblog_data[u'author_jid_verified'] = C.BOOL_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
328 # 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
329 try:
d5e72362ee91 plugin XEP-0277: better parsing of atom:author element + item2mbdata minor reorganisation for better readability
Goffi <goffi@goffi.org>
parents: 1452
diff changeset
330 email_elt = author_elt.elements(NS_ATOM, 'email').next()
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 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
332 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
333 else:
1913
ee1125fffba8 plugin XEP-0277, test: set keys of data dict as unicode + fix the tests
souliane <souliane@mailoo.org>
parents: 1902
diff changeset
334 microblog_data[u'author_email'] = unicode(email_elt)
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
335
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
336 # categories
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
337 categories = (category_elt.getAttribute('term','') for category_elt in entry_elt.elements(NS_ATOM, 'category'))
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
338 data_format.iter2dict('tag', categories, microblog_data)
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
339
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
340 ## 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
341 # if other plugins have things to add or change
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
342 yield self.host.trigger.point("XEP-0277_item2data", item_elt, entry_elt, microblog_data)
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
343
707
890fbf2d7fdd plugin XEP-0277, groupblog: rich text management for receiving microblogs
Goffi <goffi@goffi.org>
parents: 706
diff changeset
344 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
345
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
346 @defer.inlineCallbacks
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
347 def data2entry(self, data, item_id=None, profile=C.PROF_KEY_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
348 """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
349
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
350 @param data: data dict as given by bridge method.
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
351 @param item_id(unicode, None): id of the item to use
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
352 @return: deferred which fire domish.Element
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
353 """
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
354 client = self.host.getClient(profile)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
355 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
356
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
357 ## language ##
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
358 if u'language' in data:
2322
310a454c8657 plugins invitation, XEP-0277: strip language, we don't want spaces
Goffi <goffi@goffi.org>
parents: 2305
diff changeset
359 entry_elt[(C.NS_XML, u'lang')] = data[u'language'].strip()
2264
a8eaaac4d80f plugin XEP-0277, tools/common/data_objects: language handling
Goffi <goffi@goffi.org>
parents: 2243
diff changeset
360
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
361 ## content and title ##
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
362 synt = self.host.plugins["TEXT-SYNTAXES"]
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
363
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
364 for elem_name in ('title', 'content'):
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
365 for type_ in ['', '_rich', '_xhtml']:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
366 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
367 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
368 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
369 if type_:
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
370 if type_ == '_rich': # convert input from current syntax to XHTML
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
371 xml_content = yield synt.convert(data[attr], synt.getCurrentSyntax(profile), "XHTML")
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
372 if '{}_xhtml'.format(elem_name) in data:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
373 raise failure.Failure(exceptions.DataError(_("Can't have xhtml and rich content at the same time")))
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
374 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
375 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
376
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
377 div_elt = xml_tools.ElementParser()(xml_content, namespace=C.NS_XHTML)
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
378 if div_elt.name != 'div' or div_elt.uri != C.NS_XHTML or div_elt.attributes:
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
379 # we need a wrapping <div/> at the top with XHTML namespace
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
380 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
381 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
382 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
383 elem.addChild(div_elt)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
384 elem['type'] = 'xhtml'
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
385 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
386 # 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
387 # 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
388 elem_txt = entry_elt.addElement(elem_name)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
389 text_content = yield self.host.plugins["TEXT-SYNTAXES"].convert(xml_content,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
390 self.host.plugins["TEXT-SYNTAXES"].SYNTAX_XHTML,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
391 self.host.plugins["TEXT-SYNTAXES"].SYNTAX_TEXT,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
392 False)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
393 elem_txt.addContent(text_content)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
394 elem_txt['type'] = 'text'
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
395
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
396 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
397 elem.addContent(data[attr])
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
398 elem['type'] = 'text'
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
399
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
400 try:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
401 entry_elt.elements(NS_ATOM, 'title').next()
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
402 except StopIteration:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
403 # 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
404 # so we transform content element to title
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
405 elems = list(entry_elt.elements(NS_ATOM, 'content'))
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
406 if not elems:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
407 raise exceptions.DataError("There must be at least one content or title element")
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
408 for elem in elems:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
409 elem.name = 'title'
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
410
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
411 ## author ##
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
412 author_elt = entry_elt.addElement('author')
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
413 try:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
414 author_name = data['author']
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
415 except KeyError:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
416 # 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
417 author_name = client.jid.user
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
418 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
419
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
420 try:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
421 author_jid_s = data['author_jid']
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
422 except KeyError:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
423 author_jid_s = client.jid.userhost()
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
424 author_elt.addElement('uri', content="xmpp:{}".format(author_jid_s))
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
425
1820
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
426 try:
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
427 author_jid_s = data['author_email']
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
428 except KeyError:
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
429 pass
3c8cf120a0fd plugin XEP-0277: added missing author_email parsing
Goffi <goffi@goffi.org>
parents: 1817
diff changeset
430
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
431 ## 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
432 current_time = time.time()
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
433 entry_elt.addElement('updated',
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
434 content = utils.xmpp_date(float(data.get('updated', current_time))))
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
435 entry_elt.addElement('published',
1935
1128feb54180 core: removed pyfeed and xe dependencies:
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
436 content = utils.xmpp_date(float(data.get('published', current_time))))
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
437
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
438 ## categories ##
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
439 for tag in data_format.dict2iter("tag", data):
1664
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
440 category_elt = entry_elt.addElement("category")
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
441 category_elt['term'] = tag
5d0ff155be1a plugin XEP-0277: tags are handled through atom categories
Goffi <goffi@goffi.org>
parents: 1661
diff changeset
442
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
443 ## id ##
2415
59100136f07a plugin XEP-0277: minor id generation change
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
444 entry_id = data.get('id', item_id or unicode(uuid.uuid4())) # FIXME: use a proper id (see XEP-0277 §7.1)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
445 entry_elt.addElement('id', content=entry_id) #
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
446
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
447 ## comments ##
615
6f4c31192c7c plugins XEP-0060, XEP-0277, groupblog: comments implementation (first draft, not finished yet):
Goffi <goffi@goffi.org>
parents: 609
diff changeset
448 if 'comments' 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
449 link_elt = entry_elt.addElement('link')
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
450 link_elt['href'] = data['comments']
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
451 link_elt['rel'] = 'replies'
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
452 link_elt['title'] = 'comments'
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
453
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
454 ## 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
455 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
456
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
457 ## the trigger ##
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
458 # if other plugins have things to add or change
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
459 yield self.host.trigger.point("XEP-0277_data2entry", client, data, entry_elt, item_elt)
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
460
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
461 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
462
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
463 ## publish ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
464
1831
68c0dc13d821 plugin blog import, XEP-0277: progress + redirect:
Goffi <goffi@goffi.org>
parents: 1829
diff changeset
465 def getCommentsNode(self, item_id):
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
466 """Generate comment node
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
467
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
468 @param item_id(unicode): id of the parent item
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
469 @return (unicode): comment node to use
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
470 """
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
471 return u"{}{}".format(NS_COMMENT_PREFIX, item_id)
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
472
1831
68c0dc13d821 plugin blog import, XEP-0277: progress + redirect:
Goffi <goffi@goffi.org>
parents: 1829
diff changeset
473 def getCommentsService(self, client, parent_service=None):
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
474 """Get prefered PubSub service to create comment node
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
475
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
476 @param pubsub_service(jid.JID, None): PubSub service of the parent item
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
477 @param return(jid.JID, None): PubSub service to use
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
478 """
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
479 return client.pubsub_service if client.pubsub_service is not None else parent_service
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
480
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
481 @defer.inlineCallbacks
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
482 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
483 """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
484
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
485 if mb_data['comments'] exists, it is used (or mb_data['comments_service'] and/or mb_data['comments_node']),
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
486 else 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
487 @param mb_data(dict): microblog mb_data
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
488 @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
489 @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
490 @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
491 @param access(unicode, None): access model
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
492 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
493 """
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
494 # FIXME: if 'comments' already exists in mb_data, it is not used to create the Node
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
495 allow_comments = C.bool(mb_data.pop("allow_comments", "false"))
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
496 if not allow_comments:
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
497 if 'comments' in mb_data:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
498 log.warning(u"comments are not allowed but there is already a comments node, it may be lost: {uri}".format(uri=mb_data['comments']))
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
499 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
500 return
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
501
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
502 if access is None:
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
503 # TODO: cache access models per service/node
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
504 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
505 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
506
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
507 options = {self._p.OPT_ACCESS_MODEL: access,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
508 self._p.OPT_PERSIST_ITEMS: 1,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
509 self._p.OPT_MAX_ITEMS: -1,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
510 self._p.OPT_DELIVER_PAYLOADS: 1,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
511 self._p.OPT_SEND_ITEM_SUBSCRIBE: 1,
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
512 # FIXME: would it make sense to restrict publish model to subscribers?
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
513 self._p.OPT_PUBLISH_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
514 }
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
515
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
516 # 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
517 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
518
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
519 try:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
520 comments_node = mb_data['comments_node']
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
521 except KeyError:
1838
b3b25dbac585 plugin XEP-0277: fix bad call after methods renaming
Goffi <goffi@goffi.org>
parents: 1831
diff changeset
522 comments_node = self.getCommentsNode(item_id)
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
523 else:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
524 if not comments_node:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
525 raise exceptions.DataError(u"if comments_node is present, it must not be empty")
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
526
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
527 try:
1850
6e547dd7f38c plugin XEP-0277: add a forgotten string to JID conversion
souliane <souliane@mailoo.org>
parents: 1838
diff changeset
528 comments_service = jid.JID(mb_data['comments_service'])
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
529 except KeyError:
1838
b3b25dbac585 plugin XEP-0277: fix bad call after methods renaming
Goffi <goffi@goffi.org>
parents: 1831
diff changeset
530 comments_service = self.getCommentsService(client, service)
1661
96ee986dab3c plugin XEP-0277: added a trigger on data2entry and comments management
Goffi <goffi@goffi.org>
parents: 1656
diff changeset
531
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
532 try:
2218
6a2fa651d7fa plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
533 yield self._p.createNode(client, comments_service, comments_node, options)
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
534 except error.StanzaError as e:
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
535 if e.condition == 'conflict':
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
536 log.info(u"node {} already exists on service {}".format(comments_node, comments_service))
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
537 else:
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
538 raise e
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
539 else:
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
540 if access == self._p.ACCESS_WHITELIST:
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
541 # for whitelist access we need to copy affiliations from parent item
2286
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
542 comments_affiliations = yield self._p.getNodeAffiliations(client, service, node)
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
543 # …except for "member", that we transform to publisher
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
544 # because we wants members to be able to write to comments
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
545 for jid_, affiliation in comments_affiliations.items():
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
546 if affiliation == 'member':
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
547 comments_affiliations[jid_] == 'publisher'
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
548
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
549 yield self._p.setNodeAffiliations(client, comments_service, comments_node, comments_affiliations)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
550
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
551 if comments_service is None:
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
552 comments_service = client.jid.userhostJID()
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
553
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
554 if 'comments' in mb_data:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
555 if not mb_data['comments']:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
556 raise exceptions.DataError(u"if comments is present, it must not be empty")
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
557 if 'comments_node' in mb_data or 'comments_service' in mb_data:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
558 raise exceptions.DataError(u"You can't use comments_service/comments_node and comments at the same time")
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
559 else:
1829
6079752ffeae plugin XEP-0060, XEP-0277: added getNodeURI method
Goffi <goffi@goffi.org>
parents: 1823
diff changeset
560 mb_data['comments'] = self._p.getNodeURI(comments_service, comments_node)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
561
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
562 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
563 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
564 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
565 client = self.host.getClient(profile_key)
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
566 return 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
567
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
568 @defer.inlineCallbacks
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
569 def send(self, client, data, service=None, node=NS_MICROBLOG):
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
570 """Send XEP-0277's microblog data
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
571
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
572 @param data(dict): microblog data (must include at least a "content" or a "title" key).
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
573 see http://wiki.goffi.org/wiki/Bridge_API_-_Microblogging/en for details
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
574 @param service(jid.JID, None): PubSub service where the microblog must be published
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
575 None to publish on profile's PEP
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
576 @param node(unicode, None): PubSub node to use (defaut to microblog NS)
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
577 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
578 """
1699
a72f04c67ac9 plugin XEP-0277: just a reminder
Goffi <goffi@goffi.org>
parents: 1681
diff changeset
579 # TODO: check that all data keys are used, this would avoid sending publicly a private message
a72f04c67ac9 plugin XEP-0277: just a reminder
Goffi <goffi@goffi.org>
parents: 1681
diff changeset
580 # by accident (e.g. if group pluging is not loaded, and "grou*" key are not used)
1821
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
581 if node is None:
d6062afdd54f plugin XEP-0277: comments handling improvments:
Goffi <goffi@goffi.org>
parents: 1820
diff changeset
582 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
583
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
584 item_id = data.get('id') or unicode(uuid.uuid4())
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
585
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
586 try:
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
587 yield 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
588 except error.StanzaError:
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
589 log.warning(u"Can't create comments node for item {}".format(item_id))
2227
79d279d1ee88 plugin XEP-0277: comments node access model changes:
Goffi <goffi@goffi.org>
parents: 2218
diff changeset
590 item = yield self.data2entry(data, item_id, client.profile)
2272
b5befe7722d3 plugin XEP-0060: added sendItem and psItemSend bridge method as a way to send directly raw XML for an item + use client instead of profile_key in publish + renamed psItemGet to psItemsGet
Goffi <goffi@goffi.org>
parents: 2264
diff changeset
591 ret = yield self._p.publish(client, service, node, [item])
706
80e9d3ecb272 plugin XEP-0277, group blog: rich text management for sending microblogs
Goffi <goffi@goffi.org>
parents: 704
diff changeset
592 defer.returnValue(ret)
293
42438e43104a Plugin XEP-0277: first draft of microblogging over ip /!\ new dependencies added /!\
Goffi <goffi@goffi.org>
parents:
diff changeset
593
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
594 ## retract ##
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 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
597 """Call self._p._retractItem, but use default node if node is empty"""
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
598 return self._p._retractItem(service_jid_s, nodeIdentifier or NS_MICROBLOG, itemIdentifier, True, profile_key)
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
599
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
600 ## get ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
601
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
602 def _mbGet(self, service='', node='', max_items=10, item_ids=None, extra_dict=None, 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
603 """
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
604 @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
605 @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
606 """
2286
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
607 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
608 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
609 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
610 extra = self._p.parseExtra(extra_dict)
2289
f8276bd8baf6 plugin XEP-0277: max_items fix (last "fix" about it was actually bad)
Goffi <goffi@goffi.org>
parents: 2286
diff changeset
611 return self.mbGet(client, service, node or None, max_items, item_ids, extra.rsm_request, extra.extra)
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
612
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
613
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
614 @defer.inlineCallbacks
2286
330f8d4e2ad4 plugin XEP-0277: change affiliations for comments + fixes:
Goffi <goffi@goffi.org>
parents: 2272
diff changeset
615 def mbGet(self, client, service=None, node=None, max_items=10, item_ids=None, 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
616 """Get some microblogs
1419
be2df1ddea8e plugins (groupblog, xep-0277) + tmp(rsm): improved style:
Goffi <goffi@goffi.org>
parents: 1409
diff changeset
617
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
618 @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
619 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
620 @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
621 @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
622 @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
623 @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
624 @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
625
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
626 @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
627 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
628 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
629 node = NS_MICROBLOG
2360
72cbb6478f97 plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents: 2341
diff changeset
630 items_data = yield self._p.getItems(client, service, node, max_items=max_items, item_ids=item_ids, rsm_request=rsm_request, extra=extra)
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
631 serialised = yield self._p.serItemsDataD(items_data, self.item2mbdata)
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
632 defer.returnValue(serialised)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
633
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
634 def parseCommentUrl(self, node_url):
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
635 """Parse a XMPP URI
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
636
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
637 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
638 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
639 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
640 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
641 @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
642 """
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
643 parsed_url = urlparse.urlparse(node_url, 'xmpp')
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
644 service = jid.JID(parsed_url.path)
1823
1424cc6f8e98 plugin XEP-0277: fixed encoding issue, specially with parseCommentUrl, which could lead to the impossibility to find comments node
Goffi <goffi@goffi.org>
parents: 1822
diff changeset
645 parsed_queries = urlparse.parse_qs(parsed_url.query.encode('utf-8'))
1424cc6f8e98 plugin XEP-0277: fixed encoding issue, specially with parseCommentUrl, which could lead to the impossibility to find comments node
Goffi <goffi@goffi.org>
parents: 1822
diff changeset
646 node = parsed_queries.get('node', [''])[0].decode('utf-8')
1421
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
647
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
648 if not node:
1446
e8c8e467964b plugins xep-0060, xep-0277: code simplification/cleaning/fix:
Goffi <goffi@goffi.org>
parents: 1421
diff changeset
649 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
650
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
651 return (service, node)
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
652
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
653 ## configure ##
16b1ba7ccaaa plugins xep-0277: some methods reordering to make the plugin more readable
Goffi <goffi@goffi.org>
parents: 1419
diff changeset
654
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
655 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
656 """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
657
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
658 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
659 @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
660 @param profile_key: profile key
6a2fa651d7fa plugin XEP-0060: node create/delete improvments:
Goffi <goffi@goffi.org>
parents: 2160
diff changeset
661 """
2413
70399d1acb47 tmp: removed sat.tmp hierarchy and fixed references to it as it is now an independant sat_tmp repository
Goffi <goffi@goffi.org>
parents: 2390
diff changeset
662 # 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
663 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
664
1451
9b88b19b1ca8 plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents: 1450
diff changeset
665 _options = {self._p.OPT_ACCESS_MODEL: access, self._p.OPT_PERSIST_ITEMS: 1, self._p.OPT_MAX_ITEMS: -1, self._p.OPT_DELIVER_PAYLOADS: 1, self._p.OPT_SEND_ITEM_SUBSCRIBE: 1}
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
666
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
667 def cb(result):
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
668 #Node is created with right permission
1409
3265a2639182 massive (preventive) addition of 'u' (unicode) before the strings passed to logging functions
souliane <souliane@mailoo.org>
parents: 1396
diff changeset
669 log.debug(_(u"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
670
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
671 def fatal_err(s_error):
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
672 #Something went wrong
1680
1e06a0f8be66 plugin XEP-0277: unicode fixes in logs
Goffi <goffi@goffi.org>
parents: 1679
diff changeset
673 log.error(_(u"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
674 raise NodeAccessChangeException()
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
675
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
676 def err_cb(s_error):
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
677 #If the node already exists, the condition is "conflict",
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
678 #else we have an unmanaged error
594
e629371a28d3 Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 588
diff changeset
679 if s_error.value.condition == 'conflict':
2390
f57a8eaec8ed plugins import, tickets import, bugzilla import: comments handling:
Goffi <goffi@goffi.org>
parents: 2360
diff changeset
680 #d = self.host.plugins["XEP-0060"].deleteNode(client, client.jid.userhostJID(), NS_MICROBLOG)
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
681 #d.addCallback(lambda x: create_node().addCallback(cb).addErrback(fatal_err))
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
682 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
683 else:
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
684 fatal_err(s_error)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
685
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
686 def create_node():
2390
f57a8eaec8ed plugins import, tickets import, bugzilla import: comments handling:
Goffi <goffi@goffi.org>
parents: 2360
diff changeset
687 return self._p.createNode(client, client.jid.userhostJID(), NS_MICROBLOG, _options)
587
952322b1d490 Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 572
diff changeset
688
304
e04ccf122bb6 microblog sending
Goffi <goffi@goffi.org>
parents: 303
diff changeset
689 def change_node_options():
2390
f57a8eaec8ed plugins import, tickets import, bugzilla import: comments handling:
Goffi <goffi@goffi.org>
parents: 2360
diff changeset
690 return self._p.setOptions(client.jid.userhostJID(), NS_MICROBLOG, client.jid.userhostJID(), _options, profile_key=profile_key)
303
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
691
2b52a5da0978 plugin XEP_0277: microblog access model can now be changed
Goffi <goffi@goffi.org>
parents: 302
diff changeset
692 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
693
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
694 ## 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
695
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
696 # common
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
697
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
698 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
699 """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
700
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
701 @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
702 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
703 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
704 C.JID: use publishers directly as list of jids
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
705 @param publishers: list of publishers, according to "publishers_type" (None, list of groups or list of jids)
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
706 @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
707 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
708 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
709 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
710 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
711 else:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
712 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
713 if publishers_type == C.ALL:
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
714 try: # display messages from salut-a-toi@libervia.org or other PEP services
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
715 services = self.host.plugins["EXTRA-PEP"].getFollowedEntities(profile_key)
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
716 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
717 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
718 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
719 if services:
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
720 log.debug("Extra PEP followed entities: %s" % ", ".join([unicode(service) for service in services]))
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
721 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
722
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
723 node_data = []
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
724 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
725 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
726 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
727
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
728 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
729 """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
730
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
731 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
732 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
733 @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
734 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
735 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
736 if publishers:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
737 raise failure.Failure(ValueError("Can't use publishers with {} type".format(publishers_type)))
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
738 else:
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
739 publishers = None
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
740 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
741 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
742 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
743
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
744 # subscribe #
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
745
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
746 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
747 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
748
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
749 @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
750 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
751 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
752 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
753
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
754 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
755 """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
756
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
757 @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
758 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
759 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
760 C.JID: use publishers directly as list of jids
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
761 @param publishers: list of publishers, according to "publishers_type" (None, list of groups or list of jids)
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
762 @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
763 @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
764 """
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
765 client, node_data = self._getClientAndNodeData(publishers_type, publishers, profile_key)
1451
9b88b19b1ca8 plugins xep-0060, xep-0277: added methods to serialise getItems result (before bridge transmission):
Goffi <goffi@goffi.org>
parents: 1450
diff changeset
766 return self._p.subscribeToMany(node_data, client.jid.userhostJID(), profile_key=profile_key)
1450
7797dda847ae plugins xep-0277, groupblog: added subscriteToMany to replace massiveSubscribeGroupBlogs + added SatRosterProtocol.getJidsSet
Goffi <goffi@goffi.org>
parents: 1446
diff changeset
767
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
768 # get #
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
769
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
770 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
771 """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
772
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
773 @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
774 @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
775 - 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
776 - 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
777 - service (unicode): pubsub service
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
778 - node (unicode): pubsub node
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
779 - 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
780 - 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
781 - 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
782 @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
783 """
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
784 def onSuccess(items_data):
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
785 """convert items elements to list of microblog data in items_data"""
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
786 d = self._p.serItemsDataD(items_data, self.item2mbdata)
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
787 d.addCallback(lambda serialised:('', serialised))
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
788 return d
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
789
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
790 profile = self.host.getClient(profile_key).profile
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
791 d = self._p.getRTResults(session_id,
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
792 on_success = onSuccess,
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
793 on_error = lambda failure: (unicode(failure.value), ([],{})),
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
794 profile = profile)
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
795 d.addCallback(lambda ret: (ret[0],
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
796 [(service.full(), node, failure, items, metadata)
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
797 for (service, node), (success, (failure, (items, metadata))) in ret[1].iteritems()]))
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
798 return d
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
799
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
800 def _mbGetFromMany(self, publishers_type, publishers, max_items=10, extra_dict=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
801 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
802 @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
803 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
804 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
805 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
806 extra = self._p.parseExtra(extra_dict)
2289
f8276bd8baf6 plugin XEP-0277: max_items fix (last "fix" about it was actually bad)
Goffi <goffi@goffi.org>
parents: 2286
diff changeset
807 return self.mbGetFromMany(publishers_type, publishers, max_items, extra.rsm_request, extra.extra, profile_key)
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
808
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
809 def mbGetFromMany(self, publishers_type, publishers, max_items=None, rsm_request=None, 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
810 """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
811
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
812 @param publishers_type (str): type of the list of publishers (one of "GROUP" or "JID" or "ALL")
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
813 @param publishers (list): list of publishers, according to publishers_type (list of groups or list of jids)
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
814 @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
815 @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
816 @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
817 @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
818 @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
819 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
820 # XXX: extra is unused here so far
1452
5116d70ddd1c plugin xep-0060,xep-0277: added getFromMany using new RTDeferredSession mechanism
Goffi <goffi@goffi.org>
parents: 1451
diff changeset
821 client, node_data = self._getClientAndNodeData(publishers_type, publishers, 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
822 return self._p.getFromMany(node_data, max_items, rsm_request, profile_key=profile_key)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
823
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
824 # comments #
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
825
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
826 def _mbGetFromManyWithCommentsRTResult(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
827 """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
828
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
829 @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
830 @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
831 - 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
832 - 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
833 - 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
834 - 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
835 - 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
836 - 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
837 - 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
838 - 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
839 - 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
840 - 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
841 - 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
842 - 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
843 - 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
844 - 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
845 @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
846 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
847 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
848 d = self.rt_sessions.getResults(session_id, profile=profile)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
849 d.addCallback(lambda ret: (ret[0],
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
850 [(service.full(), node, failure, items, metadata)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
851 for (service, node), (success, (failure, (items, metadata))) in ret[1].iteritems()]))
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
852 return d
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
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 def _mbGetFromManyWithComments(self, publishers_type, publishers, max_items=10, max_comments=C.NO_LIMIT, extra_dict=None, 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
855 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
856 @param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
857 @param max_comments(int): maximum number of comments to get, C.NO_LIMIT for no limit
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
858 """
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
859 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
860 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
861 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
862 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
863 extra_comments = self._p.parseExtra(extra_comments_dict)
2289
f8276bd8baf6 plugin XEP-0277: max_items fix (last "fix" about it was actually bad)
Goffi <goffi@goffi.org>
parents: 2286
diff changeset
864 return self.mbGetFromManyWithComments(publishers_type, publishers, max_items, max_comments or None,
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
865 extra.rsm_request,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
866 extra.extra,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
867 extra_comments.rsm_request,
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
868 extra_comments.extra,
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
869 profile_key)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
870
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
871 def mbGetFromManyWithComments(self, publishers_type, publishers, max_items=None, max_comments=None, rsm_request=None, extra=None, rsm_comments=None, extra_comments=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
872 """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
873
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
874 @param publishers_type (str): type of the list of publishers (one of "GROUP" or "JID" or "ALL")
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
875 @param publishers (list): list of publishers, according to publishers_type (list of groups or list of jids)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
876 @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
877 @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
878 @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
879 @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
880 @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
881 @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
882 @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
883 @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
884 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
885 # 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
886 # 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
887 # 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
888
2360
72cbb6478f97 plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents: 2341
diff changeset
889 client, node_data = self._getClientAndNodeData(publishers_type, publishers, profile_key)
72cbb6478f97 plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents: 2341
diff changeset
890
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
891 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
892 """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
893
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
894 @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
895 @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
896 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
897 """
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
898 items, metadata = items_data
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
899 items_dlist = [] # deferred list for items
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
900 for item in items:
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
901 dlist = [] # deferred list for comments
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
902 for key, value in item.iteritems():
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
903 # we look for comments
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
904 if key.startswith('comments') and key.endswith('_service'):
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
905 prefix = key[:key.find('_')]
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
906 service_s = value
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
907 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
908 # time to get the comments
2360
72cbb6478f97 plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents: 2341
diff changeset
909 d = self._p.getItems(client, jid.JID(service_s), node, max_comments, rsm_request=rsm_comments, extra=extra_comments)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
910 # then serialise
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
911 d.addCallback(lambda items_data: self._p.serItemsDataD(items_data, self.item2mbdata))
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
912 # with failure handling
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
913 d.addCallback(lambda serialised_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
914 d.addErrback(lambda failure: (unicode(failure.value), [], {}))
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
915 # and associate with service/node (needed if there are several comments nodes)
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
916 d.addCallback(lambda serialised, service_s=service_s, node=node: (service_s, node) + serialised)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
917 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
918 # 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
919 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
920 # and add them to the item data
1459
4c4f88d7b156 plugins xep-0060, xep-0163, xep-0277, groupblog: bloging improvments (huge patch, sorry):
Goffi <goffi@goffi.org>
parents: 1454
diff changeset
921 comments_d.addCallback(lambda comments_data, item=item: (item, comments_data))
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
922 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
923 # 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
924 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
925 # 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
926 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
927 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
928
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
929 deferreds = {}
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
930 for service, node in node_data:
2360
72cbb6478f97 plugin XEP-0060: use client instead of profile_key in getItems
Goffi <goffi@goffi.org>
parents: 2341
diff changeset
931 d = deferreds[(service, node)] = self._p.getItems(client, service, node, max_items, rsm_request=rsm_request, extra=extra)
1454
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
932 d.addCallback(lambda items_data: self._p.serItemsDataD(items_data, self.item2mbdata))
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
933 d.addCallback(getComments)
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
934 d.addCallback(lambda items_comments_data: ('', items_comments_data))
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
935 d.addErrback(lambda failure: (unicode(failure.value), ([],{})))
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
936
4e2fab4de195 plugin XEP-0277: added mBGetFromManyWithComments to have items + comments in one method call
Goffi <goffi@goffi.org>
parents: 1453
diff changeset
937 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
938
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
939
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
940 class XEP_0277_handler(XMPPHandler):
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
941 implements(iwokkel.IDisco)
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
942
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
943 def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
944 return [disco.DiscoFeature(NS_MICROBLOG)]
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
945
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
946 def getDiscoItems(self, requestor, target, nodeIdentifier=''):
f9580b4a105a plugin XEP-0277: added microblog namespace to disco info
Goffi <goffi@goffi.org>
parents: 2322
diff changeset
947 return []