From 19652d6cbe1fc4f48c52e23d1e69ff51bab3a534 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Wed, 23 Dec 2020 12:53:28 -0800 Subject: [PATCH] swap uvicorn out for hypercorn uvicorn is subjectively nicer to play with for local dev work, but hypercorn is required in order to do HTTP/2 which is fairly performance-important. Signed-off-by: Kevin Morris Signed-off-by: Lukas Fleischer Co-authored-by: Eli Schwartz Signed-off-by: Eli Schwartz --- .gitlab-ci.yml | 2 +- INSTALL | 3 ++- aurweb/spawn.py | 14 ++++++++++---- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9dc951aa..aff18a83 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -11,7 +11,7 @@ before_script: base-devel git gpgme protobuf pyalpm python-mysql-connector python-pygit2 python-srcinfo python-bleach python-markdown python-sqlalchemy python-alembic python-pytest python-werkzeug - python-pytest-tap python-fastapi uvicorn nginx python-authlib + python-pytest-tap python-fastapi hypercorn nginx python-authlib python-itsdangerous python-httpx test: diff --git a/INSTALL b/INSTALL index 7087aca2..a32d6f5a 100644 --- a/INSTALL +++ b/INSTALL @@ -48,7 +48,8 @@ read the instructions below. 4) Install Python modules and dependencies: # pacman -S python-mysql-connector python-pygit2 python-srcinfo python-sqlalchemy \ - python-bleach python-markdown python-alembic + python-bleach python-markdown python-alembic python-jinja \ + python-itsdangerous python-authlib python-httpx hypercorn # python3 setup.py install 5) Create a new MySQL database and a user and import the aurweb SQL schema: diff --git a/aurweb/spawn.py b/aurweb/spawn.py index 3c5130d7..f7c07dd7 100644 --- a/aurweb/spawn.py +++ b/aurweb/spawn.py @@ -24,6 +24,7 @@ import aurweb.schema children = [] temporary_dir = None verbosity = 0 +asgi_backend = '' class ProcessExceptions(Exception): @@ -31,6 +32,7 @@ class ProcessExceptions(Exception): Compound exception used by stop() to list all the errors that happened when terminating child processes. """ + def __init__(self, message, exceptions): self.message = message self.exceptions = exceptions @@ -110,10 +112,11 @@ def start(): # FastAPI host, port = aurweb.config.get("fastapi", "bind_address").rsplit(":", 1) - spawn_child(["python", "-m", "uvicorn", - "--host", host, - "--port", port, - "aurweb.asgi:app"]) + if asgi_backend == "hypercorn": + portargs = ["-b", f"{host}:{port}"] + elif asgi_backend == "uvicorn": + portargs = ["--host", host, "--port", port] + spawn_child(["python", "-m", asgi_backend] + portargs + ["aurweb.asgi:app"]) # nginx spawn_child(["nginx", "-p", temporary_dir, "-c", generate_nginx_config()]) @@ -158,8 +161,11 @@ if __name__ == '__main__': description='Start aurweb\'s test server.') parser.add_argument('-v', '--verbose', action='count', default=0, help='increase verbosity') + parser.add_argument('-b', '--backend', choices=['hypercorn', 'uvicorn'], default='hypercorn', + help='asgi backend used to launch the python server') args = parser.parse_args() verbosity = args.verbose + asgi_backend = args.backend with tempfile.TemporaryDirectory(prefix="aurweb-") as tmpdirname: temporary_dir = tmpdirname start()