Merge branch 'master' of github.com:huge-success/sanic
This commit is contained in:
		| @@ -283,6 +283,13 @@ class Blueprint: | ||||
|             strict_slashes = self.strict_slashes | ||||
|  | ||||
|         def decorator(handler): | ||||
|             nonlocal uri | ||||
|             nonlocal host | ||||
|             nonlocal strict_slashes | ||||
|             nonlocal version | ||||
|             nonlocal name | ||||
|  | ||||
|             name = f"{self.name}.{name or handler.__name__}" | ||||
|             route = FutureRoute( | ||||
|                 handler, uri, [], host, strict_slashes, False, version, name | ||||
|             ) | ||||
|   | ||||
| @@ -253,7 +253,11 @@ def test_several_bp_with_host(app): | ||||
|  | ||||
|  | ||||
| def test_bp_with_host_list(app): | ||||
|     bp = Blueprint("test_bp_host", url_prefix="/test1", host=["example.com", "sub.example.com"]) | ||||
|     bp = Blueprint( | ||||
|         "test_bp_host", | ||||
|         url_prefix="/test1", | ||||
|         host=["example.com", "sub.example.com"], | ||||
|     ) | ||||
|  | ||||
|     @bp.route("/") | ||||
|     def handler1(request): | ||||
| @@ -279,8 +283,16 @@ def test_bp_with_host_list(app): | ||||
|  | ||||
|  | ||||
| def test_several_bp_with_host_list(app): | ||||
|     bp = Blueprint("test_text", url_prefix="/test", host=["example.com", "sub.example.com"]) | ||||
|     bp2 = Blueprint("test_text2", url_prefix="/test", host=["sub1.example.com", "sub2.example.com"]) | ||||
|     bp = Blueprint( | ||||
|         "test_text", | ||||
|         url_prefix="/test", | ||||
|         host=["example.com", "sub.example.com"], | ||||
|     ) | ||||
|     bp2 = Blueprint( | ||||
|         "test_text2", | ||||
|         url_prefix="/test", | ||||
|         host=["sub1.example.com", "sub2.example.com"], | ||||
|     ) | ||||
|  | ||||
|     @bp.route("/") | ||||
|     def handler(request): | ||||
|   | ||||
| @@ -88,10 +88,11 @@ def test_pickle_app_with_bp(app, protocol): | ||||
|     assert up_p_app.is_request_stream is False | ||||
|     assert response.text == "Hello" | ||||
|  | ||||
|  | ||||
| @pytest.mark.parametrize("protocol", [3, 4]) | ||||
| def test_pickle_app_with_static(app, protocol): | ||||
|     app.route("/")(handler) | ||||
|     app.static('/static', "/tmp/static") | ||||
|     app.static("/static", "/tmp/static") | ||||
|     p_app = pickle.dumps(app, protocol=protocol) | ||||
|     del app | ||||
|     up_p_app = pickle.loads(p_app) | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| import os | ||||
| import secrets | ||||
| import sys | ||||
| from contextlib import suppress | ||||
|  | ||||
| from contextlib import suppress | ||||
| from subprocess import PIPE, Popen, TimeoutExpired | ||||
| from tempfile import TemporaryDirectory | ||||
| from textwrap import dedent | ||||
| @@ -23,16 +23,20 @@ try: | ||||
| except ImportError: | ||||
|     flags = 0 | ||||
|  | ||||
|  | ||||
| def terminate(proc): | ||||
|     if flags: | ||||
|         proc.send_signal(CTRL_BREAK_EVENT) | ||||
|     else: | ||||
|         proc.terminate() | ||||
|  | ||||
|  | ||||
| def write_app(filename, **runargs): | ||||
|     text = secrets.token_urlsafe() | ||||
|     with open(filename, "w") as f: | ||||
|         f.write(dedent(f"""\ | ||||
|         f.write( | ||||
|             dedent( | ||||
|                 f"""\ | ||||
|             import os | ||||
|             from sanic import Sanic | ||||
|  | ||||
| @@ -45,9 +49,11 @@ def write_app(filename, **runargs): | ||||
|             if __name__ == "__main__": | ||||
|                 app.run(**{runargs!r}) | ||||
|             """ | ||||
|         )) | ||||
|             ) | ||||
|         ) | ||||
|     return text | ||||
|  | ||||
|  | ||||
| def scanner(proc): | ||||
|     for line in proc.stdout: | ||||
|         line = line.decode().strip() | ||||
| @@ -59,14 +65,26 @@ def scanner(proc): | ||||
| argv = dict( | ||||
|     script=[sys.executable, "reloader.py"], | ||||
|     module=[sys.executable, "-m", "reloader"], | ||||
|     sanic=[sys.executable, "-m", "sanic", "--port", "42104", "--debug", "reloader.app"], | ||||
|     sanic=[ | ||||
|         sys.executable, | ||||
|         "-m", | ||||
|         "sanic", | ||||
|         "--port", | ||||
|         "42104", | ||||
|         "--debug", | ||||
|         "reloader.app", | ||||
|     ], | ||||
| ) | ||||
|  | ||||
| @pytest.mark.parametrize("runargs, mode", [ | ||||
|     (dict(port=42102, auto_reload=True), "script"), | ||||
|     (dict(port=42103, debug=True), "module"), | ||||
|     (dict(), "sanic"), | ||||
| ]) | ||||
|  | ||||
| @pytest.mark.parametrize( | ||||
|     "runargs, mode", | ||||
|     [ | ||||
|         (dict(port=42102, auto_reload=True), "script"), | ||||
|         (dict(port=42103, debug=True), "module"), | ||||
|         (dict(), "sanic"), | ||||
|     ], | ||||
| ) | ||||
| async def test_reloader_live(runargs, mode): | ||||
|     with TemporaryDirectory() as tmpdir: | ||||
|         filename = os.path.join(tmpdir, "reloader.py") | ||||
|   | ||||
| @@ -614,7 +614,7 @@ def test_response_body_bytes_deprecated(app): | ||||
|     with warnings.catch_warnings(record=True) as w: | ||||
|         warnings.simplefilter("always") | ||||
|  | ||||
|         HTTPResponse(body_bytes=b'bytes') | ||||
|         HTTPResponse(body_bytes=b"bytes") | ||||
|  | ||||
|         assert len(w) == 1 | ||||
|         assert issubclass(w[0].category, DeprecationWarning) | ||||
|   | ||||
| @@ -1,3 +1,8 @@ | ||||
| import asyncio | ||||
|  | ||||
| from sanic.blueprints import Blueprint | ||||
|  | ||||
|  | ||||
| def test_routes_with_host(app): | ||||
|     @app.route("/") | ||||
|     @app.route("/", name="hostindex", host="example.com") | ||||
| @@ -13,3 +18,46 @@ def test_routes_with_host(app): | ||||
|         app.url_for("hostpath", _external=True) | ||||
|         == "http://path.example.com/path" | ||||
|     ) | ||||
|  | ||||
|  | ||||
| def test_websocket_bp_route_name(app): | ||||
|     """Tests that blueprint websocket route is named.""" | ||||
|     event = asyncio.Event() | ||||
|     bp = Blueprint("test_bp", url_prefix="/bp") | ||||
|  | ||||
|     @bp.get("/main") | ||||
|     async def main(request): | ||||
|         ... | ||||
|  | ||||
|     @bp.websocket("/route") | ||||
|     async def test_route(request, ws): | ||||
|         event.set() | ||||
|  | ||||
|     @bp.websocket("/route2") | ||||
|     async def test_route2(request, ws): | ||||
|         event.set() | ||||
|  | ||||
|     @bp.websocket("/route3", name="foobar_3") | ||||
|     async def test_route3(request, ws): | ||||
|         event.set() | ||||
|  | ||||
|     app.blueprint(bp) | ||||
|  | ||||
|     uri = app.url_for("test_bp.main") | ||||
|     assert uri == "/bp/main" | ||||
|  | ||||
|     uri = app.url_for("test_bp.test_route") | ||||
|     assert uri == "/bp/route" | ||||
|     request, response = app.test_client.websocket(uri) | ||||
|     assert response.opened is True | ||||
|     assert event.is_set() | ||||
|  | ||||
|     event.clear() | ||||
|     uri = app.url_for("test_bp.test_route2") | ||||
|     assert uri == "/bp/route2" | ||||
|     request, response = app.test_client.websocket(uri) | ||||
|     assert response.opened is True | ||||
|     assert event.is_set() | ||||
|  | ||||
|     uri = app.url_for("test_bp.foobar_3") | ||||
|     assert uri == "/bp/route3" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Adam Hopkins
					Adam Hopkins