]> git.ipfire.org Git - thirdparty/starlette.git/commitdiff
Allow None fore JSONResponse 556/head
authorMantas <sirexas@gmail.com>
Mon, 17 Jun 2019 14:20:08 +0000 (17:20 +0300)
committerMantas <sirexas@gmail.com>
Mon, 17 Jun 2019 14:20:08 +0000 (17:20 +0300)
Previously `JSONResponse(None)` rendered empty string, but it should be
'null' instead.

This change fixes it.

starlette/responses.py
tests/test_responses.py

index 48afc47ad1802dc684bc58443f6f2b5bfd970e8b..13982db582434ac850986da289acd8a018ee0eb8 100644 (file)
@@ -39,10 +39,7 @@ class Response:
         media_type: str = None,
         background: BackgroundTask = None,
     ) -> None:
-        if content is None:
-            self.body = b""
-        else:
-            self.body = self.render(content)
+        self.body = self.render(content)
         self.status_code = status_code
         if media_type is not None:
             self.media_type = media_type
@@ -50,6 +47,8 @@ class Response:
         self.init_headers(headers)
 
     def render(self, content: typing.Any) -> bytes:
+        if content is None:
+            return b""
         if isinstance(content, bytes):
             return content
         return content.encode(self.charset)
index 3d5de413f4b63f13569e8902e794407045953c18..c7ca0ac0a8b80dd210486848217f363749d69ddf 100644 (file)
@@ -12,6 +12,7 @@ from starlette.responses import (
     Response,
     StreamingResponse,
     UJSONResponse,
+    JSONResponse,
 )
 from starlette.testclient import TestClient
 
@@ -46,6 +47,16 @@ def test_ujson_response():
     assert response.json() == {"hello": "world"}
 
 
+def test_json_none_response():
+    async def app(scope, receive, send):
+        response = JSONResponse(None)
+        await response(scope, receive, send)
+
+    client = TestClient(app)
+    response = client.get("/")
+    assert response.json() is None
+
+
 def test_redirect_response():
     async def app(scope, receive, send):
         if scope["path"] == "/":