diff --git a/sanic/cli/app.py b/sanic/cli/app.py index 83410bb3..19847dee 100644 --- a/sanic/cli/app.py +++ b/sanic/cli/app.py @@ -59,10 +59,13 @@ Or, a path to a directory to run as a simple HTTP server: os.environ.get("SANIC_RELOADER_PROCESS", "") != "true" ) self.args: List[Any] = [] + self.groups: List[Group] = [] def attach(self): for group in Group._registry: - group.create(self.parser).attach() + instance = group.create(self.parser) + instance.attach() + self.groups.append(instance) def run(self): # This is to provide backwards compat -v to display version @@ -142,6 +145,8 @@ Or, a path to a directory to run as a simple HTTP server: return app def _build_run_kwargs(self): + for group in self.groups: + group.prepare(self.args) ssl: Union[None, dict, str, list] = [] if self.args.tlshost: ssl.append(None) diff --git a/sanic/cli/arguments.py b/sanic/cli/arguments.py index b56132cc..f443dbda 100644 --- a/sanic/cli/arguments.py +++ b/sanic/cli/arguments.py @@ -1,6 +1,7 @@ from __future__ import annotations from argparse import ArgumentParser, _ArgumentGroup +from os import getpid from typing import List, Optional, Type, Union from sanic_routing import __version__ as __routing_version__ # type: ignore @@ -38,6 +39,9 @@ class Group: "--no-" + args[0][2:], *args[1:], action="store_false", **kwargs ) + def prepare(self, args) -> None: + ... + class GeneralGroup(Group): name = None @@ -91,21 +95,33 @@ class HTTPVersionGroup(Group): group.add_argument( "--http", dest="http", + action="append", type=int, - default=1, + default=0, help=( - "Which HTTP version to use: HTTP/1.1 or HTTP/3. Value should " - "be either 1 or 3 [default 1]" + "Which HTTP version to use: HTTP/1.1 or HTTP/3. Value should\n" + "be either 0, 1, or 3, where '0' means use whatever versions\n" + "are available [default 0]" ), ) + group.add_argument( + "-1", + dest="http", + action="append_const", + const=1, + help=("Run Sanic server using HTTP/1.1"), + ) group.add_argument( "-3", dest="http", - action="store_const", + action="append_const", const=3, help=("Run Sanic server using HTTP/3"), ) + def prepare(self, args): + print(args.http) + class SocketGroup(Group): name = "Socket binding"