Add error format from config replacement objects
This commit is contained in:
parent
b20b3cb417
commit
af1d289a45
|
@ -1472,7 +1472,9 @@ class Sanic(BaseSanic, metaclass=TouchUpMeta):
|
||||||
async def _startup(self):
|
async def _startup(self):
|
||||||
self.signalize()
|
self.signalize()
|
||||||
self.finalize()
|
self.finalize()
|
||||||
ErrorHandler.finalize(self.error_handler)
|
ErrorHandler.finalize(
|
||||||
|
self.error_handler, fallback=self.config.FALLBACK_ERROR_FORMAT
|
||||||
|
)
|
||||||
TouchUp.run(self)
|
TouchUp.run(self)
|
||||||
|
|
||||||
async def _server_event(
|
async def _server_event(
|
||||||
|
|
|
@ -38,7 +38,14 @@ class ErrorHandler:
|
||||||
self.base = base
|
self.base = base
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def finalize(cls, error_handler):
|
def finalize(cls, error_handler, fallback: Optional[str] = None):
|
||||||
|
if (
|
||||||
|
fallback
|
||||||
|
and fallback != "auto"
|
||||||
|
and error_handler.fallback == "auto"
|
||||||
|
):
|
||||||
|
error_handler.fallback = fallback
|
||||||
|
|
||||||
if not isinstance(error_handler, cls):
|
if not isinstance(error_handler, cls):
|
||||||
error_logger.warning(
|
error_logger.warning(
|
||||||
f"Error handler is non-conforming: {type(error_handler)}"
|
f"Error handler is non-conforming: {type(error_handler)}"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sanic import Sanic
|
from sanic import Sanic
|
||||||
|
from sanic.config import Config
|
||||||
from sanic.errorpages import HTMLRenderer, exception_response
|
from sanic.errorpages import HTMLRenderer, exception_response
|
||||||
from sanic.exceptions import NotFound, SanicException
|
from sanic.exceptions import NotFound, SanicException
|
||||||
from sanic.handlers import ErrorHandler
|
from sanic.handlers import ErrorHandler
|
||||||
|
@ -313,3 +314,31 @@ def test_setting_fallback_to_non_default_raise_warning(app):
|
||||||
app.config.FALLBACK_ERROR_FORMAT = "json"
|
app.config.FALLBACK_ERROR_FORMAT = "json"
|
||||||
|
|
||||||
assert app.error_handler.fallback == "json"
|
assert app.error_handler.fallback == "json"
|
||||||
|
|
||||||
|
|
||||||
|
def test_allow_fallback_error_format_in_config_injection():
|
||||||
|
class MyConfig(Config):
|
||||||
|
FALLBACK_ERROR_FORMAT = "text"
|
||||||
|
|
||||||
|
app = Sanic("test", config=MyConfig())
|
||||||
|
|
||||||
|
@app.route("/error", methods=["GET", "POST"])
|
||||||
|
def err(request):
|
||||||
|
raise Exception("something went wrong")
|
||||||
|
|
||||||
|
request, response = app.test_client.get("/error")
|
||||||
|
assert request.app.error_handler.fallback == "text"
|
||||||
|
assert response.status == 500
|
||||||
|
assert response.content_type == "text/plain; charset=utf-8"
|
||||||
|
|
||||||
|
|
||||||
|
def test_allow_fallback_error_format_in_config_replacement(app):
|
||||||
|
class MyConfig(Config):
|
||||||
|
FALLBACK_ERROR_FORMAT = "text"
|
||||||
|
|
||||||
|
app.config = MyConfig()
|
||||||
|
|
||||||
|
request, response = app.test_client.get("/error")
|
||||||
|
assert request.app.error_handler.fallback == "text"
|
||||||
|
assert response.status == 500
|
||||||
|
assert response.content_type == "text/plain; charset=utf-8"
|
||||||
|
|
Loading…
Reference in New Issue
Block a user