X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Fnepi%2Futil%2Fparsers%2Fxml_parser.py;h=d82ea691afad1af337e74b8bd6e02f7c0d9e573a;hb=3fe2e6f7812888dc1366915545dd2243ff6fb1bb;hp=cbbaff0322bfda59d9ef5d3b2efb70ec69d42b30;hpb=e55924b6886bd7382a28e1ae235c4810f852e163;p=nepi.git diff --git a/src/nepi/util/parsers/xml_parser.py b/src/nepi/util/parsers/xml_parser.py index cbbaff03..d82ea691 100644 --- a/src/nepi/util/parsers/xml_parser.py +++ b/src/nepi/util/parsers/xml_parser.py @@ -16,6 +16,8 @@ # # Author: Alina Quereilhac +from __future__ import print_function + from nepi.util.netgraph import NetGraph, TopologyType from nepi.util.timefuncs import stformat, tsformat @@ -30,22 +32,44 @@ BOOL = "bool" INTEGER = "integer" DOUBLE = "float" -def xmlencode(s): - if isinstance(s, str): - rv = s.decode("latin1") - if isinstance(s, datetime.datetime): - rv = tsformat(s) - elif not isinstance(s, unicode): - rv = unicode(s) - else: - rv = s - return rv.replace(u'\x00',u'�') - +from six import PY2 + +if PY2: + # xxx old py2 code had a hack, that had 'latin1' hardcoded + # as the encoding for 8-byte strings + # this is very wrong; I keep it for now + # but will probably remove it altogether some day + def xmlencode(s): + """xml encoder for python2""" + if isinstance(s, str): + rv = s.decode("latin1") + if isinstance(s, datetime.datetime): + rv = tsformat(s) + elif not isinstance(s, unicode): + rv = unicode(s) + else: + rv = s + return rv.replace(u'\x00',u'�') +else: + # use sys.getdefaultencoding() to decode bytes into string + def xmlencode(s): + """xml encoder for python3""" + if isinstance(s, datetime.datetime): + rv = tsformat(s) + elif isinstance(s, bytes): + rv = s.decode(sys.getdefaultencoding()) + else: + rv = s + return rv.replace('\x00', '�') + def xmldecode(s, cast = str): - ret = s.replace(u'�',u'\x00').encode("ascii") - ret = cast(ret) - if s == "None": + if s is None: return None + if PY2: + ret = s.replace(u'�', u'\x00').encode("ascii") + else: + ret = s.replace('�', '\x00') + ret = cast(ret) return ret def from_type(value): @@ -81,7 +105,7 @@ class ECXMLParser(object): try: xml = doc.toprettyxml(indent=" ", encoding="UTF-8") except: - print >>sys.stderr, "Oops: generating XML from %s" % (data,) + print("Oops: generating XML from %s" % (data,), file=sys.stderr) raise return xml @@ -100,7 +124,7 @@ class ECXMLParser(object): rmsnode = doc.createElement("rms") ecnode.appendChild(rmsnode) - for guid, rm in ec._resources.iteritems(): + for guid, rm in ec._resources.items(): self._rm_to_xml(doc, rmsnode, ec, guid, rm) return doc @@ -223,7 +247,7 @@ class ECXMLParser(object): cnnode = doc.createElement("conditions") conditions = False - for action, conds in rm._conditions.iteritems(): + for action, conds in rm._conditions.items(): conditions = True for (group, state, time) in conds: ccnnode = doc.createElement("condition")