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 |
|
23 def etreeParse(cmd, raw_xml): |
|
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 |
|
28 @return (tuple(etree.Element, module): parsed element, etree module |
|
29 """ |
|
30 try: |
|
31 from lxml import etree |
|
32 except ImportError: |
|
33 cmd.disp( |
|
34 u'lxml module must be installed, please install it with "pip install lxml"', |
|
35 error=True, |
|
36 ) |
|
37 cmd.host.quit(C.EXIT_ERROR) |
|
38 try: |
|
39 if isinstance(raw_xml, basestring): |
|
40 parser = etree.XMLParser(remove_blank_text=True) |
|
41 element = etree.fromstring(raw_xml, parser) |
|
42 else: |
|
43 element = etree.parse(raw_xml).getroot() |
|
44 except Exception as e: |
|
45 cmd.parser.error( |
|
46 _(u"Can't parse the payload XML in input: {msg}").format(msg=e) |
|
47 ) |
|
48 return element, etree |
|
49 |
|
50 def getPayload(cmd, element): |
|
51 """Retrieve payload element and exit with and error if not found |
|
52 |
|
53 @param element(etree.Element): root element |
|
54 @return element(etree.Element): payload element |
|
55 """ |
|
56 if element.tag in ("item", "{http://jabber.org/protocol/pubsub}item"): |
|
57 if len(element) > 1: |
|
58 cmd.disp(_(u"<item> can only have one child element (the payload)"), |
|
59 error=True) |
|
60 cmd.host.quit(C.EXIT_DATA_ERROR) |
|
61 element = element[0] |
|
62 return element |