basic challenge done

Signed-off-by: Jan Heise <heise@dresearch.de>
This commit is contained in:
Jan Heise
2022-04-19 11:52:13 +02:00
parent c1a5a8bb58
commit cfb3311c34
5 changed files with 75 additions and 22 deletions

View File

@@ -1,4 +1,15 @@
Challenge
=========
Ziel ist es, die Adapter-Klasse in challenge.py zu implementieren. Diese hat 2 nicht
implementierte Methoden, eine synchron, eine asynchron, die beide einen String mit
einem JSON-Object zurückgeben sollen.
Synchron sollte recht simpel umzusetzen gehen, für asynchron ist ein wenig Verständnis
für twisted.internet notwendig. Spannendes Framework, macht aber seinem Namen oft alle
Ehre.
Test-Verifikation via *nosetest3*.
Viel Spaß. Wir freuen uns auf interessante Lösungen.

View File

@@ -3,11 +3,29 @@
class Adapter():
""" Adapter class
Aufgabe: Asynchron Daten lesen, konvertieren und zurückliefern.
Aufgabe: Asynchron XML-Daten lesen, konvertieren und zurückliefern.
"""
def __init__(self, path):
self.path = path
def retrieve_json(self, name):
pass
def retrieve_token(self, name):
"""
Retrieve the content from file name.xml in adapters path directory
in a synchronous way, extract the DataReceived/Token and return it
as a JSON-Object (stringified) '{"token": value}'.
"""
raise NotImplementedError
def retrieve_token_async(self, name):
"""
Retrieve the content from file name.xml in adapters path directory
in an asynchronous way, extract the DataReceived/Token and return it
as a Deferred which ends up in a JSON-Object (as above).
see: https://twistedmatrix.com/documents/8.0.0/api/twisted.internet.defer.Deferred.html
Hint: The simple way is to use defer.succeed(), bonus points for doing
it with a callback chain read->parse->convert.
"""
raise NotImplementedError

3
test/data/accept.xml Normal file
View File

@@ -0,0 +1,3 @@
<DataReceived xmlns="http://www.boschsecurity.com/2011/09/OpenInterface" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Token>42</Token>
</DataReceived>

View File

@@ -1,19 +0,0 @@
# -*- coding: utf-8 -*-
"""
Acceptance Test
~~~~~~~~~~~~~~~
:Ablauf:
- Adapter wird erzeugt
- Daten werden angefordert
:Erwartetes Ergebnis:
- Daten sind korrekt
"""
from nose.tools import assert_equals
from .. import Adapter
def test_acceptance():
""" Acceptance Test """
adapter = Adapter

40
test/test_accept.py Normal file
View File

@@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
"""
Acceptance Test
~~~~~~~~~~~~~~~
:Ablauf:
- Adapter wird erzeugt
- Daten werden angefordert
:Erwartetes Ergebnis:
- Daten sind korrekt
"""
from nose.twistedtools import reactor, deferred
from nose.tools import assert_equals
from twisted.internet.defer import Deferred
from .data import TEST_DATA_DIR
from .. import Adapter
def test_acceptance():
""" Acceptance test (synchron) """
adapter = Adapter(TEST_DATA_DIR)
data = adapter.retrieve_token("accept")
assert_equals(data, '{"token": 42}')
@deferred(timeout=2.0)
def test_acceptance_async():
""" Acceptance test (asynchron) """
adapter = Adapter(TEST_DATA_DIR)
finish = Deferred()
defer = adapter.retrieve_token_async("accept")
def check(data):
assert_equals(data, '{"token": 42}')
finish.callback(None)
defer.addCallback(check)
return finish