forked from joeli/challenge
Umstieg auf minidom für Kompatibilität
This commit is contained in:
55
challenge.py
55
challenge.py
@@ -1,7 +1,7 @@
|
|||||||
""" Mini-Challenge"""
|
""" Mini-Challenge"""
|
||||||
|
|
||||||
from os.path import join
|
from os.path import join
|
||||||
from xml.etree import ElementTree as ET
|
from xml.dom import minidom
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
|
||||||
|
|
||||||
@@ -14,18 +14,6 @@ class Adapter:
|
|||||||
def __init__(self, path):
|
def __init__(self, path):
|
||||||
self.path = path
|
self.path = path
|
||||||
|
|
||||||
def _read(self, name):
|
|
||||||
with open(join(self.path, name + ".xml")) as f:
|
|
||||||
return f.read()
|
|
||||||
|
|
||||||
def _parse(self, xml_data):
|
|
||||||
root = ET.fromstring(xml_data)
|
|
||||||
token = root.find("{*}Token").text
|
|
||||||
return token
|
|
||||||
|
|
||||||
def _convert(self, token):
|
|
||||||
return '{"token": %s}' % token
|
|
||||||
|
|
||||||
def retrieve_token(self, name):
|
def retrieve_token(self, name):
|
||||||
"""
|
"""
|
||||||
Retrieve the content from file name.xml in adapters path directory
|
Retrieve the content from file name.xml in adapters path directory
|
||||||
@@ -33,9 +21,13 @@ class Adapter:
|
|||||||
as a JSON-Object (stringified) '{"token": value}'.
|
as a JSON-Object (stringified) '{"token": value}'.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
xml_data = self._read(name)
|
with open(join(self.path, name + ".xml")) as f:
|
||||||
token = self._parse(xml_data)
|
xml_data = f.read()
|
||||||
return self._convert(token)
|
dom = minidom.parseString(xml_data)
|
||||||
|
token = dom.getElementsByTagName("Token")[0].firstChild.data
|
||||||
|
|
||||||
|
return '{"token": %s}' % token
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise ValueError("Could not retrieve token: %s" % e)
|
raise ValueError("Could not retrieve token: %s" % e)
|
||||||
|
|
||||||
@@ -52,18 +44,33 @@ class Adapter:
|
|||||||
"""
|
"""
|
||||||
d = defer.Deferred()
|
d = defer.Deferred()
|
||||||
|
|
||||||
def on_success(xml_data):
|
def read_file():
|
||||||
try:
|
try:
|
||||||
token = self._parse(xml_data)
|
with open(join(self.path, name + ".xml")) as f:
|
||||||
converted = self._convert(token)
|
xml_data = f.read()
|
||||||
d.callback(converted)
|
return xml_data
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
d.errback(e)
|
d.errback(e)
|
||||||
|
|
||||||
def on_error(error):
|
def parse_xml(xml_data):
|
||||||
d.errback(error)
|
try:
|
||||||
|
dom = minidom.parseString(xml_data)
|
||||||
|
token = dom.getElementsByTagName("Token")[0].firstChild.data
|
||||||
|
|
||||||
deferred = defer.maybeDeferred(self._read, name)
|
return token
|
||||||
deferred.addCallbacks(on_success, on_error)
|
|
||||||
|
except Exception as e:
|
||||||
|
d.errback(e)
|
||||||
|
|
||||||
|
def convert_to_json(token):
|
||||||
|
try:
|
||||||
|
json_string = '{"token": %s}' % token
|
||||||
|
d.callback(json_string)
|
||||||
|
except Exception as e:
|
||||||
|
d.errback(e)
|
||||||
|
|
||||||
|
defer.execute(read_file).addCallback(parse_xml).addCallback(
|
||||||
|
convert_to_json
|
||||||
|
).addErrback(d.errback)
|
||||||
|
|
||||||
return d
|
return d
|
||||||
|
|||||||
Reference in New Issue
Block a user