Skip to content

Commit 1c46e3e

Browse files
authored
Merge pull request #113 from TTWShell/feature/response
response: Result: add data field & fix tpl test.teardown_method err
2 parents b45b99c + b029d7c commit 1c46e3e

File tree

6 files changed

+36
-20
lines changed

6 files changed

+36
-20
lines changed

docs/changelog.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
Change history
22
==============
33

4+
2.0.1 (2021-06-21)
5+
******************
6+
7+
* Add data field for response.Result: return Real response payload.
8+
* Bugfix: tests.BaseTest.teardown_method miss `app.app_context()`.
9+
410
2.0.0 (2021-06-20)
511
******************
612

hobbit/static/bootstrap/rivendell/tests/__init__.py.jinja2

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ class BaseTest:
2424
pass
2525

2626
def teardown_method(self, method):
27-
for m in [m for m in db.Model._decl_class_registry.values()
28-
if isinstance(m, model.DefaultMeta)]:
29-
db.session.query(m).delete()
30-
db.session.commit()
27+
with app.app_context():
28+
for m in [m for m in db.Model._decl_class_registry.values()
29+
if isinstance(m, model.DefaultMeta)]:
30+
db.session.query(m).delete()
31+
db.session.commit()
3132

hobbit/static/bootstrap/shire/tests/__init__.py.jinja2

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ class BaseTest:
2424
pass
2525

2626
def teardown_method(self, method):
27-
for m in [m for m in db.Model._decl_class_registry.values()
28-
if isinstance(m, model.DefaultMeta)]:
29-
db.session.query(m).delete()
30-
db.session.commit()
27+
with app.app_context():
28+
for m in [m for m in db.Model._decl_class_registry.values()
29+
if isinstance(m, model.DefaultMeta)]:
30+
db.session.query(m).delete()
31+
db.session.commit()
3132

hobbit_core/response.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ class RespType(TypedDict):
2020
detail: Any
2121

2222

23-
def gen_response(code: int, message: str = '', detail: Optional[str] = None) \
24-
-> RespType:
23+
def gen_response(code: int, message: str = '', detail: Optional[str] = None,
24+
data=None) -> RespType:
2525
"""Func for generate response body.
2626
2727
Args:
2828
code (string, int): Extension to interact with web pages. Default is \
2929
http response ``status_code`` like 200、404.
3030
message (string): For popup windows.
31+
data (object): Real response payload.
3132
detail (object): For debug, detail server error msg.
3233
3334
Returns:
@@ -37,6 +38,7 @@ def gen_response(code: int, message: str = '', detail: Optional[str] = None) \
3738
return {
3839
'code': str(code),
3940
'message': message or RESP_MSGS.get(code, '未知错误'), # type: ignore
41+
'data': data,
4042
'detail': detail,
4143
}
4244

@@ -49,8 +51,9 @@ class Result(Response):
4951
def __init__(self, response=None, status=None, headers=None,
5052
mimetype='application/json', content_type=None,
5153
direct_passthrough=False):
52-
assert sorted(response.keys()) == ['code', 'detail', 'message'], \
53-
'Error response, must include keys: code, detail, message'
54+
assert sorted(response.keys()) == [
55+
'code', 'data', 'detail', 'message'], \
56+
'Error response, must include keys: code, data, detail, message'
5457
super(Result, self).__init__(
5558
response=dumps(response, indent=0, separators=(',', ':')) + '\n',
5659
status=status or self.status, headers=headers, mimetype=mimetype,
@@ -63,9 +66,9 @@ class SuccessResult(Result):
6366
status = 200
6467

6568
def __init__(self, message: str = '', code: Optional[int] = None,
66-
detail: Any = None, status: Optional[int] = None):
69+
detail: Any = None, status: Optional[int] = None, data=None):
6770
super(SuccessResult, self).__init__(
68-
gen_response(code or self.status, message, detail),
71+
gen_response(code or self.status, message, detail, data),
6972
status or self.status)
7073

7174

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def gen_data(data_root='static'):
3232

3333
setup(
3434
name='hobbit-core',
35-
version='2.0.0',
35+
version='2.0.1',
3636
python_requires='>=3.6, <4',
3737
description='Hobbit - A flask project generator.',
3838
long_description=long_description,

tests/test_response.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,23 @@
1111
class TestResponse(BaseTest):
1212

1313
@pytest.mark.parametrize('input_, excepted', [
14-
((1, ), {'code': '1', 'message': '未知错误', 'detail': None}),
15-
((1, '测试', ['1']), {'code': '1', 'message': '测试', 'detail': ['1']})
14+
((1, ), {
15+
'code': '1', 'message': '未知错误', 'detail': None, 'data': None}),
16+
((1, '测试', ['1'], {}), {
17+
'code': '1', 'message': '测试', 'detail': ['1'], 'data': {}}),
18+
((1, '测试', ['1'], []), {
19+
'code': '1', 'message': '测试', 'detail': ['1'], 'data': []}),
1620
])
1721
def test_gen_response(self, input_, excepted):
1822
assert excepted == gen_response(*input_)
1923

2024
def test_result(self):
21-
msg = 'Error response, must include keys: code, detail, message'
25+
msg = 'Error response, must include keys: code, data, detail, message'
2226
with pytest.raises(AssertionError, match=msg):
2327
Result({})
2428

25-
response = {'code': '1', 'message': u'未知错误', 'detail': None}
29+
response = {
30+
'code': '1', 'message': u'未知错误', 'detail': None, 'data': None}
2631
result = Result(response)
2732
assert result.status_code == 200
2833

@@ -31,7 +36,7 @@ def test_result(self):
3136

3237
def test_success_result(self):
3338
# assert status can rewrite
34-
excepted = b'{\n"code":"200",\n"detail":null,\n"message":"message"\n}\n' # NOQA
39+
excepted = b'{\n"code":"200",\n"data":null,\n"detail":null,\n"message":"message"\n}\n' # NOQA
3540
result = SuccessResult('message', status=301)
3641
assert result.status_code == 301
3742
assert excepted == result.data

0 commit comments

Comments
 (0)