Mercurial > libervia-backend
annotate sat_frontends/jp/xml_tools.py @ 3008:c8c68a3b0a79
plugins XEP-0045, XEP-0198: rejoin MUC rooms while a hot reconnection is done:
when resuming is not possible with stream management, a hot reconnection is done
(reconnecting without restarting every plugin). This was causing trouble for joined MUC
rooms, which were not accessible anymore (because they were not re-joined).
This patch fixes it by clearing rooms first (to avoid considering the room joined and
broadcasting the initial presence to them), then re-joining them.
fix 322
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 16 Jul 2019 21:59:30 +0200 |
parents | 710de41da2f2 |
children | ab2696e34d29 |
rev | line source |
---|---|
2777 | 1 #!/usr/bin/env python2 |
2 # -*- coding: utf-8 -*- | |
3 | |
4 # jp: a SàT command line tool | |
5 # Copyright (C) 2009-2019 Jérôme Poisson (goffi@goffi.org) | |
6 | |
7 # This program is free software: you can redistribute it and/or modify | |
8 # it under the terms of the GNU Affero General Public License as published by | |
9 # the Free Software Foundation, either version 3 of the License, or | |
10 # (at your option) any later version. | |
11 | |
12 # This program is distributed in the hope that it will be useful, | |
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 # GNU Affero General Public License for more details. | |
16 | |
17 # You should have received a copy of the GNU Affero General Public License | |
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
19 | |
20 from sat.core.i18n import _ | |
21 from sat_frontends.jp.constants import Const as C | |
22 | |
2804
710de41da2f2
jp (pubsub/node): new "import" command, to publish many nodes from an XML file
Goffi <goffi@goffi.org>
parents:
2777
diff
changeset
|
23 def etreeParse(cmd, raw_xml, reraise=False): |
2777 | 24 """Import lxml and parse raw XML |
25 | |
26 @param cmd(CommandBase): current command instance | |
27 @param raw_xml(file, str): an XML bytestring, string or file-like object | |
2804
710de41da2f2
jp (pubsub/node): new "import" command, to publish many nodes from an XML file
Goffi <goffi@goffi.org>
parents:
2777
diff
changeset
|
28 @param reraise(bool): if True, re raise exception on parse error instead of doing a |
710de41da2f2
jp (pubsub/node): new "import" command, to publish many nodes from an XML file
Goffi <goffi@goffi.org>
parents:
2777
diff
changeset
|
29 parser.error (which terminate the execution) |
2777 | 30 @return (tuple(etree.Element, module): parsed element, etree module |
31 """ | |
32 try: | |
33 from lxml import etree | |
34 except ImportError: | |
35 cmd.disp( | |
36 u'lxml module must be installed, please install it with "pip install lxml"', | |
37 error=True, | |
38 ) | |
39 cmd.host.quit(C.EXIT_ERROR) | |
40 try: | |
41 if isinstance(raw_xml, basestring): | |
42 parser = etree.XMLParser(remove_blank_text=True) | |
43 element = etree.fromstring(raw_xml, parser) | |
44 else: | |
45 element = etree.parse(raw_xml).getroot() | |
46 except Exception as e: | |
2804
710de41da2f2
jp (pubsub/node): new "import" command, to publish many nodes from an XML file
Goffi <goffi@goffi.org>
parents:
2777
diff
changeset
|
47 if reraise: |
710de41da2f2
jp (pubsub/node): new "import" command, to publish many nodes from an XML file
Goffi <goffi@goffi.org>
parents:
2777
diff
changeset
|
48 raise e |
2777 | 49 cmd.parser.error( |
50 _(u"Can't parse the payload XML in input: {msg}").format(msg=e) | |
51 ) | |
52 return element, etree | |
53 | |
54 def getPayload(cmd, element): | |
55 """Retrieve payload element and exit with and error if not found | |
56 | |
57 @param element(etree.Element): root element | |
58 @return element(etree.Element): payload element | |
59 """ | |
60 if element.tag in ("item", "{http://jabber.org/protocol/pubsub}item"): | |
61 if len(element) > 1: | |
62 cmd.disp(_(u"<item> can only have one child element (the payload)"), | |
63 error=True) | |
64 cmd.host.quit(C.EXIT_DATA_ERROR) | |
65 element = element[0] | |
66 return element |