Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d6fe66d2ec | |||
| a79c7b431b |
55
challenge.py
55
challenge.py
@@ -1,9 +1,12 @@
|
|||||||
""" Mini-Challenge """
|
""" Mini-Challenge"""
|
||||||
|
|
||||||
|
from os.path import join
|
||||||
|
from xml.dom import minidom
|
||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
|
||||||
class Adapter():
|
|
||||||
""" Adapter class
|
class Adapter:
|
||||||
|
"""Adapter class
|
||||||
|
|
||||||
Aufgabe: Asynchron XML-Daten lesen, konvertieren und zurückliefern.
|
Aufgabe: Asynchron XML-Daten lesen, konvertieren und zurückliefern.
|
||||||
"""
|
"""
|
||||||
@@ -17,8 +20,16 @@ class Adapter():
|
|||||||
in a synchronous way, extract the DataReceived/Token and return it
|
in a synchronous way, extract the DataReceived/Token and return it
|
||||||
as a JSON-Object (stringified) '{"token": value}'.
|
as a JSON-Object (stringified) '{"token": value}'.
|
||||||
"""
|
"""
|
||||||
# return '{"token": 42}' - don't do this, just a test
|
try:
|
||||||
raise NotImplementedError
|
with open(join(self.path, name + ".xml")) as f:
|
||||||
|
xml_data = f.read()
|
||||||
|
dom = minidom.parseString(xml_data)
|
||||||
|
token = dom.getElementsByTagName("Token")[0].firstChild.data
|
||||||
|
|
||||||
|
return '{"token": %s}' % token
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
raise ValueError("Could not retrieve token: %s" % e)
|
||||||
|
|
||||||
def retrieve_token_async(self, name):
|
def retrieve_token_async(self, name):
|
||||||
"""
|
"""
|
||||||
@@ -31,5 +42,35 @@ class Adapter():
|
|||||||
Hint: The simple way is to use defer.succeed(), bonus points for doing
|
Hint: The simple way is to use defer.succeed(), bonus points for doing
|
||||||
it with a callback chain read->parse->convert.
|
it with a callback chain read->parse->convert.
|
||||||
"""
|
"""
|
||||||
#return defer.succeed('{"token": 42}') - don't do this, just a test
|
d = defer.Deferred()
|
||||||
raise NotImplementedError
|
|
||||||
|
def read_file():
|
||||||
|
try:
|
||||||
|
with open(join(self.path, name + ".xml")) as f:
|
||||||
|
xml_data = f.read()
|
||||||
|
return xml_data
|
||||||
|
except Exception as e:
|
||||||
|
d.errback(e)
|
||||||
|
|
||||||
|
def parse_xml(xml_data):
|
||||||
|
try:
|
||||||
|
dom = minidom.parseString(xml_data)
|
||||||
|
token = dom.getElementsByTagName("Token")[0].firstChild.data
|
||||||
|
|
||||||
|
return token
|
||||||
|
|
||||||
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user