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