Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0059.py @ 2716:06160b529da6
core (memory/sqlite): changed history constraint
/!\ Database schema change /!\
History was using a unique constraint on `profile_id, timestamp, source, dest, source_res, dest_res`, which can cause trouble because several messages send quickly by the same person can have a common timestamp (specially with delayed messages where precision is second), resulting in message loss.
The new constraint use `profile_id, stanza_id, source, dest` where `stanza_id` is XEP-0359 stanza_id, so it's unique by definition, and no message should be lost anymore.
Because sqlite doesn't support altering table with a constraint change, we have to create new tables and copy old data to new one, which can be pretty long.
Sqlite update mechanism with "specifics" has been fixed when several updates are applied (e.g. moving from v5 to v7) and a specific is in the workflow.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 09 Dec 2018 14:07:26 +0100 |
parents | 035901dc946d |
children | e3f6de6ce320 |
rev | line source |
---|---|
1934
2daf7b4c6756
use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents:
1769
diff
changeset
|
1 #!/usr/bin/env python2 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
3 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
4 # SAT plugin for Result Set Management (XEP-0059) |
2483 | 5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org) |
1766 | 6 # Copyright (C) 2013-2016 Adrien Cossa (souliane@mailoo.org) |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
7 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
8 # This program is free software: you can redistribute it and/or modify |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
9 # it under the terms of the GNU Affero General Public License as published by |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
10 # the Free Software Foundation, either version 3 of the License, or |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
11 # (at your option) any later version. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
12 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
13 # This program is distributed in the hope that it will be useful, |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
16 # GNU Affero General Public License for more details. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
17 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
18 # You should have received a copy of the GNU Affero General Public License |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
19 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
20 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
21 from sat.core.i18n import _ |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
22 from sat.core.constants import Const as C |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
23 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
24 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
25 log = getLogger(__name__) |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
26 |
1769 | 27 from wokkel import disco |
28 from wokkel import iwokkel | |
29 from wokkel import rsm | |
30 | |
31 from twisted.words.protocols.jabber import xmlstream | |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
32 from zope.interface import implements |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
33 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
34 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
35 PLUGIN_INFO = { |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
36 C.PI_NAME: u"Result Set Management", |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
37 C.PI_IMPORT_NAME: u"XEP-0059", |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
38 C.PI_TYPE: u"XEP", |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
39 C.PI_PROTOCOLS: [u"XEP-0059"], |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
40 C.PI_MAIN: u"XEP_0059", |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
41 C.PI_HANDLER: u"yes", |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
42 C.PI_DESCRIPTION: _(u"""Implementation of Result Set Management"""), |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
43 } |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
44 |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
45 RSM_PREFIX = u"rsm_" |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
46 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
47 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
48 class XEP_0059(object): |
1267
ea692d51a0ee
plugins XEP-0059, XEP-0060: leave internal wokkel extensions to sat.tmp.wokkel
souliane <souliane@mailoo.org>
parents:
1219
diff
changeset
|
49 # XXX: RSM management is done directly in Wokkel. |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
50 |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
51 def __init__(self, host): |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
52 log.info(_(u"Result Set Management plugin initialization")) |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
53 |
2144
1d3f73e065e1
core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
54 def getHandler(self, client): |
1465
cbf38047ca60
plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
55 return XEP_0059_handler() |
cbf38047ca60
plugin XEP-0059: fixed bad disco handling
Goffi <goffi@goffi.org>
parents:
1396
diff
changeset
|
56 |
2700
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
57 def parseExtra(self, extra): |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
58 """Parse extra dictionnary to retrieve RSM arguments |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
59 |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
60 @param extra(dict): data for parse |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
61 @return (rsm.RSMRequest, None): request with parsed arguments |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
62 or None if no RSM arguments have been found |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
63 """ |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
64 rsm_args = {} |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
65 for arg in (u"max", u"after", u"before", u"index"): |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
66 try: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
67 argname = "max_" if arg == u"max" else arg |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
68 rsm_args[argname] = extra.pop(RSM_PREFIX + arg) |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
69 except KeyError: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
70 continue |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
71 |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
72 if rsm_args: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
73 return rsm.RSMRequest(**rsm_args) |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
74 else: |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
75 return None |
035901dc946d
plugin XEP-0059: added "parseExtra" method to easily handle RSM argument coming from bridge.
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
76 |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
77 |
1769 | 78 class XEP_0059_handler(xmlstream.XMPPHandler): |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
79 implements(iwokkel.IDisco) |
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
80 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
81 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1769 | 82 return [disco.DiscoFeature(rsm.NS_RSM)] |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
83 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
84 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1219
16484ebb695b
plugin XEP-0059: first draft, pubsub and jabber search do not exploit it yet
souliane <souliane@mailoo.org>
parents:
diff
changeset
|
85 return [] |