Skip to content

Commit 0c64abc

Browse files
authored
Custom response objects (#24)
* Enable custom response objects Closes: #23 * Test graceful handling of the function that raise the exception
1 parent a981906 commit 0c64abc

File tree

3 files changed

+44
-8
lines changed

3 files changed

+44
-8
lines changed

fdk/runner.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ def from_request(handle_func, incoming_request, loop=None):
4444
print(incoming_request.get("body"), file=sys.stderr, flush=True)
4545
response_data = handle_func(
4646
ctx, data=incoming_request.get("body"), loop=loop)
47+
48+
if isinstance(response_data, response.RawResponse):
49+
return response_data
50+
4751
print("the function finished", file=sys.stderr, flush=True)
4852
return response.RawResponse(
4953
ctx, response_data=response_data, status_code=200)

fdk/tests/data.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,14 @@
1212
# License for the specific language governing permissions and limitations
1313
# under the License.
1414

15+
raw_request_without_body = (
16+
'{"call_id":"01C7YFE8B867WG200000000000",'
17+
'"deadline":"2018-03-06T22:19:29.864+02:00",'
18+
'"body":"","content_type":"","protocol":'
19+
'{"type":"http","method":"GET","request_url":'
20+
'"http://localhost:8080/r/test/new-python","headers":'
21+
'{"Accept":["*/*"],"User-Agent":["curl/7.54.0"]}}}')
22+
1523
json_request_without_body = {
1624
"call_id": "01C7Y3PZFM67WG200000000000",
1725
"deadline": "2018-03-06T18:54:32.788+02:00",

fdk/tests/test_json.py

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import testtools
1717

1818
from fdk import runner
19+
from fdk import response
1920
from fdk.tests import data
2021

2122

@@ -24,6 +25,17 @@ def dummy_func(ctx, data=None, loop=None):
2425
return "Hello {0}".format(body.get("name"))
2526

2627

28+
def custom_response(ctx, data=None, loop=None):
29+
return response.RawResponse(
30+
ctx,
31+
response_data=dummy_func(ctx, data=data, loop=loop),
32+
status_code=201)
33+
34+
35+
def expectioner(ctx, data=None, loop=None):
36+
raise Exception("custom_error")
37+
38+
2739
class TestJSONRequestParser(testtools.TestCase):
2840

2941
def setUp(self):
@@ -33,15 +45,27 @@ def tearDown(self):
3345
super(TestJSONRequestParser, self).tearDown()
3446

3547
def test_parse_request_without_data(self):
36-
response = runner.from_request(
48+
r = runner.from_request(
3749
dummy_func, data.json_request_without_body)
38-
self.assertIsNotNone(response)
39-
self.assertIn("Hello World", response.body())
40-
self.assertEqual(200, response.status())
50+
self.assertIsNotNone(r)
51+
self.assertIn("Hello World", r.body())
52+
self.assertEqual(200, r.status())
4153

4254
def test_parse_request_with_data(self):
43-
response = runner.from_request(
55+
r = runner.from_request(
4456
dummy_func, data.json_request_with_body)
45-
self.assertIsNotNone(response)
46-
self.assertIn("Hello John", response.body())
47-
self.assertEqual(200, response.status())
57+
self.assertIsNotNone(r)
58+
self.assertIn("Hello John", r.body())
59+
self.assertEqual(200, r.status())
60+
61+
def test_custom_response_object(self):
62+
r = runner.from_request(custom_response, data.json_request_with_body)
63+
self.assertIsNotNone(r)
64+
self.assertIn("Hello John", r.body())
65+
self.assertEqual(201, r.status())
66+
67+
def test_errored_func(self):
68+
in_bytes = data.raw_request_without_body.encode('utf8')
69+
r = runner.handle_request(expectioner, in_bytes)
70+
self.assertIsNotNone(r)
71+
self.assertEqual(500, r.status())

0 commit comments

Comments
 (0)