diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9dc951aa4b2ffc58197e1eff3976f2005436cd66..aff18a8396504e61b5493bb4f89e0fbc4febd437 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 7087aca2e8b7bf0ddf414b6e3d56edce8bd4cd95..a32d6f5ad6e327116098f10f6056066b72c8f621 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 3c5130d7253ad7bb11d1231c7b8694d328aeb6d9..f7c07dd7a7ba745773720b0e1a9294d9b8f43f59 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()