11
README.md
11
README.md
@@ -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.
|
||||
|
||||
|
||||
24
challenge.py
24
challenge.py
@@ -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
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