2019-09-16 18:59:16 +01:00
|
|
|
import asyncio
|
2017-01-04 06:23:35 +00:00
|
|
|
import signal
|
|
|
|
|
2020-03-26 04:42:46 +00:00
|
|
|
from contextlib import closing
|
|
|
|
from socket import socket
|
|
|
|
|
2017-01-04 06:23:35 +00:00
|
|
|
import pytest
|
|
|
|
|
2021-01-19 13:54:20 +00:00
|
|
|
from sanic_testing.testing import HOST, PORT
|
2017-01-04 06:23:35 +00:00
|
|
|
|
Merge in main to current-release (#2254)
* Remove unnecessary import in test_constants.py, which also fixes an error on win (#2180)
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Manually reset the buffer when streaming request body (#2183)
* Remove Duplicated Dependencies and PEP 517 Support (#2173)
* Remove duplicated dependencies
* Specify setuptools as the tool for generating distribution (PEP 517)
* Add `isort` to `dev_require`
* manage all dependencies in setup.py
* Execute `make pretty`
* Set usedevelop to true (revert previous change)
* Fix the handling of the end of a chunked request. (#2188)
* Fix the handling of the end of a chunked request.
* Avoid hardcoding final chunk header size.
* Add some unit tests for pipeline body reading
* Decode bytes for json serialization
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Resolve regressions in exceptions (#2181)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support (#2178)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support
* Update setup.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* style(app,blueprints): add some type hints (#2196)
* style(app,blueprints): add some type hints
* style(app): option is Any
* style(blueprints): url prefix default value is ``""``
* style(app): backward compatible
* style(app): backward compatible
* style(blueprints): defult is None
* style(app): apply code style (black)
* Update some CC config (#2199)
* Update README.rst
* raise exception for `_static_request_handler` unknown exception; add test with custom error (#2195)
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Change dumps to AnyStr (#2193)
* HTTP tests (#2194)
* Fix issues with after request handling in HTTP pipelining (#2201)
* Clean up after a request is complete, before the next pipelined request.
* Limit the size of request body consumed after handler has finished.
* Linter error.
* Add unit test re: bad headers
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update CHANGELOG
* Log remote address if available (#2207)
* Log remote address if available
* Add tests
* Fix testing version
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Fixed for handling exceptions of asgi app call. (#2211)
@cansarigol3megawatt Thanks for looking into this and getting the quick turnaround on this. I will :cherries: pick this into the 21.6 branch and get it out a little later tonight.
* Signals Integration (#2160)
* Update some tests
* Resolve #2122 route decorator returning tuple
* Use rc sanic-routing version
* Update unit tests to <:str>
* Minimal working version with some signals implemented
* Add more http signals
* Update ASGI and change listeners to signals
* Allow for dynamic ODE signals
* Allow signals to be stacked
* Begin tests
* Prioritize match_info on keyword argument injection
* WIP on tests
* Compat with signals
* Work through some test coverage
* Passing tests
* Post linting
* Setup proper resets
* coverage reporting
* Fixes from vltr comments
* clear delayed tasks
* Fix bad test
* rm pycache
* uncomment windows tests (#2214)
* Add convenience methods to BP groups (#2209)
* Fix bug where ws exceptions not being logged (#2213)
* Fix bug where ws exceptions not being logged
* Fix t\est
* Style: add type hints (#2217)
* style(routes): add_route argument, return typing
* style(listeners): typing
* style(views): typing as_view
* style(routes): change type hint
* style(listeners): change type hint
* style(routes): change type hint
* add some more types
* Change as_view typing
* Add some cleaner type annotations
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Add default messages to SanicExceptions (#2216)
* Add default messages to SanicExceptions
* Cleaner exception message setting
* Copy Blueprints Implementation (#2184)
* Accept header parsing (#2200)
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Add matching flags for wildcards
* Add mathing controls to accept
* Limit uvicorn 14 in testing
* Add convenience for annotated handlers (#2225)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass (#2229)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass.
* lint fixes
* re-black server.py
* Move server.py into its own module (#2230)
* Move server.py into its own module
* Change monkeypatch path on test_logging.py
* Blueprint specific exception handlers (#2208)
* Call abort() on sockets after close() to prevent dangling sockets (#2231)
* Add ability to return Falsey but not-None from handlers (#2236)
* Adds Blueprint Group exception decorator (#2238)
* Add exception decorator
* Added tests
* Fix line too long
* Static DIR and FILE resource types (#2244)
* Explicit static directive for serving file or dir
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
* Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists
* Add log when closing HTTP loop because of shutdown
* Add unit test
* New websockets (#2158)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Account for BP with exception handler but no routes (#2246)
* Don't log "enabled" if auto-reload disabled (#2247)
Fixes #2240
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Smarter auto fallback (#2162)
* Smarter auto fallback
* remove config from blueprints
* Add tests for error formatting
* Add check for proper format
* Fix some tests
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Fix contains bug, earlier return on MediaType eq
* Add matching flags for wildcards
* Add mathing controls to accept
* Cleanup dev cruft
* Add cleanup and resolve OSError relating to test implementation
* Fix test
* Fix some typos
* Some fixes to the new Websockets impl (#2248)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
* Some fixes to the new Websockets impl
Will throw WebsocketClosed exception instead of ServerException now when attempting to read or write to closed websocket, this makes it easier to catch
The various ws.recv() methods now have the ability to raise CancelledError into your websocket handler
Fix a niche close-socket negotiation bug
Fix bug where http protocol thought the websocket never sent any response.
Allow data to still send in some cases after websocket enters CLOSING state.
Fix some badly formatted and badly placed comments
* allow eof_received to send back data too, if the connection is in CLOSING state
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* 21.9 release docs (#2218)
* Beging 21.9 release docs
* Add PRs to changelog
* Change deprecation version
* Update logging tests
* Bump version
* Update changelog
* Change dev install command (#2251)
Co-authored-by: Zhiwei <zhi.wei.liang@outlook.com>
Co-authored-by: L. Kärkkäinen <98187+Tronic@users.noreply.github.com>
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Robert Palmer <robd003@users.noreply.github.com>
Co-authored-by: Ryu JuHeon <saidbysolo@gmail.com>
Co-authored-by: gluhar2006 <49654448+gluhar2006@users.noreply.github.com>
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Néstor Pérez <25409753+prryplatypus@users.noreply.github.com>
Co-authored-by: Can Sarigol <56863826+cansarigol3megawatt@users.noreply.github.com>
Co-authored-by: Zhiwei <chihwei.public@outlook.com>
Co-authored-by: YongChan Cho <h3236516@gmail.com>
Co-authored-by: Zhiwei <zhiwei@sinatra.ai>
Co-authored-by: Ashley Sommer <ashleysommer@gmail.com>
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
2021-10-02 19:55:23 +01:00
|
|
|
from sanic.exceptions import InvalidUsage, SanicException
|
2021-02-15 19:50:20 +00:00
|
|
|
|
2019-04-23 22:44:42 +01:00
|
|
|
|
2017-01-04 06:23:35 +00:00
|
|
|
AVAILABLE_LISTENERS = [
|
2018-12-30 11:18:06 +00:00
|
|
|
"before_server_start",
|
|
|
|
"after_server_start",
|
|
|
|
"before_server_stop",
|
|
|
|
"after_server_stop",
|
2017-01-04 06:23:35 +00:00
|
|
|
]
|
|
|
|
|
2018-09-29 18:54:47 +01:00
|
|
|
skipif_no_alarm = pytest.mark.skipif(
|
2018-12-30 11:18:06 +00:00
|
|
|
not hasattr(signal, "SIGALRM"),
|
|
|
|
reason="SIGALRM is not implemented for this platform, we have to come "
|
|
|
|
"up with another timeout strategy to test these",
|
2018-09-29 18:54:47 +01:00
|
|
|
)
|
|
|
|
|
2017-01-04 06:23:35 +00:00
|
|
|
|
|
|
|
def create_listener(listener_name, in_list):
|
|
|
|
async def _listener(app, loop):
|
2020-02-25 20:01:13 +00:00
|
|
|
print(f"DEBUG MESSAGE FOR PYTEST for {listener_name}")
|
2017-01-04 06:23:35 +00:00
|
|
|
in_list.insert(0, app.name + listener_name)
|
2018-12-30 11:18:06 +00:00
|
|
|
|
2017-01-04 06:23:35 +00:00
|
|
|
return _listener
|
|
|
|
|
|
|
|
|
|
|
|
def start_stop_app(random_name_app, **run_kwargs):
|
|
|
|
def stop_on_alarm(signum, frame):
|
2018-12-30 11:18:06 +00:00
|
|
|
raise KeyboardInterrupt("SIGINT for sanic to stop gracefully")
|
2017-01-04 06:23:35 +00:00
|
|
|
|
|
|
|
signal.signal(signal.SIGALRM, stop_on_alarm)
|
|
|
|
signal.alarm(1)
|
|
|
|
try:
|
2018-03-16 04:28:52 +00:00
|
|
|
random_name_app.run(HOST, PORT, **run_kwargs)
|
2017-01-04 06:23:35 +00:00
|
|
|
except KeyboardInterrupt:
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2018-09-29 18:54:47 +01:00
|
|
|
@skipif_no_alarm
|
2018-12-30 11:18:06 +00:00
|
|
|
@pytest.mark.parametrize("listener_name", AVAILABLE_LISTENERS)
|
2018-08-26 15:43:14 +01:00
|
|
|
def test_single_listener(app, listener_name):
|
2017-01-04 06:23:35 +00:00
|
|
|
"""Test that listeners on their own work"""
|
2018-08-26 15:43:14 +01:00
|
|
|
output = []
|
2017-02-11 14:30:17 +00:00
|
|
|
# Register listener
|
2018-12-30 11:18:06 +00:00
|
|
|
app.listener(listener_name)(create_listener(listener_name, output))
|
2018-08-26 15:43:14 +01:00
|
|
|
start_stop_app(app)
|
|
|
|
assert app.name + listener_name == output.pop()
|
2017-01-04 06:23:35 +00:00
|
|
|
|
|
|
|
|
2018-09-29 18:54:47 +01:00
|
|
|
@skipif_no_alarm
|
2018-12-30 11:18:06 +00:00
|
|
|
@pytest.mark.parametrize("listener_name", AVAILABLE_LISTENERS)
|
2018-08-26 15:43:14 +01:00
|
|
|
def test_register_listener(app, listener_name):
|
2018-02-09 22:01:17 +00:00
|
|
|
"""
|
|
|
|
Test that listeners on their own work with
|
|
|
|
app.register_listener method
|
|
|
|
"""
|
2018-08-26 15:43:14 +01:00
|
|
|
output = []
|
2018-02-09 22:01:17 +00:00
|
|
|
# Register listener
|
|
|
|
listener = create_listener(listener_name, output)
|
2018-09-29 18:54:47 +01:00
|
|
|
app.register_listener(listener, event=listener_name)
|
2018-08-26 15:43:14 +01:00
|
|
|
start_stop_app(app)
|
|
|
|
assert app.name + listener_name == output.pop()
|
2018-02-09 22:01:17 +00:00
|
|
|
|
|
|
|
|
2018-09-29 18:54:47 +01:00
|
|
|
@skipif_no_alarm
|
2018-08-26 15:43:14 +01:00
|
|
|
def test_all_listeners(app):
|
|
|
|
output = []
|
2017-02-11 14:30:17 +00:00
|
|
|
for listener_name in AVAILABLE_LISTENERS:
|
|
|
|
listener = create_listener(listener_name, output)
|
2018-08-26 15:43:14 +01:00
|
|
|
app.listener(listener_name)(listener)
|
|
|
|
start_stop_app(app)
|
2017-01-04 06:23:35 +00:00
|
|
|
for listener_name in AVAILABLE_LISTENERS:
|
2018-08-26 15:43:14 +01:00
|
|
|
assert app.name + listener_name == output.pop()
|
2017-08-09 06:21:40 +01:00
|
|
|
|
|
|
|
|
2021-02-15 19:50:20 +00:00
|
|
|
@skipif_no_alarm
|
|
|
|
def test_all_listeners_as_convenience(app):
|
|
|
|
output = []
|
|
|
|
for listener_name in AVAILABLE_LISTENERS:
|
|
|
|
listener = create_listener(listener_name, output)
|
|
|
|
method = getattr(app, listener_name)
|
|
|
|
method(listener)
|
|
|
|
start_stop_app(app)
|
|
|
|
for listener_name in AVAILABLE_LISTENERS:
|
|
|
|
assert app.name + listener_name == output.pop()
|
|
|
|
|
|
|
|
|
2019-06-04 08:58:00 +01:00
|
|
|
@pytest.mark.asyncio
|
2018-08-26 15:43:14 +01:00
|
|
|
async def test_trigger_before_events_create_server(app):
|
2017-08-09 06:21:40 +01:00
|
|
|
class MySanicDb:
|
|
|
|
pass
|
|
|
|
|
2018-12-30 11:18:06 +00:00
|
|
|
@app.listener("before_server_start")
|
2017-08-09 06:21:40 +01:00
|
|
|
async def init_db(app, loop):
|
|
|
|
app.db = MySanicDb()
|
|
|
|
|
Merge in main to current-release (#2254)
* Remove unnecessary import in test_constants.py, which also fixes an error on win (#2180)
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Manually reset the buffer when streaming request body (#2183)
* Remove Duplicated Dependencies and PEP 517 Support (#2173)
* Remove duplicated dependencies
* Specify setuptools as the tool for generating distribution (PEP 517)
* Add `isort` to `dev_require`
* manage all dependencies in setup.py
* Execute `make pretty`
* Set usedevelop to true (revert previous change)
* Fix the handling of the end of a chunked request. (#2188)
* Fix the handling of the end of a chunked request.
* Avoid hardcoding final chunk header size.
* Add some unit tests for pipeline body reading
* Decode bytes for json serialization
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Resolve regressions in exceptions (#2181)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support (#2178)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support
* Update setup.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* style(app,blueprints): add some type hints (#2196)
* style(app,blueprints): add some type hints
* style(app): option is Any
* style(blueprints): url prefix default value is ``""``
* style(app): backward compatible
* style(app): backward compatible
* style(blueprints): defult is None
* style(app): apply code style (black)
* Update some CC config (#2199)
* Update README.rst
* raise exception for `_static_request_handler` unknown exception; add test with custom error (#2195)
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Change dumps to AnyStr (#2193)
* HTTP tests (#2194)
* Fix issues with after request handling in HTTP pipelining (#2201)
* Clean up after a request is complete, before the next pipelined request.
* Limit the size of request body consumed after handler has finished.
* Linter error.
* Add unit test re: bad headers
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update CHANGELOG
* Log remote address if available (#2207)
* Log remote address if available
* Add tests
* Fix testing version
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Fixed for handling exceptions of asgi app call. (#2211)
@cansarigol3megawatt Thanks for looking into this and getting the quick turnaround on this. I will :cherries: pick this into the 21.6 branch and get it out a little later tonight.
* Signals Integration (#2160)
* Update some tests
* Resolve #2122 route decorator returning tuple
* Use rc sanic-routing version
* Update unit tests to <:str>
* Minimal working version with some signals implemented
* Add more http signals
* Update ASGI and change listeners to signals
* Allow for dynamic ODE signals
* Allow signals to be stacked
* Begin tests
* Prioritize match_info on keyword argument injection
* WIP on tests
* Compat with signals
* Work through some test coverage
* Passing tests
* Post linting
* Setup proper resets
* coverage reporting
* Fixes from vltr comments
* clear delayed tasks
* Fix bad test
* rm pycache
* uncomment windows tests (#2214)
* Add convenience methods to BP groups (#2209)
* Fix bug where ws exceptions not being logged (#2213)
* Fix bug where ws exceptions not being logged
* Fix t\est
* Style: add type hints (#2217)
* style(routes): add_route argument, return typing
* style(listeners): typing
* style(views): typing as_view
* style(routes): change type hint
* style(listeners): change type hint
* style(routes): change type hint
* add some more types
* Change as_view typing
* Add some cleaner type annotations
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Add default messages to SanicExceptions (#2216)
* Add default messages to SanicExceptions
* Cleaner exception message setting
* Copy Blueprints Implementation (#2184)
* Accept header parsing (#2200)
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Add matching flags for wildcards
* Add mathing controls to accept
* Limit uvicorn 14 in testing
* Add convenience for annotated handlers (#2225)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass (#2229)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass.
* lint fixes
* re-black server.py
* Move server.py into its own module (#2230)
* Move server.py into its own module
* Change monkeypatch path on test_logging.py
* Blueprint specific exception handlers (#2208)
* Call abort() on sockets after close() to prevent dangling sockets (#2231)
* Add ability to return Falsey but not-None from handlers (#2236)
* Adds Blueprint Group exception decorator (#2238)
* Add exception decorator
* Added tests
* Fix line too long
* Static DIR and FILE resource types (#2244)
* Explicit static directive for serving file or dir
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
* Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists
* Add log when closing HTTP loop because of shutdown
* Add unit test
* New websockets (#2158)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Account for BP with exception handler but no routes (#2246)
* Don't log "enabled" if auto-reload disabled (#2247)
Fixes #2240
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Smarter auto fallback (#2162)
* Smarter auto fallback
* remove config from blueprints
* Add tests for error formatting
* Add check for proper format
* Fix some tests
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Fix contains bug, earlier return on MediaType eq
* Add matching flags for wildcards
* Add mathing controls to accept
* Cleanup dev cruft
* Add cleanup and resolve OSError relating to test implementation
* Fix test
* Fix some typos
* Some fixes to the new Websockets impl (#2248)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
* Some fixes to the new Websockets impl
Will throw WebsocketClosed exception instead of ServerException now when attempting to read or write to closed websocket, this makes it easier to catch
The various ws.recv() methods now have the ability to raise CancelledError into your websocket handler
Fix a niche close-socket negotiation bug
Fix bug where http protocol thought the websocket never sent any response.
Allow data to still send in some cases after websocket enters CLOSING state.
Fix some badly formatted and badly placed comments
* allow eof_received to send back data too, if the connection is in CLOSING state
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* 21.9 release docs (#2218)
* Beging 21.9 release docs
* Add PRs to changelog
* Change deprecation version
* Update logging tests
* Bump version
* Update changelog
* Change dev install command (#2251)
Co-authored-by: Zhiwei <zhi.wei.liang@outlook.com>
Co-authored-by: L. Kärkkäinen <98187+Tronic@users.noreply.github.com>
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Robert Palmer <robd003@users.noreply.github.com>
Co-authored-by: Ryu JuHeon <saidbysolo@gmail.com>
Co-authored-by: gluhar2006 <49654448+gluhar2006@users.noreply.github.com>
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Néstor Pérez <25409753+prryplatypus@users.noreply.github.com>
Co-authored-by: Can Sarigol <56863826+cansarigol3megawatt@users.noreply.github.com>
Co-authored-by: Zhiwei <chihwei.public@outlook.com>
Co-authored-by: YongChan Cho <h3236516@gmail.com>
Co-authored-by: Zhiwei <zhiwei@sinatra.ai>
Co-authored-by: Ashley Sommer <ashleysommer@gmail.com>
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
2021-10-02 19:55:23 +01:00
|
|
|
srv = await app.create_server(
|
|
|
|
debug=True, return_asyncio_server=True, port=PORT
|
|
|
|
)
|
|
|
|
await srv.startup()
|
|
|
|
await srv.before_start()
|
2017-08-09 06:21:40 +01:00
|
|
|
|
|
|
|
assert hasattr(app, "db")
|
|
|
|
assert isinstance(app.db, MySanicDb)
|
2019-09-16 18:59:16 +01:00
|
|
|
|
2019-10-23 17:12:20 +01:00
|
|
|
|
2021-02-15 19:50:20 +00:00
|
|
|
@pytest.mark.asyncio
|
|
|
|
async def test_trigger_before_events_create_server_missing_event(app):
|
|
|
|
class MySanicDb:
|
|
|
|
pass
|
|
|
|
|
|
|
|
with pytest.raises(InvalidUsage):
|
|
|
|
|
|
|
|
@app.listener
|
|
|
|
async def init_db(app, loop):
|
|
|
|
app.db = MySanicDb()
|
|
|
|
|
|
|
|
assert not hasattr(app, "db")
|
|
|
|
|
|
|
|
|
2019-09-16 18:59:16 +01:00
|
|
|
def test_create_server_trigger_events(app):
|
|
|
|
"""Test if create_server can trigger server events"""
|
|
|
|
|
|
|
|
flag1 = False
|
|
|
|
flag2 = False
|
|
|
|
flag3 = False
|
|
|
|
|
|
|
|
async def stop(app, loop):
|
|
|
|
nonlocal flag1
|
|
|
|
flag1 = True
|
|
|
|
await asyncio.sleep(0.1)
|
|
|
|
app.stop()
|
|
|
|
|
|
|
|
async def before_stop(app, loop):
|
|
|
|
nonlocal flag2
|
|
|
|
flag2 = True
|
|
|
|
|
|
|
|
async def after_stop(app, loop):
|
|
|
|
nonlocal flag3
|
|
|
|
flag3 = True
|
|
|
|
|
|
|
|
app.listener("after_server_start")(stop)
|
|
|
|
app.listener("before_server_stop")(before_stop)
|
|
|
|
app.listener("after_server_stop")(after_stop)
|
|
|
|
|
|
|
|
loop = asyncio.get_event_loop()
|
2020-03-26 04:42:46 +00:00
|
|
|
|
|
|
|
# Use random port for tests
|
|
|
|
with closing(socket()) as sock:
|
|
|
|
sock.bind(("127.0.0.1", 0))
|
|
|
|
|
|
|
|
serv_coro = app.create_server(return_asyncio_server=True, sock=sock)
|
|
|
|
serv_task = asyncio.ensure_future(serv_coro, loop=loop)
|
|
|
|
server = loop.run_until_complete(serv_task)
|
Merge in main to current-release (#2254)
* Remove unnecessary import in test_constants.py, which also fixes an error on win (#2180)
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Manually reset the buffer when streaming request body (#2183)
* Remove Duplicated Dependencies and PEP 517 Support (#2173)
* Remove duplicated dependencies
* Specify setuptools as the tool for generating distribution (PEP 517)
* Add `isort` to `dev_require`
* manage all dependencies in setup.py
* Execute `make pretty`
* Set usedevelop to true (revert previous change)
* Fix the handling of the end of a chunked request. (#2188)
* Fix the handling of the end of a chunked request.
* Avoid hardcoding final chunk header size.
* Add some unit tests for pipeline body reading
* Decode bytes for json serialization
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Resolve regressions in exceptions (#2181)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support (#2178)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support
* Update setup.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* style(app,blueprints): add some type hints (#2196)
* style(app,blueprints): add some type hints
* style(app): option is Any
* style(blueprints): url prefix default value is ``""``
* style(app): backward compatible
* style(app): backward compatible
* style(blueprints): defult is None
* style(app): apply code style (black)
* Update some CC config (#2199)
* Update README.rst
* raise exception for `_static_request_handler` unknown exception; add test with custom error (#2195)
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Change dumps to AnyStr (#2193)
* HTTP tests (#2194)
* Fix issues with after request handling in HTTP pipelining (#2201)
* Clean up after a request is complete, before the next pipelined request.
* Limit the size of request body consumed after handler has finished.
* Linter error.
* Add unit test re: bad headers
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update CHANGELOG
* Log remote address if available (#2207)
* Log remote address if available
* Add tests
* Fix testing version
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Fixed for handling exceptions of asgi app call. (#2211)
@cansarigol3megawatt Thanks for looking into this and getting the quick turnaround on this. I will :cherries: pick this into the 21.6 branch and get it out a little later tonight.
* Signals Integration (#2160)
* Update some tests
* Resolve #2122 route decorator returning tuple
* Use rc sanic-routing version
* Update unit tests to <:str>
* Minimal working version with some signals implemented
* Add more http signals
* Update ASGI and change listeners to signals
* Allow for dynamic ODE signals
* Allow signals to be stacked
* Begin tests
* Prioritize match_info on keyword argument injection
* WIP on tests
* Compat with signals
* Work through some test coverage
* Passing tests
* Post linting
* Setup proper resets
* coverage reporting
* Fixes from vltr comments
* clear delayed tasks
* Fix bad test
* rm pycache
* uncomment windows tests (#2214)
* Add convenience methods to BP groups (#2209)
* Fix bug where ws exceptions not being logged (#2213)
* Fix bug where ws exceptions not being logged
* Fix t\est
* Style: add type hints (#2217)
* style(routes): add_route argument, return typing
* style(listeners): typing
* style(views): typing as_view
* style(routes): change type hint
* style(listeners): change type hint
* style(routes): change type hint
* add some more types
* Change as_view typing
* Add some cleaner type annotations
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Add default messages to SanicExceptions (#2216)
* Add default messages to SanicExceptions
* Cleaner exception message setting
* Copy Blueprints Implementation (#2184)
* Accept header parsing (#2200)
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Add matching flags for wildcards
* Add mathing controls to accept
* Limit uvicorn 14 in testing
* Add convenience for annotated handlers (#2225)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass (#2229)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass.
* lint fixes
* re-black server.py
* Move server.py into its own module (#2230)
* Move server.py into its own module
* Change monkeypatch path on test_logging.py
* Blueprint specific exception handlers (#2208)
* Call abort() on sockets after close() to prevent dangling sockets (#2231)
* Add ability to return Falsey but not-None from handlers (#2236)
* Adds Blueprint Group exception decorator (#2238)
* Add exception decorator
* Added tests
* Fix line too long
* Static DIR and FILE resource types (#2244)
* Explicit static directive for serving file or dir
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
* Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists
* Add log when closing HTTP loop because of shutdown
* Add unit test
* New websockets (#2158)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Account for BP with exception handler but no routes (#2246)
* Don't log "enabled" if auto-reload disabled (#2247)
Fixes #2240
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Smarter auto fallback (#2162)
* Smarter auto fallback
* remove config from blueprints
* Add tests for error formatting
* Add check for proper format
* Fix some tests
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Fix contains bug, earlier return on MediaType eq
* Add matching flags for wildcards
* Add mathing controls to accept
* Cleanup dev cruft
* Add cleanup and resolve OSError relating to test implementation
* Fix test
* Fix some typos
* Some fixes to the new Websockets impl (#2248)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
* Some fixes to the new Websockets impl
Will throw WebsocketClosed exception instead of ServerException now when attempting to read or write to closed websocket, this makes it easier to catch
The various ws.recv() methods now have the ability to raise CancelledError into your websocket handler
Fix a niche close-socket negotiation bug
Fix bug where http protocol thought the websocket never sent any response.
Allow data to still send in some cases after websocket enters CLOSING state.
Fix some badly formatted and badly placed comments
* allow eof_received to send back data too, if the connection is in CLOSING state
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* 21.9 release docs (#2218)
* Beging 21.9 release docs
* Add PRs to changelog
* Change deprecation version
* Update logging tests
* Bump version
* Update changelog
* Change dev install command (#2251)
Co-authored-by: Zhiwei <zhi.wei.liang@outlook.com>
Co-authored-by: L. Kärkkäinen <98187+Tronic@users.noreply.github.com>
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Robert Palmer <robd003@users.noreply.github.com>
Co-authored-by: Ryu JuHeon <saidbysolo@gmail.com>
Co-authored-by: gluhar2006 <49654448+gluhar2006@users.noreply.github.com>
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Néstor Pérez <25409753+prryplatypus@users.noreply.github.com>
Co-authored-by: Can Sarigol <56863826+cansarigol3megawatt@users.noreply.github.com>
Co-authored-by: Zhiwei <chihwei.public@outlook.com>
Co-authored-by: YongChan Cho <h3236516@gmail.com>
Co-authored-by: Zhiwei <zhiwei@sinatra.ai>
Co-authored-by: Ashley Sommer <ashleysommer@gmail.com>
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
2021-10-02 19:55:23 +01:00
|
|
|
loop.run_until_complete(server.startup())
|
|
|
|
loop.run_until_complete(server.after_start())
|
2020-03-26 04:42:46 +00:00
|
|
|
try:
|
|
|
|
loop.run_forever()
|
Merge in main to current-release (#2254)
* Remove unnecessary import in test_constants.py, which also fixes an error on win (#2180)
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Manually reset the buffer when streaming request body (#2183)
* Remove Duplicated Dependencies and PEP 517 Support (#2173)
* Remove duplicated dependencies
* Specify setuptools as the tool for generating distribution (PEP 517)
* Add `isort` to `dev_require`
* manage all dependencies in setup.py
* Execute `make pretty`
* Set usedevelop to true (revert previous change)
* Fix the handling of the end of a chunked request. (#2188)
* Fix the handling of the end of a chunked request.
* Avoid hardcoding final chunk header size.
* Add some unit tests for pipeline body reading
* Decode bytes for json serialization
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Resolve regressions in exceptions (#2181)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support (#2178)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support
* Update setup.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* style(app,blueprints): add some type hints (#2196)
* style(app,blueprints): add some type hints
* style(app): option is Any
* style(blueprints): url prefix default value is ``""``
* style(app): backward compatible
* style(app): backward compatible
* style(blueprints): defult is None
* style(app): apply code style (black)
* Update some CC config (#2199)
* Update README.rst
* raise exception for `_static_request_handler` unknown exception; add test with custom error (#2195)
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Change dumps to AnyStr (#2193)
* HTTP tests (#2194)
* Fix issues with after request handling in HTTP pipelining (#2201)
* Clean up after a request is complete, before the next pipelined request.
* Limit the size of request body consumed after handler has finished.
* Linter error.
* Add unit test re: bad headers
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update CHANGELOG
* Log remote address if available (#2207)
* Log remote address if available
* Add tests
* Fix testing version
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Fixed for handling exceptions of asgi app call. (#2211)
@cansarigol3megawatt Thanks for looking into this and getting the quick turnaround on this. I will :cherries: pick this into the 21.6 branch and get it out a little later tonight.
* Signals Integration (#2160)
* Update some tests
* Resolve #2122 route decorator returning tuple
* Use rc sanic-routing version
* Update unit tests to <:str>
* Minimal working version with some signals implemented
* Add more http signals
* Update ASGI and change listeners to signals
* Allow for dynamic ODE signals
* Allow signals to be stacked
* Begin tests
* Prioritize match_info on keyword argument injection
* WIP on tests
* Compat with signals
* Work through some test coverage
* Passing tests
* Post linting
* Setup proper resets
* coverage reporting
* Fixes from vltr comments
* clear delayed tasks
* Fix bad test
* rm pycache
* uncomment windows tests (#2214)
* Add convenience methods to BP groups (#2209)
* Fix bug where ws exceptions not being logged (#2213)
* Fix bug where ws exceptions not being logged
* Fix t\est
* Style: add type hints (#2217)
* style(routes): add_route argument, return typing
* style(listeners): typing
* style(views): typing as_view
* style(routes): change type hint
* style(listeners): change type hint
* style(routes): change type hint
* add some more types
* Change as_view typing
* Add some cleaner type annotations
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Add default messages to SanicExceptions (#2216)
* Add default messages to SanicExceptions
* Cleaner exception message setting
* Copy Blueprints Implementation (#2184)
* Accept header parsing (#2200)
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Add matching flags for wildcards
* Add mathing controls to accept
* Limit uvicorn 14 in testing
* Add convenience for annotated handlers (#2225)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass (#2229)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass.
* lint fixes
* re-black server.py
* Move server.py into its own module (#2230)
* Move server.py into its own module
* Change monkeypatch path on test_logging.py
* Blueprint specific exception handlers (#2208)
* Call abort() on sockets after close() to prevent dangling sockets (#2231)
* Add ability to return Falsey but not-None from handlers (#2236)
* Adds Blueprint Group exception decorator (#2238)
* Add exception decorator
* Added tests
* Fix line too long
* Static DIR and FILE resource types (#2244)
* Explicit static directive for serving file or dir
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
* Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists
* Add log when closing HTTP loop because of shutdown
* Add unit test
* New websockets (#2158)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Account for BP with exception handler but no routes (#2246)
* Don't log "enabled" if auto-reload disabled (#2247)
Fixes #2240
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Smarter auto fallback (#2162)
* Smarter auto fallback
* remove config from blueprints
* Add tests for error formatting
* Add check for proper format
* Fix some tests
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Fix contains bug, earlier return on MediaType eq
* Add matching flags for wildcards
* Add mathing controls to accept
* Cleanup dev cruft
* Add cleanup and resolve OSError relating to test implementation
* Fix test
* Fix some typos
* Some fixes to the new Websockets impl (#2248)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
* Some fixes to the new Websockets impl
Will throw WebsocketClosed exception instead of ServerException now when attempting to read or write to closed websocket, this makes it easier to catch
The various ws.recv() methods now have the ability to raise CancelledError into your websocket handler
Fix a niche close-socket negotiation bug
Fix bug where http protocol thought the websocket never sent any response.
Allow data to still send in some cases after websocket enters CLOSING state.
Fix some badly formatted and badly placed comments
* allow eof_received to send back data too, if the connection is in CLOSING state
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* 21.9 release docs (#2218)
* Beging 21.9 release docs
* Add PRs to changelog
* Change deprecation version
* Update logging tests
* Bump version
* Update changelog
* Change dev install command (#2251)
Co-authored-by: Zhiwei <zhi.wei.liang@outlook.com>
Co-authored-by: L. Kärkkäinen <98187+Tronic@users.noreply.github.com>
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Robert Palmer <robd003@users.noreply.github.com>
Co-authored-by: Ryu JuHeon <saidbysolo@gmail.com>
Co-authored-by: gluhar2006 <49654448+gluhar2006@users.noreply.github.com>
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Néstor Pérez <25409753+prryplatypus@users.noreply.github.com>
Co-authored-by: Can Sarigol <56863826+cansarigol3megawatt@users.noreply.github.com>
Co-authored-by: Zhiwei <chihwei.public@outlook.com>
Co-authored-by: YongChan Cho <h3236516@gmail.com>
Co-authored-by: Zhiwei <zhiwei@sinatra.ai>
Co-authored-by: Ashley Sommer <ashleysommer@gmail.com>
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
2021-10-02 19:55:23 +01:00
|
|
|
except KeyboardInterrupt:
|
2020-03-26 04:42:46 +00:00
|
|
|
loop.stop()
|
|
|
|
finally:
|
|
|
|
# Run the on_stop function if provided
|
Merge in main to current-release (#2254)
* Remove unnecessary import in test_constants.py, which also fixes an error on win (#2180)
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Manually reset the buffer when streaming request body (#2183)
* Remove Duplicated Dependencies and PEP 517 Support (#2173)
* Remove duplicated dependencies
* Specify setuptools as the tool for generating distribution (PEP 517)
* Add `isort` to `dev_require`
* manage all dependencies in setup.py
* Execute `make pretty`
* Set usedevelop to true (revert previous change)
* Fix the handling of the end of a chunked request. (#2188)
* Fix the handling of the end of a chunked request.
* Avoid hardcoding final chunk header size.
* Add some unit tests for pipeline body reading
* Decode bytes for json serialization
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Resolve regressions in exceptions (#2181)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support (#2178)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support
* Update setup.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* style(app,blueprints): add some type hints (#2196)
* style(app,blueprints): add some type hints
* style(app): option is Any
* style(blueprints): url prefix default value is ``""``
* style(app): backward compatible
* style(app): backward compatible
* style(blueprints): defult is None
* style(app): apply code style (black)
* Update some CC config (#2199)
* Update README.rst
* raise exception for `_static_request_handler` unknown exception; add test with custom error (#2195)
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Change dumps to AnyStr (#2193)
* HTTP tests (#2194)
* Fix issues with after request handling in HTTP pipelining (#2201)
* Clean up after a request is complete, before the next pipelined request.
* Limit the size of request body consumed after handler has finished.
* Linter error.
* Add unit test re: bad headers
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update CHANGELOG
* Log remote address if available (#2207)
* Log remote address if available
* Add tests
* Fix testing version
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Fixed for handling exceptions of asgi app call. (#2211)
@cansarigol3megawatt Thanks for looking into this and getting the quick turnaround on this. I will :cherries: pick this into the 21.6 branch and get it out a little later tonight.
* Signals Integration (#2160)
* Update some tests
* Resolve #2122 route decorator returning tuple
* Use rc sanic-routing version
* Update unit tests to <:str>
* Minimal working version with some signals implemented
* Add more http signals
* Update ASGI and change listeners to signals
* Allow for dynamic ODE signals
* Allow signals to be stacked
* Begin tests
* Prioritize match_info on keyword argument injection
* WIP on tests
* Compat with signals
* Work through some test coverage
* Passing tests
* Post linting
* Setup proper resets
* coverage reporting
* Fixes from vltr comments
* clear delayed tasks
* Fix bad test
* rm pycache
* uncomment windows tests (#2214)
* Add convenience methods to BP groups (#2209)
* Fix bug where ws exceptions not being logged (#2213)
* Fix bug where ws exceptions not being logged
* Fix t\est
* Style: add type hints (#2217)
* style(routes): add_route argument, return typing
* style(listeners): typing
* style(views): typing as_view
* style(routes): change type hint
* style(listeners): change type hint
* style(routes): change type hint
* add some more types
* Change as_view typing
* Add some cleaner type annotations
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Add default messages to SanicExceptions (#2216)
* Add default messages to SanicExceptions
* Cleaner exception message setting
* Copy Blueprints Implementation (#2184)
* Accept header parsing (#2200)
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Add matching flags for wildcards
* Add mathing controls to accept
* Limit uvicorn 14 in testing
* Add convenience for annotated handlers (#2225)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass (#2229)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass.
* lint fixes
* re-black server.py
* Move server.py into its own module (#2230)
* Move server.py into its own module
* Change monkeypatch path on test_logging.py
* Blueprint specific exception handlers (#2208)
* Call abort() on sockets after close() to prevent dangling sockets (#2231)
* Add ability to return Falsey but not-None from handlers (#2236)
* Adds Blueprint Group exception decorator (#2238)
* Add exception decorator
* Added tests
* Fix line too long
* Static DIR and FILE resource types (#2244)
* Explicit static directive for serving file or dir
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
* Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists
* Add log when closing HTTP loop because of shutdown
* Add unit test
* New websockets (#2158)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Account for BP with exception handler but no routes (#2246)
* Don't log "enabled" if auto-reload disabled (#2247)
Fixes #2240
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Smarter auto fallback (#2162)
* Smarter auto fallback
* remove config from blueprints
* Add tests for error formatting
* Add check for proper format
* Fix some tests
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Fix contains bug, earlier return on MediaType eq
* Add matching flags for wildcards
* Add mathing controls to accept
* Cleanup dev cruft
* Add cleanup and resolve OSError relating to test implementation
* Fix test
* Fix some typos
* Some fixes to the new Websockets impl (#2248)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
* Some fixes to the new Websockets impl
Will throw WebsocketClosed exception instead of ServerException now when attempting to read or write to closed websocket, this makes it easier to catch
The various ws.recv() methods now have the ability to raise CancelledError into your websocket handler
Fix a niche close-socket negotiation bug
Fix bug where http protocol thought the websocket never sent any response.
Allow data to still send in some cases after websocket enters CLOSING state.
Fix some badly formatted and badly placed comments
* allow eof_received to send back data too, if the connection is in CLOSING state
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* 21.9 release docs (#2218)
* Beging 21.9 release docs
* Add PRs to changelog
* Change deprecation version
* Update logging tests
* Bump version
* Update changelog
* Change dev install command (#2251)
Co-authored-by: Zhiwei <zhi.wei.liang@outlook.com>
Co-authored-by: L. Kärkkäinen <98187+Tronic@users.noreply.github.com>
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Robert Palmer <robd003@users.noreply.github.com>
Co-authored-by: Ryu JuHeon <saidbysolo@gmail.com>
Co-authored-by: gluhar2006 <49654448+gluhar2006@users.noreply.github.com>
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Néstor Pérez <25409753+prryplatypus@users.noreply.github.com>
Co-authored-by: Can Sarigol <56863826+cansarigol3megawatt@users.noreply.github.com>
Co-authored-by: Zhiwei <chihwei.public@outlook.com>
Co-authored-by: YongChan Cho <h3236516@gmail.com>
Co-authored-by: Zhiwei <zhiwei@sinatra.ai>
Co-authored-by: Ashley Sommer <ashleysommer@gmail.com>
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
2021-10-02 19:55:23 +01:00
|
|
|
loop.run_until_complete(server.before_stop())
|
2020-03-26 04:42:46 +00:00
|
|
|
|
|
|
|
# Wait for server to close
|
|
|
|
close_task = server.close()
|
|
|
|
loop.run_until_complete(close_task)
|
|
|
|
|
|
|
|
# Complete all tasks on the loop
|
|
|
|
signal.stopped = True
|
|
|
|
for connection in server.connections:
|
|
|
|
connection.close_if_idle()
|
Merge in main to current-release (#2254)
* Remove unnecessary import in test_constants.py, which also fixes an error on win (#2180)
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Manually reset the buffer when streaming request body (#2183)
* Remove Duplicated Dependencies and PEP 517 Support (#2173)
* Remove duplicated dependencies
* Specify setuptools as the tool for generating distribution (PEP 517)
* Add `isort` to `dev_require`
* manage all dependencies in setup.py
* Execute `make pretty`
* Set usedevelop to true (revert previous change)
* Fix the handling of the end of a chunked request. (#2188)
* Fix the handling of the end of a chunked request.
* Avoid hardcoding final chunk header size.
* Add some unit tests for pipeline body reading
* Decode bytes for json serialization
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Resolve regressions in exceptions (#2181)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support (#2178)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support
* Update setup.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* style(app,blueprints): add some type hints (#2196)
* style(app,blueprints): add some type hints
* style(app): option is Any
* style(blueprints): url prefix default value is ``""``
* style(app): backward compatible
* style(app): backward compatible
* style(blueprints): defult is None
* style(app): apply code style (black)
* Update some CC config (#2199)
* Update README.rst
* raise exception for `_static_request_handler` unknown exception; add test with custom error (#2195)
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Change dumps to AnyStr (#2193)
* HTTP tests (#2194)
* Fix issues with after request handling in HTTP pipelining (#2201)
* Clean up after a request is complete, before the next pipelined request.
* Limit the size of request body consumed after handler has finished.
* Linter error.
* Add unit test re: bad headers
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update CHANGELOG
* Log remote address if available (#2207)
* Log remote address if available
* Add tests
* Fix testing version
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Fixed for handling exceptions of asgi app call. (#2211)
@cansarigol3megawatt Thanks for looking into this and getting the quick turnaround on this. I will :cherries: pick this into the 21.6 branch and get it out a little later tonight.
* Signals Integration (#2160)
* Update some tests
* Resolve #2122 route decorator returning tuple
* Use rc sanic-routing version
* Update unit tests to <:str>
* Minimal working version with some signals implemented
* Add more http signals
* Update ASGI and change listeners to signals
* Allow for dynamic ODE signals
* Allow signals to be stacked
* Begin tests
* Prioritize match_info on keyword argument injection
* WIP on tests
* Compat with signals
* Work through some test coverage
* Passing tests
* Post linting
* Setup proper resets
* coverage reporting
* Fixes from vltr comments
* clear delayed tasks
* Fix bad test
* rm pycache
* uncomment windows tests (#2214)
* Add convenience methods to BP groups (#2209)
* Fix bug where ws exceptions not being logged (#2213)
* Fix bug where ws exceptions not being logged
* Fix t\est
* Style: add type hints (#2217)
* style(routes): add_route argument, return typing
* style(listeners): typing
* style(views): typing as_view
* style(routes): change type hint
* style(listeners): change type hint
* style(routes): change type hint
* add some more types
* Change as_view typing
* Add some cleaner type annotations
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Add default messages to SanicExceptions (#2216)
* Add default messages to SanicExceptions
* Cleaner exception message setting
* Copy Blueprints Implementation (#2184)
* Accept header parsing (#2200)
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Add matching flags for wildcards
* Add mathing controls to accept
* Limit uvicorn 14 in testing
* Add convenience for annotated handlers (#2225)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass (#2229)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass.
* lint fixes
* re-black server.py
* Move server.py into its own module (#2230)
* Move server.py into its own module
* Change monkeypatch path on test_logging.py
* Blueprint specific exception handlers (#2208)
* Call abort() on sockets after close() to prevent dangling sockets (#2231)
* Add ability to return Falsey but not-None from handlers (#2236)
* Adds Blueprint Group exception decorator (#2238)
* Add exception decorator
* Added tests
* Fix line too long
* Static DIR and FILE resource types (#2244)
* Explicit static directive for serving file or dir
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
* Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists
* Add log when closing HTTP loop because of shutdown
* Add unit test
* New websockets (#2158)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Account for BP with exception handler but no routes (#2246)
* Don't log "enabled" if auto-reload disabled (#2247)
Fixes #2240
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Smarter auto fallback (#2162)
* Smarter auto fallback
* remove config from blueprints
* Add tests for error formatting
* Add check for proper format
* Fix some tests
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Fix contains bug, earlier return on MediaType eq
* Add matching flags for wildcards
* Add mathing controls to accept
* Cleanup dev cruft
* Add cleanup and resolve OSError relating to test implementation
* Fix test
* Fix some typos
* Some fixes to the new Websockets impl (#2248)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
* Some fixes to the new Websockets impl
Will throw WebsocketClosed exception instead of ServerException now when attempting to read or write to closed websocket, this makes it easier to catch
The various ws.recv() methods now have the ability to raise CancelledError into your websocket handler
Fix a niche close-socket negotiation bug
Fix bug where http protocol thought the websocket never sent any response.
Allow data to still send in some cases after websocket enters CLOSING state.
Fix some badly formatted and badly placed comments
* allow eof_received to send back data too, if the connection is in CLOSING state
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* 21.9 release docs (#2218)
* Beging 21.9 release docs
* Add PRs to changelog
* Change deprecation version
* Update logging tests
* Bump version
* Update changelog
* Change dev install command (#2251)
Co-authored-by: Zhiwei <zhi.wei.liang@outlook.com>
Co-authored-by: L. Kärkkäinen <98187+Tronic@users.noreply.github.com>
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Robert Palmer <robd003@users.noreply.github.com>
Co-authored-by: Ryu JuHeon <saidbysolo@gmail.com>
Co-authored-by: gluhar2006 <49654448+gluhar2006@users.noreply.github.com>
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Néstor Pérez <25409753+prryplatypus@users.noreply.github.com>
Co-authored-by: Can Sarigol <56863826+cansarigol3megawatt@users.noreply.github.com>
Co-authored-by: Zhiwei <chihwei.public@outlook.com>
Co-authored-by: YongChan Cho <h3236516@gmail.com>
Co-authored-by: Zhiwei <zhiwei@sinatra.ai>
Co-authored-by: Ashley Sommer <ashleysommer@gmail.com>
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
2021-10-02 19:55:23 +01:00
|
|
|
loop.run_until_complete(server.after_stop())
|
2020-03-26 04:42:46 +00:00
|
|
|
assert flag1 and flag2 and flag3
|
Merge in main to current-release (#2254)
* Remove unnecessary import in test_constants.py, which also fixes an error on win (#2180)
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Manually reset the buffer when streaming request body (#2183)
* Remove Duplicated Dependencies and PEP 517 Support (#2173)
* Remove duplicated dependencies
* Specify setuptools as the tool for generating distribution (PEP 517)
* Add `isort` to `dev_require`
* manage all dependencies in setup.py
* Execute `make pretty`
* Set usedevelop to true (revert previous change)
* Fix the handling of the end of a chunked request. (#2188)
* Fix the handling of the end of a chunked request.
* Avoid hardcoding final chunk header size.
* Add some unit tests for pipeline body reading
* Decode bytes for json serialization
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Resolve regressions in exceptions (#2181)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support (#2178)
* Update sanic-routing to fix path issues plus lookahead / lookbehind support
* Update setup.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* style(app,blueprints): add some type hints (#2196)
* style(app,blueprints): add some type hints
* style(app): option is Any
* style(blueprints): url prefix default value is ``""``
* style(app): backward compatible
* style(app): backward compatible
* style(blueprints): defult is None
* style(app): apply code style (black)
* Update some CC config (#2199)
* Update README.rst
* raise exception for `_static_request_handler` unknown exception; add test with custom error (#2195)
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Change dumps to AnyStr (#2193)
* HTTP tests (#2194)
* Fix issues with after request handling in HTTP pipelining (#2201)
* Clean up after a request is complete, before the next pipelined request.
* Limit the size of request body consumed after handler has finished.
* Linter error.
* Add unit test re: bad headers
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update CHANGELOG
* Log remote address if available (#2207)
* Log remote address if available
* Add tests
* Fix testing version
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Fixed for handling exceptions of asgi app call. (#2211)
@cansarigol3megawatt Thanks for looking into this and getting the quick turnaround on this. I will :cherries: pick this into the 21.6 branch and get it out a little later tonight.
* Signals Integration (#2160)
* Update some tests
* Resolve #2122 route decorator returning tuple
* Use rc sanic-routing version
* Update unit tests to <:str>
* Minimal working version with some signals implemented
* Add more http signals
* Update ASGI and change listeners to signals
* Allow for dynamic ODE signals
* Allow signals to be stacked
* Begin tests
* Prioritize match_info on keyword argument injection
* WIP on tests
* Compat with signals
* Work through some test coverage
* Passing tests
* Post linting
* Setup proper resets
* coverage reporting
* Fixes from vltr comments
* clear delayed tasks
* Fix bad test
* rm pycache
* uncomment windows tests (#2214)
* Add convenience methods to BP groups (#2209)
* Fix bug where ws exceptions not being logged (#2213)
* Fix bug where ws exceptions not being logged
* Fix t\est
* Style: add type hints (#2217)
* style(routes): add_route argument, return typing
* style(listeners): typing
* style(views): typing as_view
* style(routes): change type hint
* style(listeners): change type hint
* style(routes): change type hint
* add some more types
* Change as_view typing
* Add some cleaner type annotations
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Add default messages to SanicExceptions (#2216)
* Add default messages to SanicExceptions
* Cleaner exception message setting
* Copy Blueprints Implementation (#2184)
* Accept header parsing (#2200)
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Add matching flags for wildcards
* Add mathing controls to accept
* Limit uvicorn 14 in testing
* Add convenience for annotated handlers (#2225)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass (#2229)
* Split HttpProtocol parts into base SanicProtocol and HTTPProtocol subclass.
* lint fixes
* re-black server.py
* Move server.py into its own module (#2230)
* Move server.py into its own module
* Change monkeypatch path on test_logging.py
* Blueprint specific exception handlers (#2208)
* Call abort() on sockets after close() to prevent dangling sockets (#2231)
* Add ability to return Falsey but not-None from handlers (#2236)
* Adds Blueprint Group exception decorator (#2238)
* Add exception decorator
* Added tests
* Fix line too long
* Static DIR and FILE resource types (#2244)
* Explicit static directive for serving file or dir
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
* Close HTTP loop when connection task cancelled (#2245)
* Terminate loop when no transport exists
* Add log when closing HTTP loop because of shutdown
* Add unit test
* New websockets (#2158)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Account for BP with exception handler but no routes (#2246)
* Don't log "enabled" if auto-reload disabled (#2247)
Fixes #2240
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* Smarter auto fallback (#2162)
* Smarter auto fallback
* remove config from blueprints
* Add tests for error formatting
* Add check for proper format
* Fix some tests
* Add some tests
* docstring
* Add accept matching
* Add some more tests on matching
* Fix contains bug, earlier return on MediaType eq
* Add matching flags for wildcards
* Add mathing controls to accept
* Cleanup dev cruft
* Add cleanup and resolve OSError relating to test implementation
* Fix test
* Fix some typos
* Some fixes to the new Websockets impl (#2248)
* First attempt at new Websockets implementation based on websockets >= 9.0, with sans-i/o features. Requires more work.
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* Update sanic/websocket.py
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
* wip, update websockets code to new Sans/IO API
* Refactored new websockets impl into own modules
Incorporated other suggestions made by team
* Another round of work on the new websockets impl
* Added websocket_timeout support (matching previous/legacy support)
* Lots more comments
* Incorporated suggested changes from previous round of review
* Changed RuntimeError usage to ServerError
* Changed SanicException usage to ServerError
* Removed some redundant asserts
* Change remaining asserts to ServerErrors
* Fixed some timeout handling issues
* Fixed websocket.close() handling, and made it more robust
* Made auto_close task smarter and more error-resilient
* Made fail_connection routine smarter and more error-resilient
* Further new websockets impl fixes
* Update compatibility with Websockets v10
* Track server connection state in a more precise way
* Try to handle the shutdown process more gracefully
* Add a new end_connection() helper, to use as an alterative to close() or fail_connection()
* Kill the auto-close task and keepalive-timeout task when sanic is shutdown
* Deprecate WEBSOCKET_READ_LIMIT and WEBSOCKET_WRITE_LIMIT configs, they are not used in this implementation.
* Change a warning message to debug level
Remove default values for deprecated websocket parameters
* Fix flake8 errors
* Fix a couple of missed failing tests
* remove websocket bench from examples
* Integrate suggestions from code reviews
Use Optional[T] instead of union[T,None]
Fix mypy type logic errors
change "is not None" to truthy checks where appropriate
change "is None" to falsy checks were appropriate
Add more debug logging when debug mode is on
Change to using sanic.logger for debug logging rather than error_logger.
* Fix long line lengths of debug messages
Add some new debug messages when websocket IO is paused and unpaused for flow control
Fix websocket example to use app.static()
* remove unused import in websocket example app
* re-run isort after Flake8 fixes
* Some fixes to the new Websockets impl
Will throw WebsocketClosed exception instead of ServerException now when attempting to read or write to closed websocket, this makes it easier to catch
The various ws.recv() methods now have the ability to raise CancelledError into your websocket handler
Fix a niche close-socket negotiation bug
Fix bug where http protocol thought the websocket never sent any response.
Allow data to still send in some cases after websocket enters CLOSING state.
Fix some badly formatted and badly placed comments
* allow eof_received to send back data too, if the connection is in CLOSING state
Co-authored-by: Adam Hopkins <adam@amhopkins.com>
Co-authored-by: Adam Hopkins <admhpkns@gmail.com>
* 21.9 release docs (#2218)
* Beging 21.9 release docs
* Add PRs to changelog
* Change deprecation version
* Update logging tests
* Bump version
* Update changelog
* Change dev install command (#2251)
Co-authored-by: Zhiwei <zhi.wei.liang@outlook.com>
Co-authored-by: L. Kärkkäinen <98187+Tronic@users.noreply.github.com>
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
Co-authored-by: Robert Palmer <robd003@users.noreply.github.com>
Co-authored-by: Ryu JuHeon <saidbysolo@gmail.com>
Co-authored-by: gluhar2006 <49654448+gluhar2006@users.noreply.github.com>
Co-authored-by: n.feofanov <n.feofanov@visionlabs.ru>
Co-authored-by: Néstor Pérez <25409753+prryplatypus@users.noreply.github.com>
Co-authored-by: Can Sarigol <56863826+cansarigol3megawatt@users.noreply.github.com>
Co-authored-by: Zhiwei <chihwei.public@outlook.com>
Co-authored-by: YongChan Cho <h3236516@gmail.com>
Co-authored-by: Zhiwei <zhiwei@sinatra.ai>
Co-authored-by: Ashley Sommer <ashleysommer@gmail.com>
Co-authored-by: anbuhckr <36891836+anbuhckr@users.noreply.github.com>
Co-authored-by: anbuhckr <miki.suhendra@gmail.com>
2021-10-02 19:55:23 +01:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
|
|
async def test_missing_startup_raises_exception(app):
|
|
|
|
@app.listener("before_server_start")
|
|
|
|
async def init_db(app, loop):
|
|
|
|
...
|
|
|
|
|
|
|
|
srv = await app.create_server(
|
|
|
|
debug=True, return_asyncio_server=True, port=PORT
|
|
|
|
)
|
|
|
|
|
|
|
|
with pytest.raises(SanicException):
|
|
|
|
await srv.before_start()
|