def test_customized_dumps(self): """ A customized dumps applies to both pretty and non-pretty responses. """ renderer = renderers.JSON(default=lambda obj: 23) render = renderers.bind(renderer, to=lambda _: {"foo": object()}) request = Request( url=URL(path=b"/"), headers=Headers([("Accept", ["application/json"])]), ) self.assertEqual( render(request), Response( content=b'{"foo":23}', headers=Headers([("Content-Type", ["application/json"])]), ), ) self.assertEqual( render(Request(url=URL(path=b"/"))), Response( content=b'{\n "foo": 23\n}', headers=Headers([("Content-Type", ["application/json"])]), ), )
def test_dict_sort_keys(self): content = OrderedDict([("foo", "bar"), ("baz", "quux")]) render = renderers.bind(renderers.JSON(), to=lambda _: content) request = Request( url=URL(path=b"/"), headers=Headers([("Accept", ["*/*"])]), ) self.assertPretty(content, render(request))
def test_it_dumps_practical_json_for_machines(self): content = ["a", "b", "c"] render = renderers.bind(renderers.JSON(), to=lambda _: content) request = Request( url=URL(path=b"/"), headers=Headers([("Accept", ["application/json"])]), ) self.assertNotPretty(content, render(request))
def test_it_dumps_pretty_json_for_humans(self): content = ["a", "b", "c"] render = renderers.bind(renderers.JSON(), to=lambda _: content) request = Request( url=URL(path=b"/"), headers=Headers([("Accept", ["*/*"])]), ) self.assertPretty(content, render(request))
def test_separators(self): render = renderers.bind(renderers.JSON(), to=lambda _: dict(a=1, b=2)) request = Request( url=URL(path=b"/"), headers=Headers([("Accept", ["application/json"])]), ) self.assertEqual( render(request), Response( content=b'{"a":1,"b":2}', headers=Headers([("Content-Type", ["application/json"])]), ), )
def test_separators(self): render = renderers.bind(renderers.JSON(), to=lambda _: dict(a=1, b=2)) request = Request( url=URL(path=[u""]), headers=Headers([("Accept", ["application/json"])]), ) response = render(request) self.assertEqual( response, Response( content=response.content, headers=Headers([("Content-Type", ["application/json"])]), ), ) self.assertNotIn(response.content, " ") self.assertEqual(json.loads(response.content), {"a": 1, "b": 2})
def test_it_dumps_pretty_json_for_humans_no_accept_header(self): content = ["a", "b", "c"] render = renderers.bind(renderers.JSON(), to=lambda _: content) self.assertPretty(content, render(Request(url=URL(path=b"/"))))