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
|
self.full
|
||||||
if self.debug and not getattr(self.exception, "quiet", False)
|
if self.debug and not getattr(self.exception, "quiet", False)
|
||||||
else self.minimal
|
else self.minimal
|
||||||
)
|
)()
|
||||||
return output()
|
output.status = self.status
|
||||||
|
output.headers.update(self.headers)
|
||||||
|
return output
|
||||||
|
|
||||||
def minimal(self) -> HTTPResponse: # noqa
|
def minimal(self) -> HTTPResponse: # noqa
|
||||||
"""
|
"""
|
||||||
|
@ -125,7 +127,7 @@ class HTMLRenderer(BaseRenderer):
|
||||||
request=self.request,
|
request=self.request,
|
||||||
exc=self.exception,
|
exc=self.exception,
|
||||||
)
|
)
|
||||||
return html(page.render(), status=self.status, headers=self.headers)
|
return html(page.render())
|
||||||
|
|
||||||
def minimal(self) -> HTTPResponse:
|
def minimal(self) -> HTTPResponse:
|
||||||
return self.full()
|
return self.full()
|
||||||
|
@ -146,8 +148,7 @@ class TextRenderer(BaseRenderer):
|
||||||
text=self.text,
|
text=self.text,
|
||||||
bar=("=" * len(self.title)),
|
bar=("=" * len(self.title)),
|
||||||
body=self._generate_body(full=True),
|
body=self._generate_body(full=True),
|
||||||
),
|
)
|
||||||
status=self.status,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def minimal(self) -> HTTPResponse:
|
def minimal(self) -> HTTPResponse:
|
||||||
|
@ -157,9 +158,7 @@ class TextRenderer(BaseRenderer):
|
||||||
text=self.text,
|
text=self.text,
|
||||||
bar=("=" * len(self.title)),
|
bar=("=" * len(self.title)),
|
||||||
body=self._generate_body(full=False),
|
body=self._generate_body(full=False),
|
||||||
),
|
)
|
||||||
status=self.status,
|
|
||||||
headers=self.headers,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -218,11 +217,11 @@ class JSONRenderer(BaseRenderer):
|
||||||
|
|
||||||
def full(self) -> HTTPResponse:
|
def full(self) -> HTTPResponse:
|
||||||
output = self._generate_output(full=True)
|
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:
|
def minimal(self) -> HTTPResponse:
|
||||||
output = self._generate_output(full=False)
|
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):
|
def _generate_output(self, *, full):
|
||||||
output = {
|
output = {
|
||||||
|
|
|
@ -527,3 +527,26 @@ def test_guess_mime_logging(
|
||||||
]
|
]
|
||||||
|
|
||||||
assert logmsg == expected
|
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