Mercurial > libervia-backend
annotate sat/plugins/plugin_exp_pubsub_schema.py @ 2993:d58dccd9e4b4
primitivus (contact list): fixed notifications counter for mentions:
notifications counter was not properly counting mentions and was not changing colour as
expected, this patch fixes this and changed colour to the more readable light red when not focused.
fixes 319
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 08 Jul 2019 19:11:29 +0200 |
parents | 989b622faff6 |
children | ab2696e34d29 |
rev | line source |
---|---|
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
1 #!/usr/bin/env python2 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
2 # -*- coding: utf-8 -*- |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
4 # SAT plugin for Pubsub Schemas |
2771 | 5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 # (at your option) any later version. |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 # GNU Affero General Public License for more details. |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
20 from collections import Iterable |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
21 import copy |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
22 import itertools |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
23 from zope.interface import implements |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
24 from twisted.words.protocols.jabber import jid |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
25 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
26 from twisted.internet import defer |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
27 from wokkel import disco, iwokkel |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
28 from wokkel import data_form |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
29 from wokkel import generic |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 from sat.core.i18n import _ |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 from sat.core import exceptions |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
32 from sat.core.constants import Const as C |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
33 from sat.tools import xml_tools |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
34 from sat.tools import utils |
2612
3e4e78de9cca
tools (date_utils): moved date_parse to common.date_utils, because it can be used in frontends
Goffi <goffi@goffi.org>
parents:
2603
diff
changeset
|
35 from sat.tools.common import date_utils |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
36 from sat.tools.common import data_format |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
37 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
38 |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 log = getLogger(__name__) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
40 |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
41 NS_SCHEMA = u"https://salut-a-toi/protocol/schema:0" |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
42 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 PLUGIN_INFO = { |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
44 C.PI_NAME: u"PubSub Schema", |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
45 C.PI_IMPORT_NAME: u"PUBSUB_SCHEMA", |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
46 C.PI_TYPE: u"EXP", |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 C.PI_PROTOCOLS: [], |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
48 C.PI_DEPENDENCIES: [u"XEP-0060", u"IDENTITY"], |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
49 C.PI_MAIN: u"PubsubSchema", |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
50 C.PI_HANDLER: u"yes", |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
51 C.PI_DESCRIPTION: _(u"""Handle Pubsub data schemas"""), |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
52 } |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
53 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
54 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
55 class PubsubSchema(object): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 def __init__(self, host): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 log.info(_(u"PubSub Schema initialization")) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
58 self.host = host |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
59 self._p = self.host.plugins["XEP-0060"] |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
60 self._i = self.host.plugins["IDENTITY"] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
61 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
62 "psSchemaGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
63 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
64 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
65 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
66 method=self._getSchema, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
67 async=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
68 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
69 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
70 "psSchemaSet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
71 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
72 in_sign="ssss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
73 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
74 method=self._setSchema, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
75 async=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
76 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
77 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
78 "psSchemaUIGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
79 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
80 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
81 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
82 method=utils.partial(self._getUISchema, default_node=None), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
83 async=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
84 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
85 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
86 "psItemsFormGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
87 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
88 in_sign="ssssiassa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
89 out_sign="(asa{ss})", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
90 method=self._getDataFormItems, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
91 async=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
92 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
93 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
94 "psItemFormSend", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
95 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
96 in_sign="ssa{sas}ssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
97 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
98 method=self._sendDataFormItem, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
99 async=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
100 ) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
102 def getHandler(self, client): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 return SchemaHandler() |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 def _getSchemaBridgeCb(self, schema_elt): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 if schema_elt is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
107 return u"" |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
108 return schema_elt.toXml() |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
110 def _getSchema(self, service, nodeIdentifier, profile_key=C.PROF_KEY_NONE): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
111 client = self.host.getClient(profile_key) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
112 service = None if not service else jid.JID(service) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
113 d = self.getSchema(client, service, nodeIdentifier) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
114 d.addCallback(self._getSchemaBridgeCb) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
115 return d |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
116 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
117 def _getSchemaCb(self, iq_elt): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
118 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
119 schema_elt = next(iq_elt.elements(NS_SCHEMA, "schema")) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 except StopIteration: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
121 raise exceptions.DataError("missing <schema> element") |
2395
713cedc99752
plugin pubsub schema: allow any data_form schema:
Goffi <goffi@goffi.org>
parents:
2388
diff
changeset
|
122 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
123 x_elt = next(schema_elt.elements((data_form.NS_X_DATA, "x"))) |
2395
713cedc99752
plugin pubsub schema: allow any data_form schema:
Goffi <goffi@goffi.org>
parents:
2388
diff
changeset
|
124 except StopIteration: |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
125 # there is not schema on this node |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 return None |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
127 return x_elt |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 def getSchema(self, client, service, nodeIdentifier): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 """retrieve PubSub node schema |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
131 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 @param service(jid.JID, None): jid of PubSub service |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 None to use our PEP |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 @param nodeIdentifier(unicode): node to get schema from |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 @return (domish.Element, None): schema (<x> element) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 None if not schema has been set on this node |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
138 iq_elt = client.IQ(u"get") |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 if service is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
140 iq_elt["to"] = service.full() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
141 pubsub_elt = iq_elt.addElement((NS_SCHEMA, "pubsub")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
142 schema_elt = pubsub_elt.addElement((NS_SCHEMA, "schema")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
143 schema_elt["node"] = nodeIdentifier |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
144 d = iq_elt.send() |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
145 d.addCallback(self._getSchemaCb) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
146 return d |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
147 |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
148 @defer.inlineCallbacks |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
149 def getSchemaForm(self, client, service, nodeIdentifier, schema=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
150 form_type="form", copy_form=True): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
151 """get data form from node's schema |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
152 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
153 @param service(None, jid.JID): PubSub service |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
154 @param nodeIdentifier(unicode): node |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
155 @param schema(domish.Element, data_form.Form, None): node schema |
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
156 if domish.Element, will be converted to data form |
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
157 if data_form.Form it will be returned without modification |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
158 if None, it will be retrieved from node (imply one additional XMPP request) |
2386
2e05921df16a
plugin schema, core(xmlui): deep copy base form when reused to avoid accidental modification
Goffi <goffi@goffi.org>
parents:
2381
diff
changeset
|
159 @param form_type(unicode): type of the form |
2e05921df16a
plugin schema, core(xmlui): deep copy base form when reused to avoid accidental modification
Goffi <goffi@goffi.org>
parents:
2381
diff
changeset
|
160 @param copy_form(bool): if True and if schema is already a data_form.Form, will deep copy it before returning |
2e05921df16a
plugin schema, core(xmlui): deep copy base form when reused to avoid accidental modification
Goffi <goffi@goffi.org>
parents:
2381
diff
changeset
|
161 needed when the form is reused and it will be modified (e.g. in sendDataFormItem) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
162 @return(data_form.Form): data form |
2386
2e05921df16a
plugin schema, core(xmlui): deep copy base form when reused to avoid accidental modification
Goffi <goffi@goffi.org>
parents:
2381
diff
changeset
|
163 the form should not be modified if copy_form is not set |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
164 """ |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
165 if schema is None: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
166 log.debug(_(u"unspecified schema, we need to request it")) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
167 schema = yield self.getSchema(client, service, nodeIdentifier) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
168 if schema is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
169 raise exceptions.DataError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
170 _( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
171 u"no schema specified, and this node has no schema either, we can't construct the data form" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
172 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
173 ) |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
174 elif isinstance(schema, data_form.Form): |
2386
2e05921df16a
plugin schema, core(xmlui): deep copy base form when reused to avoid accidental modification
Goffi <goffi@goffi.org>
parents:
2381
diff
changeset
|
175 if copy_form: |
2e05921df16a
plugin schema, core(xmlui): deep copy base form when reused to avoid accidental modification
Goffi <goffi@goffi.org>
parents:
2381
diff
changeset
|
176 schema = copy.deepcopy(schema) |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
177 defer.returnValue(schema) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
178 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
179 try: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
180 form = data_form.Form.fromElement(schema) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
181 except data_form.Error as e: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
182 raise exceptions.DataError(_(u"Invalid Schema: {msg}").format(msg=e)) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
183 form.formType = form_type |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
184 defer.returnValue(form) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
185 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
186 def schema2XMLUI(self, schema_elt): |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
187 form = data_form.Form.fromElement(schema_elt) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
188 xmlui = xml_tools.dataForm2XMLUI(form, "") |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
189 return xmlui |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
190 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
191 def _getUISchema(self, service, nodeIdentifier, default_node=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
192 profile_key=C.PROF_KEY_NONE): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
193 if not nodeIdentifier: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
194 if not default_node: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
195 raise ValueError(_(u"nodeIndentifier needs to be set")) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
196 nodeIdentifier = default_node |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
197 client = self.host.getClient(profile_key) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
198 service = None if not service else jid.JID(service) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
199 d = self.getUISchema(client, service, nodeIdentifier) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
200 d.addCallback(lambda xmlui: xmlui.toXml()) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
201 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
202 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
203 def getUISchema(self, client, service, nodeIdentifier): |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
204 d = self.getSchema(client, service, nodeIdentifier) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
205 d.addCallback(self.schema2XMLUI) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
206 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
207 |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
208 def _setSchema(self, service, nodeIdentifier, schema, profile_key=C.PROF_KEY_NONE): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
209 client = self.host.getClient(profile_key) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
210 service = None if not service else jid.JID(service) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
211 schema = generic.parseXml(schema.encode("utf-8")) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
212 return self.setSchema(client, service, nodeIdentifier, schema) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
213 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
214 def setSchema(self, client, service, nodeIdentifier, schema): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
215 """set or replace PubSub node schema |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
216 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
217 @param schema(domish.Element, None): schema to set |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 None if schema need to be removed |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
219 """ |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
220 iq_elt = client.IQ() |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 if service is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
222 iq_elt["to"] = service.full() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
223 pubsub_elt = iq_elt.addElement((NS_SCHEMA, "pubsub")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
224 schema_elt = pubsub_elt.addElement((NS_SCHEMA, "schema")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
225 schema_elt["node"] = nodeIdentifier |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
226 if schema is not None: |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
227 schema_elt.addChild(schema) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
228 return iq_elt.send() |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
229 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
230 def _getDataFormItems(self, form_ns="", service="", node="", schema="", max_items=10, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
231 item_ids=None, sub_id=None, extra_dict=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
232 profile_key=C.PROF_KEY_NONE): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
233 client = self.host.getClient(profile_key) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
234 service = jid.JID(service) if service else None |
2398
3ff9d7a7fe71
core (XMLUI): filters can now be used when converting data form to XMLUI:
Goffi <goffi@goffi.org>
parents:
2395
diff
changeset
|
235 if not node: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
236 raise exceptions.DataError(_(u"empty node is not allowed")) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
237 if schema: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
238 schema = generic.parseXml(schema.encode("utf-8")) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
239 else: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
240 schema = None |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
241 max_items = None if max_items == C.NO_LIMIT else max_items |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
242 extra = self._p.parseExtra(extra_dict) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
243 d = self.getDataFormItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
244 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
245 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
246 node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
247 schema, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
248 max_items or None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
249 item_ids, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
250 sub_id or None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
251 extra.rsm_request, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
252 extra.extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
253 form_ns=form_ns or None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
254 ) |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2784
diff
changeset
|
255 d.addCallback(self._p.transItemsData) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
256 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
257 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
258 @defer.inlineCallbacks |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
259 def getDataFormItems(self, client, service, nodeIdentifier, schema=None, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
260 max_items=None, item_ids=None, sub_id=None, rsm_request=None, |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
261 extra=None, default_node=None, form_ns=None, filters=None): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
262 """Get items known as being data forms, and convert them to XMLUI |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
263 |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
264 @param schema(domish.Element, data_form.Form, None): schema of the node if known |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
265 if None, it will be retrieved from node |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
266 @param default_node(unicode): node to use if nodeIdentifier is None or empty |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
267 @param form_ns (unicode, None): namespace of the form |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
268 None to accept everything, even if form has no namespace |
2398
3ff9d7a7fe71
core (XMLUI): filters can now be used when converting data form to XMLUI:
Goffi <goffi@goffi.org>
parents:
2395
diff
changeset
|
269 @param filters(dict, None): same as for xml_tools.dataFormResult2XMLUI |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
270 other parameters as the same as for [getItems] |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
271 @return (list[unicode]): XMLUI of the forms |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
272 if an item is invalid (not corresponding to form_ns or not a data_form) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
273 it will be skipped |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
274 @raise ValueError: one argument is invalid |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
275 """ |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
276 if not nodeIdentifier: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
277 if not default_node: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
278 raise ValueError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
279 _(u"default_node must be set if nodeIdentifier is not set") |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
280 ) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
281 nodeIdentifier = default_node |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
282 # we need the initial form to get options of fields when suitable |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
283 schema_form = yield self.getSchemaForm( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
284 client, service, nodeIdentifier, schema, form_type="result", copy_form=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
285 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
286 items_data = yield self._p.getItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
287 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
288 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
289 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
290 max_items, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
291 item_ids, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
292 sub_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
293 rsm_request, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
294 extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
295 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
296 items, metadata = items_data |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
297 items_xmlui = [] |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
298 for item_elt in items: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
299 for x_elt in item_elt.elements((data_form.NS_X_DATA, u"x")): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
300 form = data_form.Form.fromElement(x_elt) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
301 if form_ns and form.formNamespace != form_ns: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
302 continue |
2381
72c30e73a9a5
plugin schema: use new "prepend" argument to put "id" widget first.
Goffi <goffi@goffi.org>
parents:
2378
diff
changeset
|
303 xmlui = xml_tools.dataFormResult2XMLUI( |
72c30e73a9a5
plugin schema: use new "prepend" argument to put "id" widget first.
Goffi <goffi@goffi.org>
parents:
2378
diff
changeset
|
304 form, |
72c30e73a9a5
plugin schema: use new "prepend" argument to put "id" widget first.
Goffi <goffi@goffi.org>
parents:
2378
diff
changeset
|
305 schema_form, |
2426
6c39f30444a0
plugin schema: prepend a "publisher" field after "id" in getDataFormItems with published given by PubSub service
Goffi <goffi@goffi.org>
parents:
2421
diff
changeset
|
306 # FIXME: conflicts with schema (i.e. if "id" or "publisher" already exists) |
6c39f30444a0
plugin schema: prepend a "publisher" field after "id" in getDataFormItems with published given by PubSub service
Goffi <goffi@goffi.org>
parents:
2421
diff
changeset
|
307 # are not checked |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
308 prepend=( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
309 ("label", "id"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
310 ("text", item_elt["id"], u"id"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
311 ("label", "publisher"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
312 ("text", item_elt.getAttribute("publisher", ""), u"publisher"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
313 ), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
314 filters=filters, |
2958
e2cb04b381bb
tools (xml_tools): added "read_only" argument in dataFormResult2XMLUI (and use it in plugin pubsub_schema)
Goffi <goffi@goffi.org>
parents:
2807
diff
changeset
|
315 read_only=False, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
316 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
317 items_xmlui.append(xmlui) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
318 break |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
319 defer.returnValue((items_xmlui, metadata)) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
320 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
321 def _sendDataFormItem(self, service, nodeIdentifier, values, schema=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
322 item_id=None, extra=None, profile_key=C.PROF_KEY_NONE): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
323 client = self.host.getClient(profile_key) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
324 service = None if not service else jid.JID(service) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
325 if schema: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
326 schema = generic.parseXml(schema.encode("utf-8")) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
327 else: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
328 schema = None |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
329 d = self.sendDataFormItem( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
330 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
331 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
332 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
333 values, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
334 schema, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
335 item_id or None, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
336 extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
337 deserialise=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
338 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
339 d.addCallback(lambda ret: ret or u"") |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
340 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
341 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
342 @defer.inlineCallbacks |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
343 def sendDataFormItem(self, client, service, nodeIdentifier, values, schema=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
344 item_id=None, extra=None, deserialise=False): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
345 """Publish an item as a dataform when we know that there is a schema |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
346 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
347 @param values(dict[key(unicode), [iterable[object], object]]): values set for the |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
348 form. If not iterable, will be put in a list. |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
349 @param schema(domish.Element, data_form.Form, None): data schema |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
350 None to retrieve data schema from node (need to do a additional XMPP call) |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
351 Schema is needed to construct data form to publish |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
352 @param deserialise(bool): if True, data are list of unicode and must be |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
353 deserialized according to expected type. |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
354 This is done in this method and not directly in _sendDataFormItem because we |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
355 need to know the data type which is in the form, not availablable in |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
356 _sendDataFormItem |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
357 other parameters as the same as for [self._p.sendItem] |
2420
03da3ef5fb5b
plugin tickets: added ticketsSet and ticketsSchemaGet methods:
Goffi <goffi@goffi.org>
parents:
2398
diff
changeset
|
358 @return (unicode): id of the created item |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
359 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
360 form = yield self.getSchemaForm( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
361 client, service, nodeIdentifier, schema, form_type="submit" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
362 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
363 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
364 for name, values_list in values.iteritems(): |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
365 try: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
366 field = form.fields[name] |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
367 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
368 log.warning( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
369 _(u"field {name} doesn't exist, ignoring it").format(name=name) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
370 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
371 continue |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
372 if isinstance(values_list, basestring) or not isinstance( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
373 values_list, Iterable |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
374 ): |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
375 values_list = [values_list] |
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
376 if deserialise: |
2784
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
377 if field.fieldType == u"boolean": |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
378 values_list = [C.bool(v) for v in values_list] |
2784
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
379 elif field.fieldType == u"text-multi": |
2421
b7e24ce97a06
plugin schema: separate lines of text-multi in different values as requested by XEP-0004
Goffi <goffi@goffi.org>
parents:
2420
diff
changeset
|
380 # for text-multi, lines must be put on separate values |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
381 values_list = list( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
382 itertools.chain(*[v.splitlines() for v in values_list]) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
383 ) |
2784
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
384 elif xml_tools.isXHTMLField(field): |
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
385 values_list = [generic.parseXml(v.encode("utf-8")) |
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
386 for v in values_list] |
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
387 elif u"jid" in (field.fieldType or u""): |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
388 values_list = [jid.JID(v) for v in values_list] |
2784
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
389 if u"list" in (field.fieldType or u""): |
2388
4c883d1c3e81
plugin schema: when publishing a schema, check that values of list are allowed, else use default value
Goffi <goffi@goffi.org>
parents:
2386
diff
changeset
|
390 # for lists, we check that given values are allowed in form |
4c883d1c3e81
plugin schema: when publishing a schema, check that values of list are allowed, else use default value
Goffi <goffi@goffi.org>
parents:
2386
diff
changeset
|
391 allowed_values = [o.value for o in field.options] |
4c883d1c3e81
plugin schema: when publishing a schema, check that values of list are allowed, else use default value
Goffi <goffi@goffi.org>
parents:
2386
diff
changeset
|
392 values_list = [v for v in values_list if v in allowed_values] |
4c883d1c3e81
plugin schema: when publishing a schema, check that values of list are allowed, else use default value
Goffi <goffi@goffi.org>
parents:
2386
diff
changeset
|
393 if not values_list: |
4c883d1c3e81
plugin schema: when publishing a schema, check that values of list are allowed, else use default value
Goffi <goffi@goffi.org>
parents:
2386
diff
changeset
|
394 # if values don't map to allowed values, we use default ones |
4c883d1c3e81
plugin schema: when publishing a schema, check that values of list are allowed, else use default value
Goffi <goffi@goffi.org>
parents:
2386
diff
changeset
|
395 values_list = field.values |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
396 field.values = values_list |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
397 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
398 yield self._p.sendItem( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
399 client, service, nodeIdentifier, form.toElement(), item_id, extra |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
400 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
401 |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
402 ## filters ## |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
403 # filters useful for data form to XMLUI conversion # |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
404 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
405 def valueOrPublisherFilter(self, form_xmlui, widget_type, args, kwargs): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
406 """Replace missing value by publisher's user part""" |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
407 if not args[0]: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
408 # value is not filled: we use user part of publisher (if we have it) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
409 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
410 publisher = jid.JID(form_xmlui.named_widgets["publisher"].value) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
411 except (KeyError, RuntimeError): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
412 pass |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
413 else: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
414 args[0] = publisher.user.capitalize() |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
415 return widget_type, args, kwargs |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
416 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
417 def textbox2ListFilter(self, form_xmlui, widget_type, args, kwargs): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
418 """Split lines of a textbox in a list |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
419 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
420 main use case is using a textbox for labels |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
421 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
422 if widget_type != u"textbox": |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
423 return widget_type, args, kwargs |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
424 widget_type = u"list" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
425 options = [o for o in args.pop(0).split(u"\n") if o] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
426 kwargs = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
427 "options": options, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
428 "name": kwargs.get("name"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
429 "styles": (u"noselect", u"extensible", u"reducible"), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
430 } |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
431 return widget_type, args, kwargs |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
432 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
433 def dateFilter(self, form_xmlui, widget_type, args, kwargs): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
434 """Convert a string with a date to a unix timestamp""" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
435 if widget_type != u"string" or not args[0]: |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
436 return widget_type, args, kwargs |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
437 # we convert XMPP date to timestamp |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
438 try: |
2612
3e4e78de9cca
tools (date_utils): moved date_parse to common.date_utils, because it can be used in frontends
Goffi <goffi@goffi.org>
parents:
2603
diff
changeset
|
439 args[0] = unicode(date_utils.date_parse(args[0])) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
440 except Exception as e: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
441 log.warning(_(u"Can't parse date field: {msg}").format(msg=e)) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
442 return widget_type, args, kwargs |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
443 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
444 ## Helper methods ## |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
445 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
446 def prepareBridgeGet(self, service, node, max_items, sub_id, extra_dict, profile_key): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
447 """Parse arguments received from bridge *Get methods and return higher level data |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
448 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
449 @return (tuple): (client, service, node, max_items, extra, sub_id) usable for |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
450 internal methods |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
451 """ |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
452 client = self.host.getClient(profile_key) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
453 service = jid.JID(service) if service else None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
454 if not node: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
455 node = None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
456 max_items = None if max_items == C.NO_LIMIT else max_items |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
457 if not sub_id: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
458 sub_id = None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
459 extra = self._p.parseExtra(extra_dict) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
460 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
461 return client, service, node, max_items, extra, sub_id |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
462 |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
463 def _get(self, service="", node="", max_items=10, item_ids=None, sub_id=None, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
464 extra=None, default_node=None, form_ns=None, filters=None, |
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
465 profile_key=C.PROF_KEY_NONE): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
466 """Bridge method to retrieve data from node with schema |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
467 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
468 this method is a helper so dependant plugins can use it directly |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
469 when adding *Get methods |
2603
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
470 extra can have the key "labels_as_list" which is a hack to convert |
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
471 labels from textbox to list in XMLUI, which usually render better |
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
472 in final UI. |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
473 """ |
2603
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
474 if filters is None: |
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
475 filters = {} |
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
476 if extra is None: |
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
477 extra = {} |
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
478 # XXX: Q&D way to get list for labels when displaying them, but text when we |
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
479 # have to modify them |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
480 if C.bool(extra.get("labels_as_list", C.BOOL_FALSE)): |
2603
5d4ac5415b40
plugins schema, merge-requests, tickets: convert labels from textbox to list only when "labels_as_list" is set in extra parameters.
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
481 filters = filters.copy() |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
482 filters[u"labels"] = self.textbox2ListFilter |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
483 client, service, node, max_items, extra, sub_id = self.prepareBridgeGet( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
484 service, node, max_items, sub_id, extra, profile_key |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
485 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
486 d = self.getDataFormItems( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
487 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
488 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
489 node or None, |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
490 max_items=max_items, |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
491 item_ids=item_ids, |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
492 sub_id=sub_id, |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
493 rsm_request=extra.rsm_request, |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
494 extra=extra.extra, |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
495 default_node=default_node, |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
496 form_ns=form_ns, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
497 filters=filters, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
498 ) |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2784
diff
changeset
|
499 d.addCallback(self._p.transItemsData) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
500 return d |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
501 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
502 def prepareBridgeSet(self, service, node, schema, item_id, extra, profile_key): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
503 """Parse arguments received from bridge *Set methods and return higher level data |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
504 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
505 @return (tuple): (client, service, node, schema, item_id, extra) usable for |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
506 internal methods |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
507 """ |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
508 client = self.host.getClient(profile_key) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
509 service = None if not service else jid.JID(service) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
510 if schema: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
511 schema = generic.parseXml(schema.encode("utf-8")) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
512 else: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
513 schema = None |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
514 extra = data_format.deserialise(extra) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
515 return client, service, node or None, schema, item_id or None, extra |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
516 |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
517 @defer.inlineCallbacks |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
518 def copyMissingValues(self, client, service, node, item_id, form_ns, values): |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
519 """Retrieve values existing in original item and missing in update |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
520 |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
521 Existing item will be retrieve, and values not already specified in values will |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
522 be filled |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
523 @param service: same as for [XEP_0060.getItems] |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
524 @param node: same as for [XEP_0060.getItems] |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
525 @param item_id(unicode): id of the item to retrieve |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
526 @param form_ns (unicode, None): namespace of the form |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
527 @param values(dict): values to fill |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
528 This dict will be modified *in place* to fill value present in existing |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
529 item and missing in the dict. |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
530 """ |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
531 try: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
532 # we get previous item |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
533 items_data = yield self._p.getItems( |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
534 client, service, node, item_ids=[item_id] |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
535 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
536 item_elt = items_data[0][0] |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
537 except Exception as e: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
538 log.warning( |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
539 _(u"Can't get previous item, update ignored: {reason}").format( |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
540 reason=e |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
541 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
542 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
543 else: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
544 # and parse it |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
545 form = data_form.findForm(item_elt, form_ns) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
546 if form is None: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
547 log.warning( |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
548 _( |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
549 u"Can't parse previous item, update ignored: data form not found" |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
550 ).format(reason=e) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
551 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
552 else: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
553 for name, field in form.fields.iteritems(): |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
554 if name not in values: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
555 values[name] = u"\n".join(unicode(v) for v in field.values) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
556 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
557 def _set(self, service, node, values, schema=None, item_id=None, extra=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
558 default_node=None, form_ns=None, fill_author=True, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
559 profile_key=C.PROF_KEY_NONE): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
560 """Bridge method to set item in node with schema |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
561 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
562 this method is a helper so dependant plugins can use it directly |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
563 when adding *Set methods |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
564 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
565 client, service, node, schema, item_id, extra = self.prepareBridgeSet( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
566 service, node, schema, item_id, extra |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
567 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
568 d = self.set( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
569 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
570 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
571 node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
572 values, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
573 schema, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
574 item_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
575 extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
576 deserialise=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
577 form_ns=form_ns, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
578 default_node=default_node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
579 fill_author=fill_author, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
580 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
581 d.addCallback(lambda ret: ret or u"") |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
582 return d |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
583 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
584 @defer.inlineCallbacks |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
585 def set(self, client, service, node, values, schema, item_id, extra, deserialise, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
586 form_ns, default_node=None, fill_author=True): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
587 """Set an item in a node with a schema |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
588 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
589 This method can be used directly by *Set methods added by dependant plugin |
2554
0062d3e79d12
plugin uri finder, jp (merge-request): labels handling:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
590 @param values(dict[key(unicode), [iterable[object]|object]]): values of the items |
0062d3e79d12
plugin uri finder, jp (merge-request): labels handling:
Goffi <goffi@goffi.org>
parents:
2483
diff
changeset
|
591 if value is not iterable, it will be put in a list |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
592 'created' and 'updated' will be forced to current time: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
593 - 'created' is set if item_id is None, i.e. if it's a new ticket |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
594 - 'updated' is set everytime |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
595 @param extra(dict, None): same as for [XEP-0060.sendItem] with additional keys: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
596 - update(bool): if True, get previous item data to merge with current one |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
597 if True, item_id must be None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
598 @param form_ns (unicode, None): namespace of the form |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
599 needed when an update is done |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
600 @param default_node(unicode, None): value to use if node is not set |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
601 other arguments are same as for [self._s.sendDataFormItem] |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
602 @return (unicode): id of the created item |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
603 """ |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
604 if extra is None: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
605 extra = {} |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
606 if not node: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
607 if default_node is None: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
608 raise ValueError(_(u"default_node must be set if node is not set")) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
609 node = default_node |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
610 now = utils.xmpp_date() |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
611 if not item_id: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
612 values["created"] = now |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
613 elif extra.get(u"update", False): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
614 if item_id is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
615 raise exceptions.DataError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
616 _(u'if extra["update"] is set, item_id must be set too') |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
617 ) |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
618 yield self.copyMissingValues(client, service, node, item_id, form_ns, values) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
619 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
620 values["updated"] = now |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
621 if fill_author: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
622 if not values.get("author"): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
623 identity = yield self._i.getIdentity(client, client.jid) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
624 values["author"] = identity["nick"] |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
625 if not values.get("author_jid"): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
626 values["author_jid"] = client.jid.full() |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
627 item_id = yield self.sendDataFormItem( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
628 client, service, node, values, schema, item_id, extra, deserialise |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
629 ) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
630 defer.returnValue(item_id) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
631 |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
632 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
633 class SchemaHandler(XMPPHandler): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
634 implements(iwokkel.IDisco) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
635 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
636 def getDiscoInfo(self, requestor, service, nodeIdentifier=""): |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
637 return [disco.DiscoFeature(NS_SCHEMA)] |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
638 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
639 def getDiscoItems(self, requestor, service, nodeIdentifier=""): |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
640 return [] |