Resolve headers on different renderers - Issue 2749 (#2774)
* Resolve headers on different renderers - Issue 2749 * Make pretty
This commit is contained in:
parent
c17230ef94
commit
c21999a248
|
@ -92,8 +92,10 @@ class BaseRenderer:
|
|||
self.full
|
||||
if self.debug and not getattr(self.exception, "quiet", False)
|
||||
else self.minimal
|
||||
)
|
||||
return output()
|
||||
)()
|
||||
output.status = self.status
|
||||
output.headers.update(self.headers)
|
||||
return output
|
||||
|
||||
def minimal(self) -> HTTPResponse: # noqa
|
||||
"""
|
||||
|
@ -125,7 +127,7 @@ class HTMLRenderer(BaseRenderer):
|
|||
request=self.request,
|
||||
exc=self.exception,
|
||||
)
|
||||
return html(page.render(), status=self.status, headers=self.headers)
|
||||
return html(page.render())
|
||||
|
||||
def minimal(self) -> HTTPResponse:
|
||||
return self.full()
|
||||
|
@ -146,8 +148,7 @@ class TextRenderer(BaseRenderer):
|
|||
text=self.text,
|
||||
bar=("=" * len(self.title)),
|
||||
body=self._generate_body(full=True),
|
||||
),
|
||||
status=self.status,
|
||||
)
|
||||
)
|
||||
|
||||
def minimal(self) -> HTTPResponse:
|
||||
|
@ -157,9 +158,7 @@ class TextRenderer(BaseRenderer):
|
|||
text=self.text,
|
||||
bar=("=" * len(self.title)),
|
||||
body=self._generate_body(full=False),
|
||||
),
|
||||
status=self.status,
|
||||
headers=self.headers,
|
||||
)
|
||||
)
|
||||
|
||||
@property
|
||||
|
@ -218,11 +217,11 @@ class JSONRenderer(BaseRenderer):
|
|||
|
||||
def full(self) -> HTTPResponse:
|
||||
output = self._generate_output(full=True)
|
||||
return json(output, status=self.status, dumps=self.dumps)
|
||||
return json(output, dumps=self.dumps)
|
||||
|
||||
def minimal(self) -> HTTPResponse:
|
||||
output = self._generate_output(full=False)
|
||||
return json(output, status=self.status, dumps=self.dumps)
|
||||
return json(output, dumps=self.dumps)
|
||||
|
||||
def _generate_output(self, *, full):
|
||||
output = {
|
||||
|
|
|
@ -527,3 +527,26 @@ def test_guess_mime_logging(
|
|||
]
|
||||
|
||||
assert logmsg == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"format,expected",
|
||||
(
|
||||
("html", "text/html; charset=utf-8"),
|
||||
("text", "text/plain; charset=utf-8"),
|
||||
("json", "application/json"),
|
||||
),
|
||||
)
|
||||
def test_exception_header_on_renderers(app: Sanic, format, expected):
|
||||
app.config.FALLBACK_ERROR_FORMAT = format
|
||||
|
||||
@app.get("/test")
|
||||
def test(request):
|
||||
raise SanicException(
|
||||
"test", status_code=400, headers={"exception": "test"}
|
||||
)
|
||||
|
||||
_, response = app.test_client.get("/test")
|
||||
assert response.status == 400
|
||||
assert response.headers.get("exception") == "test"
|
||||
assert response.content_type == expected
|
||||
|
|
Loading…
Reference in New Issue
Block a user