mirror of
https://github.com/ansible/awx.git
synced 2026-02-23 05:55:59 -03:30
Allow parsing null JSON data
This commit is contained in:
@@ -57,8 +57,10 @@ class JSONParser(parsers.JSONParser):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
data = stream.read().decode(encoding)
|
data = stream.read().decode(encoding)
|
||||||
|
if not data:
|
||||||
|
return {}
|
||||||
obj = json.loads(data, object_pairs_hook=OrderedDict)
|
obj = json.loads(data, object_pairs_hook=OrderedDict)
|
||||||
if not isinstance(obj, dict):
|
if not isinstance(obj, dict) and obj is not None:
|
||||||
raise ParseError(_('JSON parse error - not a JSON object'))
|
raise ParseError(_('JSON parse error - not a JSON object'))
|
||||||
return obj
|
return obj
|
||||||
except ValueError as exc:
|
except ValueError as exc:
|
||||||
|
|||||||
29
awx/main/tests/unit/api/test_parsers.py
Normal file
29
awx/main/tests/unit/api/test_parsers.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import pytest
|
||||||
|
import StringIO
|
||||||
|
|
||||||
|
# AWX
|
||||||
|
from awx.api.parsers import JSONParser
|
||||||
|
|
||||||
|
# Django REST Framework
|
||||||
|
from rest_framework.exceptions import ParseError
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'input_, output', [
|
||||||
|
('{"foo": "bar"}', {'foo': 'bar'}),
|
||||||
|
('null', None),
|
||||||
|
('', {}),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_jsonparser_valid_input(input_, output):
|
||||||
|
input_stream = StringIO.StringIO(input_)
|
||||||
|
assert JSONParser().parse(input_stream) == output
|
||||||
|
input_stream.close()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('invalid_input', ['1', '"foobar"', '3.14', '{"foo": "bar",}'])
|
||||||
|
def test_json_parser_invalid_input(invalid_input):
|
||||||
|
input_stream = StringIO.StringIO(invalid_input)
|
||||||
|
with pytest.raises(ParseError):
|
||||||
|
JSONParser().parse(input_stream)
|
||||||
|
input_stream.close()
|
||||||
Reference in New Issue
Block a user