Skip to content

Commit 1a1104d

Browse files
authored
Merge pull request #266 from aio-libs/fix-trafaret-as-dict
Fix as_dict trafaret issue
2 parents 5ffd7f4 + cc2a5c7 commit 1a1104d

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

aiohttp_admin/backends/mongo_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from trafaret.contrib.object_id import MongoId
44

55
from ..exceptions import JsonValidaitonError
6-
from ..utils import MULTI_FIELD_TEXT_QUERY
6+
from ..utils import MULTI_FIELD_TEXT_QUERY, as_dict
77

88

99
__all__ = ['create_validator', 'create_filter']
@@ -72,7 +72,7 @@ def _check_value(column_traf_map, field_name, value):
7272
try:
7373
value = apply_trafaret(trafaret, value)
7474
except t.DataError as exc:
75-
raise JsonValidaitonError(**exc.as_dict())
75+
raise JsonValidaitonError(**as_dict(exc))
7676

7777
return value
7878

aiohttp_admin/backends/sa_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from trafaret.contrib.rfc_3339 import DateTime
88

99
from ..exceptions import JsonValidaitonError
10-
from ..utils import MULTI_FIELD_TEXT_QUERY
10+
from ..utils import MULTI_FIELD_TEXT_QUERY, as_dict
1111

1212

1313
__all__ = ['table_to_trafaret', 'create_filter']
@@ -149,7 +149,7 @@ def check_value(column, value):
149149
value = trafaret.check_and_return(value)
150150

151151
except t.DataError as exc:
152-
raise JsonValidaitonError(**exc.as_dict())
152+
raise JsonValidaitonError(**as_dict(exc))
153153
return value
154154

155155

aiohttp_admin/utils.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def validate_query_structure(query):
9898
q = ListQuery(query_dict)
9999
except t.DataError as exc:
100100
msg = '_filters query invalid'
101-
raise JsonValidaitonError(msg, **exc.as_dict())
101+
raise JsonValidaitonError(msg, **as_dict(exc))
102102

103103
return q
104104

@@ -113,7 +113,7 @@ def validate_payload(raw_payload, schema):
113113
try:
114114
data = schema(parsed)
115115
except t.DataError as exc:
116-
raise JsonValidaitonError(**exc.as_dict())
116+
raise JsonValidaitonError(**as_dict(exc))
117117
return data
118118

119119

@@ -157,3 +157,10 @@ def calc_pagination(query_dict, default_sort_direction):
157157
offset = (page - 1) * per_page
158158
limit = per_page
159159
return PagingParams(limit, offset, sort_field, sort_dir)
160+
161+
162+
def as_dict(exc, value=None):
163+
result = exc.as_dict(value)
164+
if isinstance(result, str):
165+
return {"error": result}
166+
return result

tests/test_utils.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from aiohttp_admin.exceptions import JsonValidaitonError
88
from aiohttp_admin.utils import (validate_query_structure, jsonify,
9-
validate_payload)
9+
validate_payload, as_dict)
1010

1111

1212
def test_validate_query_empty_defaults():
@@ -102,3 +102,15 @@ def test_validate_payload_not_valid_schema():
102102

103103
error = json.loads(ctx.value.text)
104104
assert error['error'] == 'Invalid json payload'
105+
106+
107+
def test_as_dict():
108+
exc = t.DataError()
109+
resp = as_dict(exc)
110+
assert isinstance(resp, dict)
111+
112+
exc = t.DataError()
113+
assert isinstance(exc.as_dict("boom"), str)
114+
115+
resp = as_dict(exc, 'boom')
116+
assert isinstance(resp, dict)

0 commit comments

Comments
 (0)