From b2a1bc69f536b7ab620a0c631fcbe450eae356b6 Mon Sep 17 00:00:00 2001 From: Adam Hopkins Date: Wed, 8 Dec 2021 21:01:28 +0200 Subject: [PATCH] Make warnings for DeprecationWarning consistent (#2332) --- sanic/app.py | 3 +++ sanic/handlers.py | 20 +++++++------- sanic/server/protocols/websocket_protocol.py | 28 +++++++++----------- tests/test_exceptions_handler.py | 14 +++++----- 4 files changed, 32 insertions(+), 33 deletions(-) diff --git a/sanic/app.py b/sanic/app.py index fd9ebd14ff..e78e53da8f 100644 --- a/sanic/app.py +++ b/sanic/app.py @@ -42,6 +42,7 @@ Union, ) from urllib.parse import urlencode, urlunparse +from warnings import filterwarnings from sanic_routing.exceptions import ( # type: ignore FinalizationError, @@ -95,6 +96,8 @@ if OS_IS_WINDOWS: enable_windows_color_support() +filterwarnings("once", category=DeprecationWarning) + class Sanic(BaseSanic, metaclass=TouchUpMeta): """ diff --git a/sanic/handlers.py b/sanic/handlers.py index 046e56e18c..8c543c6dac 100644 --- a/sanic/handlers.py +++ b/sanic/handlers.py @@ -1,5 +1,6 @@ from inspect import signature from typing import Dict, List, Optional, Tuple, Type +from warnings import warn from sanic.errorpages import BaseRenderer, HTMLRenderer, exception_response from sanic.exceptions import ( @@ -53,16 +54,15 @@ def finalize(cls, error_handler, fallback: Optional[str] = None): sig = signature(error_handler.lookup) if len(sig.parameters) == 1: - error_logger.warning( - DeprecationWarning( - "You are using a deprecated error handler. The lookup " - "method should accept two positional parameters: " - "(exception, route_name: Optional[str]). " - "Until you upgrade your ErrorHandler.lookup, Blueprint " - "specific exceptions will not work properly. Beginning " - "in v22.3, the legacy style lookup method will not " - "work at all." - ), + warn( + "You are using a deprecated error handler. The lookup " + "method should accept two positional parameters: " + "(exception, route_name: Optional[str]). " + "Until you upgrade your ErrorHandler.lookup, Blueprint " + "specific exceptions will not work properly. Beginning " + "in v22.3, the legacy style lookup method will not " + "work at all.", + DeprecationWarning, ) error_handler._lookup = error_handler._legacy_lookup diff --git a/sanic/server/protocols/websocket_protocol.py b/sanic/server/protocols/websocket_protocol.py index 6f349eccf0..ffc0e8a4d1 100644 --- a/sanic/server/protocols/websocket_protocol.py +++ b/sanic/server/protocols/websocket_protocol.py @@ -1,4 +1,5 @@ from typing import TYPE_CHECKING, Optional, Sequence, cast +from warnings import warn from websockets.connection import CLOSED, CLOSING, OPEN from websockets.server import ServerConnection @@ -34,27 +35,24 @@ def __init__( self.websocket_max_size = websocket_max_size if websocket_max_queue is not None and websocket_max_queue > 0: # TODO: Reminder remove this warning in v22.3 - error_logger.warning( - DeprecationWarning( - "Websocket no longer uses queueing, so websocket_max_queue" - " is no longer required." - ) + warn( + "Websocket no longer uses queueing, so websocket_max_queue" + " is no longer required.", + DeprecationWarning, ) if websocket_read_limit is not None and websocket_read_limit > 0: # TODO: Reminder remove this warning in v22.3 - error_logger.warning( - DeprecationWarning( - "Websocket no longer uses read buffers, so " - "websocket_read_limit is not required." - ) + warn( + "Websocket no longer uses read buffers, so " + "websocket_read_limit is not required.", + DeprecationWarning, ) if websocket_write_limit is not None and websocket_write_limit > 0: # TODO: Reminder remove this warning in v22.3 - error_logger.warning( - DeprecationWarning( - "Websocket no longer uses write buffers, so " - "websocket_write_limit is not required." - ) + warn( + "Websocket no longer uses write buffers, so " + "websocket_write_limit is not required.", + DeprecationWarning, ) self.websocket_ping_interval = websocket_ping_interval self.websocket_ping_timeout = websocket_ping_timeout diff --git a/tests/test_exceptions_handler.py b/tests/test_exceptions_handler.py index 9ad595fc18..371baa8dd9 100644 --- a/tests/test_exceptions_handler.py +++ b/tests/test_exceptions_handler.py @@ -218,20 +218,18 @@ def lookup(self, exception): exception_handler_app.error_handler = CustomErrorHandler() - with caplog.at_level(logging.WARNING): - _, response = exception_handler_app.test_client.get("/1") - - for record in caplog.records: - if record.message.startswith("You are"): - break - - assert record.message == ( + message = ( "You are using a deprecated error handler. The lookup method should " "accept two positional parameters: (exception, route_name: " "Optional[str]). Until you upgrade your ErrorHandler.lookup, " "Blueprint specific exceptions will not work properly. Beginning in " "v22.3, the legacy style lookup method will not work at all." ) + with pytest.warns(DeprecationWarning) as record: + _, response = exception_handler_app.test_client.get("/1") + + assert len(record) == 1 + assert record[0].message.args[0] == message assert response.status == 400