Compare commits

..

1 Commits

Author SHA1 Message Date
Adam Hopkins
150d75b7c6 Bump to v20.12 (#1987)
* Bump to v20.12

* Update Changelog
2020-12-28 23:51:23 +02:00
10 changed files with 13 additions and 92 deletions

12
.github/FUNDING.yml vendored
View File

@@ -1,12 +0,0 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: sanic-org # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -1 +1 @@
__version__ = "20.12.4" __version__ = "20.12.0"

View File

@@ -12,7 +12,6 @@ from ssl import Purpose, SSLContext, create_default_context
from traceback import format_exc from traceback import format_exc
from typing import Any, Dict, Optional, Type, Union from typing import Any, Dict, Optional, Type, Union
from urllib.parse import urlencode, urlunparse from urllib.parse import urlencode, urlunparse
from warnings import warn
from sanic import reloader_helpers from sanic import reloader_helpers
from sanic.asgi import ASGIApp from sanic.asgi import ASGIApp
@@ -51,7 +50,6 @@ class Sanic:
strict_slashes=False, strict_slashes=False,
log_config=None, log_config=None,
configure_logging=True, configure_logging=True,
register=None,
): ):
# Get name from previous stack frame # Get name from previous stack frame
@@ -90,10 +88,6 @@ class Sanic:
# Register alternative method names # Register alternative method names
self.go_fast = self.run self.go_fast = self.run
if register is not None:
self.config.REGISTER = register
if self.config.REGISTER:
self.__class__.register_app(self) self.__class__.register_app(self)
@property @property
@@ -495,7 +489,9 @@ class Sanic:
websocket_handler = partial( websocket_handler = partial(
self._websocket_handler, handler, subprotocols=subprotocols self._websocket_handler, handler, subprotocols=subprotocols
) )
websocket_handler.__name__ = handler.__name__ websocket_handler.__name__ = (
"websocket_handler_" + handler.__name__
)
routes.extend( routes.extend(
self.router.add( self.router.add(
uri=uri, uri=uri,
@@ -746,24 +742,6 @@ class Sanic:
kw.update(name=view_name) kw.update(name=view_name)
uri, route = self.router.find_route_by_view_name(view_name, **kw) uri, route = self.router.find_route_by_view_name(view_name, **kw)
# TODO(laggardkernel): this fix should be removed in v21.3.
# Try again without the unnecessary prefix "websocket_handler_",
# which was added by accident on non-blueprint handlers. GH-2021
if not (uri and route) and view_name.startswith("websocket_handler_"):
view_name = view_name[18:]
uri, route = self.router.find_route_by_view_name(view_name, **kw)
if uri and route:
warn(
"The bug of adding unnecessary `websocket_handler_` "
"prefix in param `view_name` for non-blueprint handlers "
"is fixed. This backward support will be removed in "
"v21.3. Please update `Sanic.url_for()` callings in your "
"code soon.",
DeprecationWarning,
stacklevel=2,
)
if not (uri and route): if not (uri and route):
raise URLBuildError( raise URLBuildError(
f"Endpoint with name `{view_name}` was not found" f"Endpoint with name `{view_name}` was not found"

View File

@@ -40,7 +40,6 @@ DEFAULT_CONFIG = {
"PROXIES_COUNT": None, "PROXIES_COUNT": None,
"FORWARDED_FOR_HEADER": "X-Forwarded-For", "FORWARDED_FOR_HEADER": "X-Forwarded-For",
"FALLBACK_ERROR_FORMAT": "html", "FALLBACK_ERROR_FORMAT": "html",
"REGISTER": True,
} }

View File

@@ -265,12 +265,9 @@ class Request:
:type errors: str :type errors: str
:return: RequestParameters :return: RequestParameters
""" """
if ( if not self.parsed_args[
keep_blank_values, (keep_blank_values, strict_parsing, encoding, errors)
strict_parsing, ]:
encoding,
errors,
) not in self.parsed_args:
if self.query_string: if self.query_string:
self.parsed_args[ self.parsed_args[
(keep_blank_values, strict_parsing, encoding, errors) (keep_blank_values, strict_parsing, encoding, errors)
@@ -324,12 +321,9 @@ class Request:
:type errors: str :type errors: str
:return: list :return: list
""" """
if ( if not self.parsed_not_grouped_args[
keep_blank_values, (keep_blank_values, strict_parsing, encoding, errors)
strict_parsing, ]:
encoding,
errors,
) not in self.parsed_not_grouped_args:
if self.query_string: if self.query_string:
self.parsed_not_grouped_args[ self.parsed_not_grouped_args[
(keep_blank_values, strict_parsing, encoding, errors) (keep_blank_values, strict_parsing, encoding, errors)

View File

@@ -57,8 +57,7 @@ setup_kwargs = {
"author": "Sanic Community", "author": "Sanic Community",
"author_email": "admhpkns@gmail.com", "author_email": "admhpkns@gmail.com",
"description": ( "description": (
"A web server and web framework that's written to go fast. " "A web server and web framework that's written to go fast. Build fast. Run fast."
"Build fast. Run fast."
), ),
"long_description": long_description, "long_description": long_description,
"packages": ["sanic"], "packages": ["sanic"],

View File

@@ -3,7 +3,6 @@ import logging
import sys import sys
from inspect import isawaitable from inspect import isawaitable
from os import environ
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
@@ -291,7 +290,6 @@ def test_app_registry_name_reuse():
with pytest.raises(SanicException): with pytest.raises(SanicException):
Sanic("test") Sanic("test")
Sanic.test_mode = True Sanic.test_mode = True
Sanic("test")
def test_app_registry_retrieval(): def test_app_registry_retrieval():
@@ -308,17 +306,3 @@ def test_get_app_does_not_exist_force_create():
assert isinstance( assert isinstance(
Sanic.get_app("does-not-exist", force_create=True), Sanic Sanic.get_app("does-not-exist", force_create=True), Sanic
) )
def test_app_no_registry():
Sanic("no-register", register=False)
with pytest.raises(SanicException):
Sanic.get_app("no-register")
def test_app_no_registry_env():
environ["SANIC_REGISTER"] = "False"
Sanic("no-register")
with pytest.raises(SanicException):
Sanic.get_app("no-register")
del environ["SANIC_REGISTER"]

View File

@@ -289,17 +289,6 @@ def test_query_string(app):
assert request.args.getlist("test1") == ["1"] assert request.args.getlist("test1") == ["1"]
assert request.args.get("test3", default="My value") == "My value" assert request.args.get("test3", default="My value") == "My value"
def test_popped_stays_popped(app):
@app.route("/")
async def handler(request):
return text("OK")
request, response = app.test_client.get(
"/", params=[("test1", "1")]
)
assert request.args.pop("test1") == ["1"]
assert "test1" not in request.args
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_query_string_asgi(app): async def test_query_string_asgi(app):

View File

@@ -348,13 +348,3 @@ def test_methodview_naming(methodview_app):
assert viewone_url == "/view_one" assert viewone_url == "/view_one"
assert viewtwo_url == "/view_two" assert viewtwo_url == "/view_two"
def test_url_for_with_websocket_handlers(app):
# Test for a specific bugfix in GH-2021
@app.websocket("/ws")
async def my_handler(request, ws):
pass
assert app.url_for("my_handler") == "/ws"
assert app.url_for("websocket_handler_my_handler") == "/ws"

View File

@@ -16,7 +16,7 @@ deps =
pytest-dependency pytest-dependency
httpcore==0.11.* httpcore==0.11.*
httpx==0.15.4 httpx==0.15.4
multidict>=5.0,<6.0 chardet==3.*
beautifulsoup4 beautifulsoup4
gunicorn==20.0.4 gunicorn==20.0.4
uvicorn uvicorn