]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: replaced Click with argparse to "solve" issues with encoding
authorVasek Sraier <git@vakabus.cz>
Thu, 9 Jun 2022 20:12:38 +0000 (22:12 +0200)
committerVasek Sraier <git@vakabus.cz>
Sun, 31 Jul 2022 15:26:39 +0000 (17:26 +0200)
Click is refusing to run in environments with misconfigured locale and default encoding.
https://click.palletsprojects.com/en/8.1.x/unicode-support/
Refusing to run might make sense for CLI utility, but not for a service which is not properly interactive.

manager/knot_resolver_manager/__main__.py

index bfcf0d81a46aaeb0da4e239e63715c9386a52f3a..d1ed6f26054564ec690efe885488524c3165be59 100644 (file)
@@ -1,45 +1,30 @@
+import argparse
 import sys
 from pathlib import Path
-from typing import Optional
-
-import click
 
 from knot_resolver_manager import compat
 from knot_resolver_manager.constants import DEFAULT_MANAGER_CONFIG_FILE
-from knot_resolver_manager.kresd_controller import list_controller_names
 from knot_resolver_manager.log import logger_startup
 from knot_resolver_manager.server import start_server
 
 
-@click.command()
-@click.option(
-    "--config",
-    "-c",
-    type=str,
-    nargs=1,
-    required=False,
-    default=None,
-    help="Overrides default config location at '" + str(DEFAULT_MANAGER_CONFIG_FILE) + "'",
-)
-@click.option("--list-backends", "-l", type=bool, is_flag=True, default=False)
-def main(config: Optional[str], list_backends: bool) -> int:
-    # pylint: disable=expression-not-assigned
-
-    """Knot Resolver Manager
-
-    [listen] ... numeric port or a path for a Unix domain socket, default is """ + str(
-        DEFAULT_MANAGER_CONFIG_FILE
+def parse_args() -> argparse.Namespace:
+    parser = argparse.ArgumentParser(description="Knot Resolver - caching DNS resolver")
+    parser.add_argument(
+        "-c",
+        "--config",
+        help="Config file to load. Overrides default config location at '" + str(DEFAULT_MANAGER_CONFIG_FILE) + "'",
+        type=str,
+        nargs=1,
+        required=False,
+        default=None,
     )
+    return parser.parse_args()
 
-    # print list of backends and exit (if specified)
-    if list_backends:
-        click.echo("Available subprocess controllers are:")
-        for n in list_controller_names():
-            click.echo(f" - {n}")
-        sys.exit(0)
 
+def main(args: argparse.Namespace) -> int:
     # where to look for config
-    config_path = DEFAULT_MANAGER_CONFIG_FILE if config is None else Path(config)
+    config_path = DEFAULT_MANAGER_CONFIG_FILE if args.config is None else Path(args.config[0])
 
     exit_code = compat.asyncio.run(start_server(config=config_path))
     sys.exit(exit_code)
@@ -50,4 +35,4 @@ if __name__ == "__main__":
     logger_startup()
 
     # run the main
-    main()  # pylint: disable=no-value-for-parameter
+    main(parse_args())