11
README.md
11
README.md
@@ -1,4 +1,15 @@
|
|||||||
Challenge
|
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.
|
||||||
|
|
||||||
|
|||||||
24
challenge.py
24
challenge.py
@@ -3,11 +3,29 @@
|
|||||||
class Adapter():
|
class Adapter():
|
||||||
""" Adapter class
|
""" Adapter class
|
||||||
|
|
||||||
Aufgabe: Asynchron Daten lesen, konvertieren und zurückliefern.
|
Aufgabe: Asynchron XML-Daten lesen, konvertieren und zurückliefern.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, path):
|
def __init__(self, path):
|
||||||
self.path = path
|
self.path = path
|
||||||
|
|
||||||
def retrieve_json(self, name):
|
def retrieve_token(self, name):
|
||||||
pass
|
"""
|
||||||
|
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
3
test/data/accept.xml
Normal 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>
|
||||||
@@ -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
40
test/test_accept.py
Normal 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
|
||||||
Reference in New Issue
Block a user