Mercurial > libervia-backend
annotate sat/plugins/plugin_xep_0346.py @ 3452:bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
this implementation replaces the former non standard node schema, and works in a similar
way (the schema is put in a separated node instead of a special field, thus it will now
work with most/all PubSub services, and not only SàT PubSub).
The implementation has been done in a way that nothing should be changed in frontends
(bridge methods names and arguments stay the same). The nodes are modified, but if values
are taken from backend, it's automatically adapted.
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 11 Dec 2020 17:57:00 +0100 |
parents | sat/plugins/plugin_exp_pubsub_schema.py@71761e9fb984 |
children | 6791103de47d |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
3 # SàT plugin for XEP-0346 |
3136 | 4 # Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
5 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 # 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
|
7 # 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
|
8 # 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
|
9 # (at your option) any later version. |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
10 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 # 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
|
12 # 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
|
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
14 # GNU Affero General Public License for more details. |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
15 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 # 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
|
17 # 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
|
18 |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
19 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
|
20 import itertools |
3028 | 21 from zope.interface import implementer |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
22 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
|
23 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
3040 | 24 from twisted.words.xish import domish |
2959
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.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
|
26 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
|
27 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
|
28 from wokkel import generic |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
29 from sat.core.i18n import _ |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
30 from sat.core import exceptions |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
31 from sat.core.constants import Const as C |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
32 from sat.tools import xml_tools |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
33 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
|
34 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
|
35 from sat.tools.common import data_format |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
36 from sat.core.log import getLogger |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
37 |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
38 log = getLogger(__name__) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
39 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
40 NS_FDP = "urn:xmpp:fdp:0" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
41 TEMPLATE_PREFIX = "fdp/template/" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
42 SUBMITTED_PREFIX = "fdp/submitted/" |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
43 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
44 PLUGIN_INFO = { |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
45 C.PI_NAME: "Form Discovery and Publishing", |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
46 C.PI_IMPORT_NAME: "XEP-0346", |
3028 | 47 C.PI_TYPE: "EXP", |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 C.PI_PROTOCOLS: [], |
3028 | 49 C.PI_DEPENDENCIES: ["XEP-0060", "IDENTITY"], |
50 C.PI_MAIN: "PubsubSchema", | |
51 C.PI_HANDLER: "yes", | |
52 C.PI_DESCRIPTION: _("""Handle Pubsub data schemas"""), | |
2350
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 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
56 class PubsubSchema(object): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
57 def __init__(self, host): |
3028 | 58 log.info(_("PubSub Schema initialization")) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 self.host = host |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
60 self._p = self.host.plugins["XEP-0060"] |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
61 self._i = self.host.plugins["IDENTITY"] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
62 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
63 "psSchemaGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
64 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
65 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
66 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
67 method=self._getSchema, |
3028 | 68 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
69 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
70 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
71 "psSchemaSet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
72 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
73 in_sign="ssss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
74 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
75 method=self._setSchema, |
3028 | 76 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
77 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
78 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
79 "psSchemaUIGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
80 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
81 in_sign="sss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
82 out_sign="s", |
3028 | 83 method=lambda service, nodeIdentifier, profile_key: self._getUISchema( |
84 service, nodeIdentifier, default_node=None, profile_key=profile_key), | |
85 async_=True, | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
86 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
87 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
88 "psItemsFormGet", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
89 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
90 in_sign="ssssiassa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
91 out_sign="(asa{ss})", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
92 method=self._getDataFormItems, |
3028 | 93 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
94 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
95 host.bridge.addMethod( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
96 "psItemFormSend", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
97 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
98 in_sign="ssa{sas}ssa{ss}s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
99 out_sign="s", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
100 method=self._sendDataFormItem, |
3028 | 101 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
102 ) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
104 def getHandler(self, client): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
105 return SchemaHandler() |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
106 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
107 def getApplicationNS(self, namespace): |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
108 """Retrieve application namespace, i.e. namespace without FDP prefix""" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
109 if namespace.startswith(SUBMITTED_PREFIX): |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
110 namespace = namespace[len(SUBMITTED_PREFIX):] |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
111 elif namespace.startswith(TEMPLATE_PREFIX): |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
112 namespace = namespace[len(TEMPLATE_PREFIX):] |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
113 return namespace |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
114 |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
115 def getSubmittedNS(self, app_ns: str) -> str: |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
116 """Returns node to use to submit forms""" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
117 return f"{SUBMITTED_PREFIX}{app_ns}" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
118 |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
119 def _getSchemaBridgeCb(self, schema_elt): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
120 if schema_elt is None: |
3028 | 121 return "" |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
122 return schema_elt.toXml() |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
123 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
124 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
|
125 client = self.host.getClient(profile_key) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
126 service = None if not service else jid.JID(service) |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
127 d = defer.ensureDeferred(self.getSchema(client, service, nodeIdentifier)) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
128 d.addCallback(self._getSchemaBridgeCb) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
129 return d |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
130 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
131 async def getSchema(self, client, service, nodeIdentifier): |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
132 """retrieve PubSub node schema |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
133 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
134 @param service(jid.JID, None): jid of PubSub service |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
135 None to use our PEP |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
136 @param nodeIdentifier(unicode): node to get schema from |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
137 @return (domish.Element, None): schema (<x> element) |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
138 None if no schema has been set on this node |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
139 """ |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
140 app_ns = self.getApplicationNS(nodeIdentifier) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
141 node_id = f"{TEMPLATE_PREFIX}{app_ns}" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
142 items_data = await self._p.getItems(client, service, node_id, max_items=1) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
143 try: |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
144 schema = next(items_data[0][0].elements(data_form.NS_X_DATA, 'x')) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
145 except IndexError: |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
146 schema = None |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
147 except StopIteration: |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
148 log.warning( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
149 f"No schema found in item of {service!r} at node {nodeIdentifier!r}: " |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
150 f"\n{items_data[0][0].toXml()}" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
151 ) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
152 schema = None |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
153 return schema |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
154 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
155 async def getSchemaForm(self, client, service, nodeIdentifier, schema=None, |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
156 form_type="form", copy_form=True): |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
157 """Get data form from node's schema |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
158 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
159 @param service(None, jid.JID): PubSub service |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
160 @param nodeIdentifier(unicode): node |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
161 @param schema(domish.Element, data_form.Form, None): node schema |
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
162 if domish.Element, will be converted to data form |
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
163 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
|
164 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
|
165 @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
|
166 @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
|
167 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
|
168 @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
|
169 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
|
170 """ |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
171 if schema is None: |
3028 | 172 log.debug(_("unspecified schema, we need to request it")) |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
173 schema = await self.getSchema(client, service, nodeIdentifier) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
174 if schema is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
175 raise exceptions.DataError( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
176 _( |
3028 | 177 "no schema specified, and this node has no schema either, we can't construct the data form" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
178 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
179 ) |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
180 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
|
181 if copy_form: |
3040 | 182 # XXX: we don't use deepcopy as it will do an infinite loop if a |
183 # domish.Element is present in the form fields (happens for | |
184 # XEP-0315 data forms XML Element) | |
185 schema = data_form.Form( | |
186 formType = schema.formType, | |
187 title = schema.title, | |
188 instructions = schema.instructions[:], | |
189 formNamespace = schema.formNamespace, | |
190 fields = schema.fieldList, | |
191 ) | |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
192 return schema |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
193 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
194 try: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
195 form = data_form.Form.fromElement(schema) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
196 except data_form.Error as e: |
3028 | 197 raise exceptions.DataError(_("Invalid Schema: {msg}").format(msg=e)) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
198 form.formType = form_type |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
199 return form |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
200 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
201 def schema2XMLUI(self, schema_elt): |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
202 form = data_form.Form.fromElement(schema_elt) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
203 xmlui = xml_tools.dataForm2XMLUI(form, "") |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
204 return xmlui |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
205 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
206 def _getUISchema(self, service, nodeIdentifier, default_node=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
207 profile_key=C.PROF_KEY_NONE): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
208 if not nodeIdentifier: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
209 if not default_node: |
3028 | 210 raise ValueError(_("nodeIndentifier needs to be set")) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
211 nodeIdentifier = default_node |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
212 client = self.host.getClient(profile_key) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
213 service = None if not service else jid.JID(service) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
214 d = self.getUISchema(client, service, nodeIdentifier) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
215 d.addCallback(lambda xmlui: xmlui.toXml()) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
216 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
217 |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
218 def getUISchema(self, client, service, nodeIdentifier): |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
219 d = defer.ensureDeferred(self.getSchema(client, service, nodeIdentifier)) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
220 d.addCallback(self.schema2XMLUI) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
221 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
222 |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
223 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
|
224 client = self.host.getClient(profile_key) |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
225 service = None if not service else jid.JID(service) |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
226 schema = generic.parseXml(schema.encode()) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
227 return defer.ensureDeferred( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
228 self.setSchema(client, service, nodeIdentifier, schema) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
229 ) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
230 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
231 async def setSchema(self, client, service, nodeIdentifier, schema): |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
232 """Set or replace PubSub node schema |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
233 |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
234 @param schema(domish.Element, None): schema to set |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 None if schema need to be removed |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
236 """ |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
237 app_ns = self.getApplicationNS(nodeIdentifier) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
238 node_id = f"{TEMPLATE_PREFIX}{app_ns}" |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
239 node_options = { |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
240 self._p.OPT_ACCESS_MODEL: self._p.ACCESS_OPEN, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
241 self._p.OPT_PERSIST_ITEMS: 1, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
242 self._p.OPT_MAX_ITEMS: 1, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
243 self._p.OPT_DELIVER_PAYLOADS: 1, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
244 self._p.OPT_SEND_ITEM_SUBSCRIBE: 1, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
245 self._p.OPT_PUBLISH_MODEL: self._p.PUBLISH_MODEL_PUBLISHERS, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
246 } |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
247 await self._p.createIfNewNode(client, service, node_id, node_options) |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
248 await self._p.sendItem(client, service, node_id, schema, self._p.ID_SINGLETON) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
249 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
250 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
|
251 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
|
252 profile_key=C.PROF_KEY_NONE): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
253 client = self.host.getClient(profile_key) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
254 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
|
255 if not node: |
3028 | 256 raise exceptions.DataError(_("empty node is not allowed")) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
257 if schema: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
258 schema = generic.parseXml(schema.encode("utf-8")) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
259 else: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
260 schema = None |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
261 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
|
262 extra = self._p.parseExtra(extra_dict) |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
263 d = defer.ensureDeferred( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
264 self.getDataFormItems( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
265 client, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
266 service, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
267 node, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
268 schema, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
269 max_items or None, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
270 item_ids, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
271 sub_id or None, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
272 extra.rsm_request, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
273 extra.extra, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
274 form_ns=form_ns or None, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
275 ) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
276 ) |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2784
diff
changeset
|
277 d.addCallback(self._p.transItemsData) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
278 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
279 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
280 async def getDataFormItems(self, client, service, nodeIdentifier, schema=None, |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
281 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
|
282 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
|
283 """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
|
284 |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
285 @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
|
286 if None, it will be retrieved from node |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
287 @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
|
288 @param form_ns (unicode, None): namespace of the form |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
289 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
|
290 @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
|
291 other parameters as the same as for [getItems] |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
292 @return (list[unicode]): XMLUI of the forms |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
293 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
|
294 it will be skipped |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
295 @raise ValueError: one argument is invalid |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
296 """ |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
297 if not nodeIdentifier: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
298 if not default_node: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
299 raise ValueError( |
3028 | 300 _("default_node must be set if nodeIdentifier is not set") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
301 ) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
302 nodeIdentifier = default_node |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
303 # we need the initial form to get options of fields when suitable |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
304 schema_form = await self.getSchemaForm( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
305 client, service, nodeIdentifier, schema, form_type="result", copy_form=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
306 ) |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
307 items_data = await self._p.getItems( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
308 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
309 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
310 nodeIdentifier, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
311 max_items, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
312 item_ids, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
313 sub_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
314 rsm_request, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
315 extra, |
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, metadata = items_data |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
318 items_xmlui = [] |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
319 for item_elt in items: |
3028 | 320 for x_elt in item_elt.elements((data_form.NS_X_DATA, "x")): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
321 form = data_form.Form.fromElement(x_elt) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
322 if form_ns and form.formNamespace != form_ns: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
323 continue |
3271
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
324 prepend = [ |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
325 ("label", "id"), |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
326 ("text", item_elt["id"], "id"), |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
327 ("label", "publisher"), |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
328 ] |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
329 try: |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
330 publisher = jid.JID(item_elt['publisher']) |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
331 except (KeyError, jid.InvalidFormat): |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
332 pass |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
333 else: |
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
334 prepend.append(("jid", publisher, "publisher")) |
2381
72c30e73a9a5
plugin schema: use new "prepend" argument to put "id" widget first.
Goffi <goffi@goffi.org>
parents:
2378
diff
changeset
|
335 xmlui = xml_tools.dataFormResult2XMLUI( |
72c30e73a9a5
plugin schema: use new "prepend" argument to put "id" widget first.
Goffi <goffi@goffi.org>
parents:
2378
diff
changeset
|
336 form, |
72c30e73a9a5
plugin schema: use new "prepend" argument to put "id" widget first.
Goffi <goffi@goffi.org>
parents:
2378
diff
changeset
|
337 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
|
338 # 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
|
339 # are not checked |
3271
abca25af06d7
plugin pubsub schema, tools (common/template xmlui): use a JID for publisher:
Goffi <goffi@goffi.org>
parents:
3254
diff
changeset
|
340 prepend=prepend, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
341 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
|
342 read_only=False, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
343 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
344 items_xmlui.append(xmlui) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
345 break |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
346 return (items_xmlui, metadata) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
347 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
348 def _sendDataFormItem(self, service, nodeIdentifier, values, schema=None, |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
349 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
|
350 client = self.host.getClient(profile_key) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
351 service = None if not service else jid.JID(service) |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
352 if schema: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
353 schema = generic.parseXml(schema.encode("utf-8")) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
354 else: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
355 schema = None |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
356 d = defer.ensureDeferred( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
357 self.sendDataFormItem( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
358 client, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
359 service, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
360 nodeIdentifier, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
361 values, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
362 schema, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
363 item_id or None, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
364 extra, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
365 deserialise=True, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
366 ) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
367 ) |
3028 | 368 d.addCallback(lambda ret: ret or "") |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
369 return d |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
370 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
371 async def sendDataFormItem( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
372 self, client, service, nodeIdentifier, values, schema=None, item_id=None, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
373 extra=None, deserialise=False): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
374 """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
|
375 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
376 @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
|
377 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
|
378 @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
|
379 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
|
380 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
|
381 @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
|
382 deserialized according to expected type. |
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
383 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
|
384 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
|
385 _sendDataFormItem |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
386 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
|
387 @return (unicode): id of the created item |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
388 """ |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
389 form = await self.getSchemaForm( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
390 client, service, nodeIdentifier, schema, form_type="submit" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
391 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
392 |
3028 | 393 for name, values_list in values.items(): |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
394 try: |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
395 field = form.fields[name] |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
396 except KeyError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
397 log.warning( |
3028 | 398 _("field {name} doesn't exist, ignoring it").format(name=name) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
399 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
400 continue |
3028 | 401 if isinstance(values_list, str) or not isinstance( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
402 values_list, Iterable |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
403 ): |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
404 values_list = [values_list] |
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
405 if deserialise: |
3028 | 406 if field.fieldType == "boolean": |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
407 values_list = [C.bool(v) for v in values_list] |
3028 | 408 elif field.fieldType == "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
|
409 # 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
|
410 values_list = list( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
411 itertools.chain(*[v.splitlines() for v in values_list]) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
412 ) |
2784
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
413 elif xml_tools.isXHTMLField(field): |
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
414 values_list = [generic.parseXml(v.encode("utf-8")) |
76ebecdb9b1e
plugin pubsub schema: handle XHTML fields
Goffi <goffi@goffi.org>
parents:
2774
diff
changeset
|
415 for v in values_list] |
3028 | 416 elif "jid" in (field.fieldType or ""): |
2371
2268df8c99bf
plugin pubsub schema: values handling:
Goffi <goffi@goffi.org>
parents:
2363
diff
changeset
|
417 values_list = [jid.JID(v) for v in values_list] |
3028 | 418 if "list" in (field.fieldType or ""): |
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
|
419 # 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
|
420 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
|
421 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
|
422 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
|
423 # 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
|
424 values_list = field.values |
3040 | 425 elif field.ext_type == 'xml': |
426 # FIXME: XML elements are not handled correctly, we need to know if we | |
3071
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
427 # have actual XML/XHTML, or text to escape |
3040 | 428 for idx, value in enumerate(values_list[:]): |
3071
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
429 if isinstance(value, domish.Element): |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
430 if (field.value and (value.name != field.value.name |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
431 or value.uri != field.value.uri)): |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
432 # the element is not the one expected in form, so we create the right element |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
433 # to wrap the current value |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
434 wrapper_elt = domish.Element((field.value.uri, field.value.name)) |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
435 wrapper_elt.addChild(value) |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
436 values_list[idx] = wrapper_elt |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
437 else: |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
438 # we have to convert the value to a domish.Element |
3040 | 439 if field.value and field.value.uri == C.NS_XHTML: |
440 div_elt = domish.Element((C.NS_XHTML, 'div')) | |
441 div_elt.addContent(str(value)) | |
442 values_list[idx] = div_elt | |
3071
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
443 else: |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
444 # only XHTML fields are handled for now |
68d423f4fb55
plugin pubsub schema: fixed XML field handling in `sendDataFormItem`
Goffi <goffi@goffi.org>
parents:
3040
diff
changeset
|
445 raise NotImplementedError |
3040 | 446 |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
447 field.values = values_list |
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
448 |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
449 await self._p.sendItem( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
450 client, service, nodeIdentifier, form.toElement(), item_id, extra |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
451 ) |
2363
41c7717b52cd
plugin PubSub Schema: schema helper methods:
Goffi <goffi@goffi.org>
parents:
2350
diff
changeset
|
452 |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
453 ## filters ## |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
454 # filters useful for data form to XMLUI conversion # |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
455 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
456 def valueOrPublisherFilter(self, form_xmlui, widget_type, args, kwargs): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
457 """Replace missing value by publisher's user part""" |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
458 if not args[0]: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
459 # 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
|
460 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
461 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
|
462 except (KeyError, RuntimeError): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
463 pass |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
464 else: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
465 args[0] = publisher.user.capitalize() |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
466 return widget_type, args, kwargs |
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 def textbox2ListFilter(self, form_xmlui, widget_type, args, kwargs): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
469 """Split lines of a textbox in a list |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
470 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
471 main use case is using a textbox for labels |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
472 """ |
3028 | 473 if widget_type != "textbox": |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
474 return widget_type, args, kwargs |
3028 | 475 widget_type = "list" |
476 options = [o for o in args.pop(0).split("\n") if o] | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
477 kwargs = { |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
478 "options": options, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
479 "name": kwargs.get("name"), |
3028 | 480 "styles": ("noselect", "extensible", "reducible"), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
481 } |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
482 return widget_type, args, kwargs |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
483 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
484 def dateFilter(self, form_xmlui, widget_type, args, kwargs): |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
485 """Convert a string with a date to a unix timestamp""" |
3028 | 486 if widget_type != "string" or not args[0]: |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
487 return widget_type, args, kwargs |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
488 # we convert XMPP date to timestamp |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
489 try: |
3028 | 490 args[0] = str(date_utils.date_parse(args[0])) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
491 except Exception as e: |
3028 | 492 log.warning(_("Can't parse date field: {msg}").format(msg=e)) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
493 return widget_type, args, kwargs |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
494 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
495 ## Helper methods ## |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
496 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
497 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
|
498 """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
|
499 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
500 @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
|
501 internal methods |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
502 """ |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
503 client = self.host.getClient(profile_key) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
504 service = jid.JID(service) if service else None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
505 if not node: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
506 node = None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
507 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
|
508 if not sub_id: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
509 sub_id = None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
510 extra = self._p.parseExtra(extra_dict) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
511 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
512 return client, service, node, max_items, extra, sub_id |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
513 |
2760
3480d4fdf83a
plugins XEP-0060, XEP-0313: implemented Order-By protoXEP:
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
514 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
|
515 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
|
516 profile_key=C.PROF_KEY_NONE): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
517 """Bridge method to retrieve data from node with schema |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
518 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
519 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
|
520 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
|
521 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
|
522 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
|
523 in final UI. |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
524 """ |
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
|
525 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
|
526 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
|
527 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
|
528 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
|
529 # 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
|
530 # have to modify them |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
531 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
|
532 filters = filters.copy() |
3028 | 533 filters["labels"] = self.textbox2ListFilter |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
534 client, service, node, max_items, extra, sub_id = self.prepareBridgeGet( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
535 service, node, max_items, sub_id, extra, profile_key |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
536 ) |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
537 d = defer.ensureDeferred( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
538 self.getDataFormItems( |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
539 client, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
540 service, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
541 node or None, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
542 max_items=max_items, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
543 item_ids=item_ids, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
544 sub_id=sub_id, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
545 rsm_request=extra.rsm_request, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
546 extra=extra.extra, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
547 default_node=default_node, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
548 form_ns=form_ns, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
549 filters=filters, |
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
550 ) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
551 ) |
2807
0b7ce5daee9b
plugin XEP-0277: blog items data are now entirely serialised before going to bridge:
Goffi <goffi@goffi.org>
parents:
2784
diff
changeset
|
552 d.addCallback(self._p.transItemsData) |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
553 d.addCallback(lambda data: data_format.serialise(data)) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
554 return d |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
555 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
556 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
|
557 """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
|
558 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
559 @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
|
560 internal methods |
2471
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 client = self.host.getClient(profile_key) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
563 service = None if not service else jid.JID(service) |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
564 if schema: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
565 schema = generic.parseXml(schema.encode("utf-8")) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
566 else: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
567 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
|
568 extra = data_format.deserialise(extra) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
569 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
|
570 |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
571 @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
|
572 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
|
573 """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
|
574 |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
575 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
|
576 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
|
577 @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
|
578 @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
|
579 @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
|
580 @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
|
581 @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
|
582 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
|
583 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
|
584 """ |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
585 try: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
586 # 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
|
587 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
|
588 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
|
589 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
590 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
|
591 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
|
592 log.warning( |
3028 | 593 _("Can't get previous item, update ignored: {reason}").format( |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
594 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
|
595 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
596 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
597 else: |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
598 # 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
|
599 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
|
600 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
|
601 log.warning( |
3040 | 602 _("Can't parse previous item, update ignored: data form not found") |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
603 ) |
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
604 else: |
3028 | 605 for name, field in form.fields.items(): |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
606 if name not in values: |
3028 | 607 values[name] = "\n".join(str(v) for v in field.values) |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
608 |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
609 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
|
610 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
|
611 profile_key=C.PROF_KEY_NONE): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
612 """Bridge method to set item in node with schema |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
613 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
614 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
|
615 when adding *Set methods |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
616 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
617 client, service, node, schema, item_id, extra = self.prepareBridgeSet( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
618 service, node, schema, item_id, extra |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
619 ) |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
620 d = defer.ensureDeferred(self.set( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
621 client, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
622 service, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
623 node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
624 values, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
625 schema, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
626 item_id, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
627 extra, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
628 deserialise=True, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
629 form_ns=form_ns, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
630 default_node=default_node, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
631 fill_author=fill_author, |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
632 )) |
3028 | 633 d.addCallback(lambda ret: ret or "") |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
634 return d |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
635 |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
636 async def set( |
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
637 self, client, service, node, values, schema, item_id, extra, deserialise, |
2774
95321f233387
plugin pubsub schema: code formatting minor update
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
638 form_ns, default_node=None, fill_author=True): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
639 """Set an item in a node with a schema |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
640 |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
641 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
|
642 @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
|
643 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
|
644 'created' and 'updated' will be forced to current time: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
645 - '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
|
646 - 'updated' is set everytime |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
647 @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
|
648 - 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
|
649 if True, item_id must be None |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
650 @param form_ns (unicode, None): namespace of the form |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
651 needed when an update is done |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
652 @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
|
653 other arguments are same as for [self._s.sendDataFormItem] |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
654 @return (unicode): id of the created item |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
655 """ |
2959
989b622faff6
plugins schema, tickets, merge_requests: use serialised data for extra dict + some cosmetic changes
Goffi <goffi@goffi.org>
parents:
2958
diff
changeset
|
656 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
|
657 extra = {} |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
658 if not node: |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
659 if default_node is None: |
3028 | 660 raise ValueError(_("default_node must be set if node is not set")) |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
661 node = default_node |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
662 now = utils.xmpp_date() |
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
663 if not item_id: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
664 values["created"] = now |
3028 | 665 elif extra.get("update", False): |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
666 if item_id is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
667 raise exceptions.DataError( |
3028 | 668 _('if extra["update"] is set, item_id must be set too') |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
669 ) |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
670 await 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
|
671 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
672 values["updated"] = now |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
673 if fill_author: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
674 if not values.get("author"): |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
675 id_data = await self._i.getIdentity(client, None, ["nicknames"]) |
3254
6cf4bd6972c2
core, frontends: avatar refactoring:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
676 values["author"] = id_data['nicknames'][0] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
677 if not values.get("author_jid"): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
678 values["author_jid"] = client.jid.full() |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
679 item_id = await self.sendDataFormItem( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
680 client, service, node, values, schema, item_id, extra, deserialise |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
681 ) |
3309
71761e9fb984
plugins tickets, merge-requests: `ticketsGet` and `mergeRequestsGet` serialisation:
Goffi <goffi@goffi.org>
parents:
3271
diff
changeset
|
682 return item_id |
2471
544c4d2fec45
plugins schema, merge_requests, tickets*: factorisation
Goffi <goffi@goffi.org>
parents:
2426
diff
changeset
|
683 |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
684 |
3028 | 685 @implementer(iwokkel.IDisco) |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
686 class SchemaHandler(XMPPHandler): |
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
687 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
688 def getDiscoInfo(self, requestor, service, nodeIdentifier=""): |
3452
bb0225aaf4e6
plugin XEP-0346: "Form Discovery and Publishing" implementation:
Goffi <goffi@goffi.org>
parents:
3309
diff
changeset
|
689 return [disco.DiscoFeature(NS_FDP)] |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
690 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
691 def getDiscoItems(self, requestor, service, nodeIdentifier=""): |
2350
388226e9c3ff
plugin schema: PubSub node schema, first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
692 return [] |