Merge pull request #2036 from sanic-org/drop-36

Remove Python 3.6 support
This commit is contained in:
Ashley Sommer 2021-02-22 09:13:07 +10:00 committed by GitHub
commit 6b86921c7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 10 additions and 47 deletions

View File

@ -5,12 +5,6 @@ cache:
- $HOME/.cache/pip - $HOME/.cache/pip
matrix: matrix:
include: include:
- env: TOX_ENV=py36
python: 3.6
name: "Python 3.6 with Extensions"
- env: TOX_ENV=py36-no-ext
python: 3.6
name: "Python 3.6 without Extensions"
- env: TOX_ENV=py37 - env: TOX_ENV=py37
python: 3.7 python: 3.7
dist: xenial dist: xenial
@ -41,9 +35,6 @@ matrix:
dist: bionic dist: bionic
sudo: true sudo: true
name: "Python 3.9 without Extensions" name: "Python 3.9 without Extensions"
- env: TOX_ENV=type-checking
python: 3.6
name: "Python 3.6 Type checks"
- env: TOX_ENV=type-checking - env: TOX_ENV=type-checking
python: 3.7 python: 3.7
name: "Python 3.7 Type checks" name: "Python 3.7 Type checks"
@ -54,17 +45,6 @@ matrix:
python: 3.9 python: 3.9
dist: bionic dist: bionic
name: "Python 3.9 Type checks" name: "Python 3.9 Type checks"
- env: TOX_ENV=lint
python: 3.6
name: "Python 3.6 Linter checks"
- env: TOX_ENV=check
python: 3.6
name: "Python 3.6 Package checks"
- env: TOX_ENV=security
python: 3.6
dist: xenial
sudo: true
name: "Python 3.6 Bandit security scan"
- env: TOX_ENV=security - env: TOX_ENV=security
python: 3.7 python: 3.7
dist: xenial dist: xenial

View File

@ -130,6 +130,7 @@ And, we can verify it is working: ``curl localhost:8000 -i``
**Now, let's go build something fast!** **Now, let's go build something fast!**
Minimum Python version is 3.7. If you need Python 3.6 support, please use v20.12LTS.
Documentation Documentation
------------- -------------

View File

@ -4,7 +4,6 @@ import os
import secrets import secrets
import socket import socket
import stat import stat
import sys
from asyncio import CancelledError from asyncio import CancelledError
from functools import partial from functools import partial
@ -37,7 +36,9 @@ class Signal:
class ConnInfo: class ConnInfo:
"""Local and remote addresses and SSL status info.""" """
Local and remote addresses and SSL status info.
"""
__slots__ = ( __slots__ = (
"sockname", "sockname",
@ -125,7 +126,6 @@ class HttpProtocol(asyncio.Protocol):
): ):
asyncio.set_event_loop(loop) asyncio.set_event_loop(loop)
self.loop = loop self.loop = loop
deprecated_loop = self.loop if sys.version_info < (3, 7) else None
self.app = app self.app = app
self.url = None self.url = None
self.transport = None self.transport = None
@ -147,8 +147,8 @@ class HttpProtocol(asyncio.Protocol):
self.state = state if state else {} self.state = state if state else {}
if "requests_count" not in self.state: if "requests_count" not in self.state:
self.state["requests_count"] = 0 self.state["requests_count"] = 0
self._data_received = asyncio.Event(loop=deprecated_loop) self._data_received = asyncio.Event()
self._can_write = asyncio.Event(loop=deprecated_loop) self._can_write = asyncio.Event()
self._can_write.set() self._can_write.set()
self._exception = None self._exception = None
self._unix = unix self._unix = unix

View File

@ -64,12 +64,11 @@ setup_kwargs = {
"packages": ["sanic"], "packages": ["sanic"],
"package_data": {"sanic": ["py.typed"]}, "package_data": {"sanic": ["py.typed"]},
"platforms": "any", "platforms": "any",
"python_requires": ">=3.6", "python_requires": ">=3.7",
"classifiers": [ "classifiers": [
"Development Status :: 4 - Beta", "Development Status :: 4 - Beta",
"Environment :: Web Environment", "Environment :: Web Environment",
"License :: OSI Approved :: MIT License", "License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.9",
@ -81,7 +80,7 @@ env_dependency = (
'; sys_platform != "win32" ' 'and implementation_name == "cpython"' '; sys_platform != "win32" ' 'and implementation_name == "cpython"'
) )
ujson = "ujson>=1.35" + env_dependency ujson = "ujson>=1.35" + env_dependency
uvloop = "uvloop>=0.5.3,<0.15.0" + env_dependency uvloop = "uvloop>=0.5.3" + env_dependency
requirements = [ requirements = [
"sanic-routing", "sanic-routing",

View File

@ -32,9 +32,6 @@ def test_app_loop_running(app):
assert response.text == "pass" assert response.text == "pass"
@pytest.mark.skipif(
sys.version_info < (3, 7), reason="requires python3.7 or higher"
)
def test_create_asyncio_server(app): def test_create_asyncio_server(app):
if not uvloop_installed(): if not uvloop_installed():
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
@ -44,9 +41,6 @@ def test_create_asyncio_server(app):
assert srv.is_serving() is True assert srv.is_serving() is True
@pytest.mark.skipif(
sys.version_info < (3, 7), reason="requires python3.7 or higher"
)
def test_asyncio_server_no_start_serving(app): def test_asyncio_server_no_start_serving(app):
if not uvloop_installed(): if not uvloop_installed():
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()
@ -59,9 +53,6 @@ def test_asyncio_server_no_start_serving(app):
assert srv.is_serving() is False assert srv.is_serving() is False
@pytest.mark.skipif(
sys.version_info < (3, 7), reason="requires python3.7 or higher"
)
def test_asyncio_server_start_serving(app): def test_asyncio_server_start_serving(app):
if not uvloop_installed(): if not uvloop_installed():
loop = asyncio.get_event_loop() loop = asyncio.get_event_loop()

View File

@ -86,11 +86,7 @@ def test_listeners_triggered():
with pytest.warns(UserWarning): with pytest.warns(UserWarning):
server.run() server.run()
all_tasks = ( all_tasks = asyncio.all_tasks(asyncio.get_event_loop())
asyncio.Task.all_tasks()
if sys.version_info < (3, 7)
else asyncio.all_tasks(asyncio.get_event_loop())
)
for task in all_tasks: for task in all_tasks:
task.cancel() task.cancel()
@ -140,11 +136,7 @@ def test_listeners_triggered_async(app):
with pytest.warns(UserWarning): with pytest.warns(UserWarning):
server.run() server.run()
all_tasks = ( all_tasks = asyncio.all_tasks(asyncio.get_event_loop())
asyncio.Task.all_tasks()
if sys.version_info < (3, 7)
else asyncio.all_tasks(asyncio.get_event_loop())
)
for task in all_tasks: for task in all_tasks:
task.cancel() task.cancel()