diff --git a/pypermedia/siren.py b/pypermedia/siren.py index e14d190..fbd6ab1 100644 --- a/pypermedia/siren.py +++ b/pypermedia/siren.py @@ -32,6 +32,9 @@ def _check_and_decode_response(response): if response.status_code > 299 or response.status_code < 200: raise UnexpectedStatusError(message='Received an unexpected status code of "{0}"! Unable to construct siren objects.'.format(response.status_code)) + if response.status_code == 204: + return None + response = response.text if not response: raise MalformedSirenError(message='Parameter "response" object had empty response content. Unable to construct siren objects.') diff --git a/tests/unit/test_siren.py b/tests/unit/test_siren.py index 44246c5..1f314dc 100644 --- a/tests/unit/test_siren.py +++ b/tests/unit/test_siren.py @@ -40,6 +40,17 @@ def test_check_and_decode_empty_text(self): resp = mock.Mock(status_code=200, text='') self.assertRaises(MalformedSirenError, _check_and_decode_response, resp) + def test_check_and_decode_no_content(self): + """ + Tests that no entity is created when + status code is 204. + """ + resp = mock.Mock(status_code=204, text=None) + assert _check_and_decode_response(resp) is None + + resp = mock.Mock(status_code=204, text='') + assert _check_and_decode_response(resp) is None + def test_construct_link(self): builder = SirenBuilder() link = builder._construct_link(dict(rel=['rel'], href='whocares'))