Merge branch 'master' into asgi-refactor-attempt

This commit is contained in:
Adam Hopkins 2019-05-12 22:57:02 +03:00
commit 4767a67acd
5 changed files with 80 additions and 10 deletions

View File

@ -34,28 +34,84 @@ the document that explains the way `sanic` manages dependencies inside the `setu
| extras_require['dev'] | Additional Development requirements to add contributing | pip3 install -e '.[dev]' | | extras_require['dev'] | Additional Development requirements to add contributing | pip3 install -e '.[dev]' |
| extras_require['docs'] | Dependencies required to enable building and enhancing sanic documentation | pip3 install -e '.[docs]' | | extras_require['docs'] | Dependencies required to enable building and enhancing sanic documentation | pip3 install -e '.[docs]' |
## Running tests ## Running all tests
To run the tests for Sanic it is recommended to use tox like so:
To run the tests for sanic it is recommended to use tox like so:
```bash ```bash
tox tox
``` ```
See it's that simple! See it's that simple!
`tox.ini` contains different environments. Running `tox` without any arguments will
run all unittests, perform lint and other checks.
## Run unittests :
`tox` environment -> `[testenv]`
To execute only unittests, run `tox` with environment like so:
```bash
tox -e py36 -v -- tests/test_config.py
# or
tox -e py37 -v -- tests/test_config.py
```
## Run lint checks :
`tox` environment -> `[testenv:lint]`
Permform `flake8`, `black` and `isort` checks.
```bash
tox -e lint
```
## Run other checks :
`tox` environment -> `[testenv:check]`
Perform other checks.
```bash
tox -e check
```
# Code Style
To maintain the code consistency, Sanic uses following tools.
1. [isort](https://github.com/timothycrosley/isort)
2. [black](https://github.com/python/black)
2. [flake8](https://github.com/PyCQA/flake8)
## isort
`isort` sorts Python imports. It divides imports into three
categories sorted each in alphabetical order.
1. built-in
2. third-party
3. project-specific
## black
`black` is a Python code formatter.
## flake8
`flake8` is a Python style guide that wraps following tools into one.
1. PyFlakes
2. pycodestyle
3. Ned Batchelder's McCabe script
`isort`, `black` and `flake8` checks are performed during `tox` lint checks.
Refer [tox](https://tox.readthedocs.io/en/latest/index.html) documentation for more details.
## Pull requests! ## Pull requests!
So the pull request approval rules are pretty simple: So the pull request approval rules are pretty simple:
1. All pull requests must pass unit tests. 1. All pull requests must pass unit tests.
2. All pull requests must be reviewed and approved by at least 2. All pull requests must be reviewed and approved by at least
one current collaborator on the project. one current collaborator on the project.
3. All pull requests must pass flake8 checks. 3. All pull requests must pass flake8 checks.
4. All pull requests must be consistent with the existing code. 4. All pull requests must be consistent with the existing code.
5. If you decide to remove/change anything from any common interface 5. If you decide to remove/change anything from any common interface
a deprecation message should accompany it. a deprecation message should accompany it.
6. If you implement a new feature you should have at least one unit 6. If you implement a new feature you should have at least one unit
test to accompany it. test to accompany it.
7. An example must be one of the following: 7. An example must be one of the following:
* Example of how to use Sanic * Example of how to use Sanic
* Example of how to use Sanic extensions * Example of how to use Sanic extensions

View File

@ -16,7 +16,7 @@ Sanic | Build fast. Run fast.
* - Package * - Package
- | |PyPI| |PyPI version| |Wheel| |Supported implementations| |Code style black| - | |PyPI| |PyPI version| |Wheel| |Supported implementations| |Code style black|
* - Support * - Support
- | |Forums| |Join the chat at https://gitter.im/sanic-python/Lobby| - | |Forums| |Join the chat at https://gitter.im/sanic-python/Lobby| |Awesome|
* - Stats * - Stats
- | |Downloads| - | |Downloads|
@ -44,6 +44,9 @@ Sanic | Build fast. Run fast.
.. |Supported implementations| image:: https://img.shields.io/pypi/implementation/sanic.svg .. |Supported implementations| image:: https://img.shields.io/pypi/implementation/sanic.svg
:alt: Supported implementations :alt: Supported implementations
:target: https://pypi.python.org/pypi/sanic :target: https://pypi.python.org/pypi/sanic
.. |Awesome| image:: https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg
:alt: Awesome Sanic List
:target: https://github.com/mekicha/awesome-sanic
.. |Downloads| image:: https://pepy.tech/badge/sanic/month .. |Downloads| image:: https://pepy.tech/badge/sanic/month
:alt: Downloads :alt: Downloads
:target: https://pepy.tech/project/sanic :target: https://pepy.tech/project/sanic

View File

@ -13,6 +13,7 @@ dependencies:
- sphinx==1.8.3 - sphinx==1.8.3
- sphinx_rtd_theme==0.4.2 - sphinx_rtd_theme==0.4.2
- recommonmark==0.5.0 - recommonmark==0.5.0
- requests-async==0.4.0
- sphinxcontrib-asyncio>=0.2.0 - sphinxcontrib-asyncio>=0.2.0
- docutils==0.14 - docutils==0.14
- pygments==2.3.1 - pygments==2.3.1

View File

@ -557,12 +557,22 @@ class Sanic:
This method provides the app user a mechanism by which an already This method provides the app user a mechanism by which an already
existing route can be removed from the :class:`Sanic` object existing route can be removed from the :class:`Sanic` object
.. warning::
remove_route is deprecated in v19.06 and will be removed
from future versions.
:param uri: URL Path to be removed from the app :param uri: URL Path to be removed from the app
:param clean_cache: Instruct sanic if it needs to clean up the LRU :param clean_cache: Instruct sanic if it needs to clean up the LRU
route cache route cache
:param host: IP address or FQDN specific to the host :param host: IP address or FQDN specific to the host
:return: None :return: None
""" """
warnings.warn(
"remove_route is deprecated and will be removed "
"from future versions.",
DeprecationWarning,
stacklevel=2,
)
self.router.remove(uri, clean_cache, host) self.router.remove(uri, clean_cache, host)
# Decorator # Decorator

View File

@ -842,6 +842,8 @@ def serve_multiple(server_settings, workers):
server_settings["host"] = None server_settings["host"] = None
server_settings["port"] = None server_settings["port"] = None
processes = []
def sig_handler(signal, frame): def sig_handler(signal, frame):
logger.info("Received signal %s. Shutting down.", Signals(signal).name) logger.info("Received signal %s. Shutting down.", Signals(signal).name)
for process in processes: for process in processes:
@ -850,8 +852,6 @@ def serve_multiple(server_settings, workers):
signal_func(SIGINT, lambda s, f: sig_handler(s, f)) signal_func(SIGINT, lambda s, f: sig_handler(s, f))
signal_func(SIGTERM, lambda s, f: sig_handler(s, f)) signal_func(SIGTERM, lambda s, f: sig_handler(s, f))
processes = []
for _ in range(workers): for _ in range(workers):
process = Process(target=serve, kwargs=server_settings) process = Process(target=serve, kwargs=server_settings)
process.daemon = True process.daemon = True