From d6fe66d2ecb1ef0ea4cf5ba226d195f8abca61a0 Mon Sep 17 00:00:00 2001 From: Joa Cortez Date: Fri, 21 Apr 2023 16:17:54 +0200 Subject: [PATCH] =?UTF-8?q?Umstieg=20auf=20minidom=20f=C3=BCr=20Kompatibil?= =?UTF-8?q?it=C3=A4t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- challenge.py | 55 +++++++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/challenge.py b/challenge.py index e9383d6..e6a45f7 100644 --- a/challenge.py +++ b/challenge.py @@ -1,7 +1,7 @@ """ Mini-Challenge""" from os.path import join -from xml.etree import ElementTree as ET +from xml.dom import minidom from twisted.internet import defer @@ -14,18 +14,6 @@ class Adapter: def __init__(self, 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): """ Retrieve the content from file name.xml in adapters path directory @@ -33,9 +21,13 @@ class Adapter: as a JSON-Object (stringified) '{"token": value}'. """ try: - xml_data = self._read(name) - token = self._parse(xml_data) - return self._convert(token) + 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) @@ -52,18 +44,33 @@ class Adapter: """ d = defer.Deferred() - def on_success(xml_data): + def read_file(): try: - token = self._parse(xml_data) - converted = self._convert(token) - d.callback(converted) + with open(join(self.path, name + ".xml")) as f: + xml_data = f.read() + return xml_data except Exception as e: d.errback(e) - def on_error(error): - d.errback(error) + def parse_xml(xml_data): + try: + dom = minidom.parseString(xml_data) + token = dom.getElementsByTagName("Token")[0].firstChild.data - deferred = defer.maybeDeferred(self._read, name) - deferred.addCallbacks(on_success, on_error) + 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