diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 77e9e4c5..1db3cdd4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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['docs'] | Dependencies required to enable building and enhancing sanic documentation | pip3 install -e '.[docs]' | -## Running tests - -To run the tests for sanic it is recommended to use tox like so: +## Running all tests +To run the tests for Sanic it is recommended to use tox like so: ```bash tox ``` - 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! So the pull request approval rules are pretty simple: 1. All pull requests must pass unit tests. 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. 4. All pull requests must be consistent with the existing code. 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 -test to accompany it. + test to accompany it. 7. An example must be one of the following: * Example of how to use Sanic * Example of how to use Sanic extensions diff --git a/README.rst b/README.rst index f63d9707..d98e8736 100644 --- a/README.rst +++ b/README.rst @@ -16,7 +16,7 @@ Sanic | Build fast. Run fast. * - Package - | |PyPI| |PyPI version| |Wheel| |Supported implementations| |Code style black| * - 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 - | |Downloads| @@ -44,6 +44,9 @@ Sanic | Build fast. Run fast. .. |Supported implementations| image:: https://img.shields.io/pypi/implementation/sanic.svg :alt: Supported implementations :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 :alt: Downloads :target: https://pepy.tech/project/sanic diff --git a/environment.yml b/environment.yml index aeca7c38..e9b832b4 100644 --- a/environment.yml +++ b/environment.yml @@ -13,6 +13,7 @@ dependencies: - sphinx==1.8.3 - sphinx_rtd_theme==0.4.2 - recommonmark==0.5.0 + - requests-async==0.4.0 - sphinxcontrib-asyncio>=0.2.0 - docutils==0.14 - pygments==2.3.1 diff --git a/sanic/app.py b/sanic/app.py index e0358a8d..39ad2ec5 100644 --- a/sanic/app.py +++ b/sanic/app.py @@ -557,12 +557,22 @@ class Sanic: This method provides the app user a mechanism by which an already 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 clean_cache: Instruct sanic if it needs to clean up the LRU route cache :param host: IP address or FQDN specific to the host :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) # Decorator diff --git a/sanic/server.py b/sanic/server.py index 81b68cb5..a2038e3c 100644 --- a/sanic/server.py +++ b/sanic/server.py @@ -842,6 +842,8 @@ def serve_multiple(server_settings, workers): server_settings["host"] = None server_settings["port"] = None + processes = [] + def sig_handler(signal, frame): logger.info("Received signal %s. Shutting down.", Signals(signal).name) 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(SIGTERM, lambda s, f: sig_handler(s, f)) - processes = [] - for _ in range(workers): process = Process(target=serve, kwargs=server_settings) process.daemon = True