Commit ff1099ca authored by Łukasz Nowak's avatar Łukasz Nowak

Synchronise xml2dict and dict2xml

All tools from the ecosystem shall use the same way to convert between python's
dict and XML.
parent 3244ebb0
......@@ -28,7 +28,6 @@
#
##############################################################################
from lxml import etree
import random
import string
import time
......@@ -37,7 +36,8 @@ from slapos.slap.slap import Computer, ComputerPartition, \
SoftwareRelease, SoftwareInstance, NotFoundError
from slapos.proxy.db_version import DB_VERSION
import slapos.slap
from slapos.util import bytes2str, str2bytes, unicode2str, sqlite_connect
from slapos.slap.util import xml2dict, dict2xml
from slapos.util import bytes2str, unicode2str, sqlite_connect
from flask import g, Flask, request, abort
from slapos.util import loads, dumps
......@@ -53,39 +53,6 @@ class UnauthorizedError(Exception):
pass
def xml2dict(xml):
result_dict = {}
if xml:
tree = etree.fromstring(str2bytes(xml))
for element in tree.iter(tag=etree.Element):
if element.tag == 'parameter':
key = element.get('id')
value = result_dict.get(key, None)
if value is not None:
value = value + ' ' + element.text
else:
value = element.text
result_dict[key] = value
return result_dict
def dict2xml(dictionary):
instance = etree.Element('instance')
for k, v in six.iteritems(dictionary):
if isinstance(k, bytes):
k = k.decode('utf-8')
if isinstance(v, bytes):
v = v.decode('utf-8')
elif not isinstance(v, six.text_type):
v = str(v)
etree.SubElement(instance, "parameter",
attrib={'id': k}).text = v
return bytes2str(etree.tostring(instance,
pretty_print=True,
xml_declaration=True,
encoding='utf-8'))
def partitiondict2partition(partition):
slap_partition = ComputerPartition(partition['computer_reference'],
partition['reference'])
......
from lxml import etree
from six.moves.urllib import parse
from six import iteritems, text_type
from slapos.util import bytes2str, str2bytes
import netaddr
def dict2xml(dictionary):
instance = etree.Element('instance')
for k, v in iteritems(dictionary):
if isinstance(k, bytes):
k = k.decode('utf-8')
if isinstance(v, bytes):
v = v.decode('utf-8')
elif not isinstance(v, text_type):
v = str(v)
etree.SubElement(instance, "parameter",
attrib={'id': k}).text = v
return bytes2str(etree.tostring(instance,
pretty_print=True,
xml_declaration=True,
encoding='utf-8'))
def xml2dict(xml):
result_dict = {}
if xml is not None and xml != '':
tree = etree.fromstring(xml.encode('utf-8'))
for element in tree.iter(tag=etree.Element):
if element.tag == 'parameter':
key = element.get('id')
value = result_dict.get(key, None)
if value is not None:
value = value + ' ' + element.text
else:
value = element.text
result_dict[key] = value
tree = etree.fromstring(str2bytes(xml))
for element in tree.findall('parameter'):
key = element.get('id')
value = result_dict.get(key, None)
if value is not None:
value = value + ' ' + element.text
else:
value = element.text
result_dict[key] = value
return result_dict
def _addIpv6Brackets(url):
# if master_url contains an ipv6 without bracket, add it
# Note that this is mostly to limit specific issues with
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment