From: Frantisek Tobias Date: Fri, 11 Oct 2024 08:36:47 +0000 (+0200) Subject: kresctl: tab-completion: remove redundant Command.completion overrides in all command... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fenvironments%2Fdocs-develop-kres-ph09xl%2Fdeployments%2F5321;p=thirdparty%2Fknot-resolver.git kresctl: tab-completion: remove redundant Command.completion overrides in all commands except config --- diff --git a/python/knot_resolver/client/command.py b/python/knot_resolver/client/command.py index c86252b23..814c30d4a 100644 --- a/python/knot_resolver/client/command.py +++ b/python/knot_resolver/client/command.py @@ -136,6 +136,5 @@ class Command(ABC): raise NotImplementedError() @staticmethod - @abstractmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - raise NotImplementedError() + def completion(parser: argparse.ArgumentParser) -> CompWords: + return get_subparsers_words(parser._actions) # pylint: disable=W0212 diff --git a/python/knot_resolver/client/commands/cache.py b/python/knot_resolver/client/commands/cache.py index b9c2e4662..0fc2cb5a7 100644 --- a/python/knot_resolver/client/commands/cache.py +++ b/python/knot_resolver/client/commands/cache.py @@ -1,9 +1,9 @@ import argparse import sys from enum import Enum -from typing import Any, Dict, List, Optional, Tuple, Type +from typing import Any, Dict, Optional, Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, get_subparsers_words, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command from knot_resolver.datamodel.cache_schema import CacheClearRPCSchema from knot_resolver.utils.modeling.exceptions import AggregateDataValidationError, DataValidationError from knot_resolver.utils.modeling.parsing import DataFormat, parse_json @@ -97,10 +97,6 @@ class CacheCommand(Command): return cache_parser, CacheCommand - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return get_subparsers_words(parser._actions) - def run(self, args: CommandArgs) -> None: if not self.operation: args.subparser.print_help() diff --git a/python/knot_resolver/client/commands/completion.py b/python/knot_resolver/client/commands/completion.py index ecdc936cf..6ac0ef91f 100644 --- a/python/knot_resolver/client/commands/completion.py +++ b/python/knot_resolver/client/commands/completion.py @@ -11,6 +11,7 @@ from knot_resolver.client.command import ( get_subparsers_words, register_command, ) +from knot_resolver.client.commands.config import ConfigCommand class Shells(Enum): @@ -58,10 +59,6 @@ class CompletionCommand(Command): return completion, CompletionCommand - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return get_subparsers_words(parser._actions) - def run(self, args: CommandArgs) -> None: subparsers = args.parser._subparsers words: CompWords = {} @@ -77,7 +74,10 @@ class CompletionCommand(Command): cmd: Command = get_subparser_command(subparser) subparser_args = self.comp_args[self.comp_args.index(uarg) + 1 :] if subparser_args or self.space: - words = cmd.completion(subparser_args, subparser) + if isinstance(cmd, ConfigCommand): + words = cmd.completion(subparser, subparser_args) + else: + words = cmd.completion(subparser) break elif uarg in ["-s", "--socket", "-c", "--config"]: # if arg is socket config, skip next arg @@ -87,7 +87,6 @@ class CompletionCommand(Command): # uarg is valid (complete) arg, continue continue - # print completion words # based on required bash/fish shell format if self.shell == Shells.BASH: diff --git a/python/knot_resolver/client/commands/config.py b/python/knot_resolver/client/commands/config.py index c3c976e46..438bb3999 100644 --- a/python/knot_resolver/client/commands/config.py +++ b/python/knot_resolver/client/commands/config.py @@ -169,8 +169,9 @@ class ConfigCommand(Command): return config, ConfigCommand @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - # words = parser_words(parser._actions) # pylint: disable=W0212 + def completion(parser: argparse.ArgumentParser, args: Optional[List[str]] = None) -> CompWords: + if args is None: + return Command.completion(parser) # for arg in args: # if arg in words: diff --git a/python/knot_resolver/client/commands/convert.py b/python/knot_resolver/client/commands/convert.py index 412ed334c..a2173b74b 100644 --- a/python/knot_resolver/client/commands/convert.py +++ b/python/knot_resolver/client/commands/convert.py @@ -1,9 +1,9 @@ import argparse import sys from pathlib import Path -from typing import List, Optional, Tuple, Type +from typing import Optional, Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command from knot_resolver.datamodel import KresConfig from knot_resolver.datamodel.globals import Context, reset_global_validation_context, set_global_validation_context from knot_resolver.utils.modeling import try_to_parse @@ -50,10 +50,6 @@ class ConvertCommand(Command): return convert, ConvertCommand - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return {} - def run(self, args: CommandArgs) -> None: with open(self.input_file, "r") as f: data = f.read() diff --git a/python/knot_resolver/client/commands/help.py b/python/knot_resolver/client/commands/help.py index 87306c2ab..e7ab1b4fe 100644 --- a/python/knot_resolver/client/commands/help.py +++ b/python/knot_resolver/client/commands/help.py @@ -1,7 +1,7 @@ import argparse -from typing import List, Tuple, Type +from typing import Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command @register_command @@ -12,10 +12,6 @@ class HelpCommand(Command): def run(self, args: CommandArgs) -> None: args.parser.print_help() - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return {} - @staticmethod def register_args_subparser( subparser: "argparse._SubParsersAction[argparse.ArgumentParser]", diff --git a/python/knot_resolver/client/commands/metrics.py b/python/knot_resolver/client/commands/metrics.py index 058cad8b2..b48e9c573 100644 --- a/python/knot_resolver/client/commands/metrics.py +++ b/python/knot_resolver/client/commands/metrics.py @@ -1,8 +1,8 @@ import argparse import sys -from typing import List, Optional, Tuple, Type +from typing import Optional, Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command from knot_resolver.utils.modeling.parsing import DataFormat, parse_json from knot_resolver.utils.requests import request @@ -42,10 +42,6 @@ class MetricsCommand(Command): ) return metrics, MetricsCommand - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return {} - def run(self, args: CommandArgs) -> None: response = request(args.socket, "GET", "metrics/prometheus" if self.prometheus else "metrics/json") diff --git a/python/knot_resolver/client/commands/reload.py b/python/knot_resolver/client/commands/reload.py index c1350fc55..6e1f2ddbc 100644 --- a/python/knot_resolver/client/commands/reload.py +++ b/python/knot_resolver/client/commands/reload.py @@ -1,8 +1,8 @@ import argparse import sys -from typing import List, Tuple, Type +from typing import Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command from knot_resolver.utils.requests import request @@ -24,10 +24,6 @@ class ReloadCommand(Command): return reload, ReloadCommand - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return {} - def run(self, args: CommandArgs) -> None: response = request(args.socket, "POST", "reload") diff --git a/python/knot_resolver/client/commands/schema.py b/python/knot_resolver/client/commands/schema.py index 0c63f398e..85e62ed44 100644 --- a/python/knot_resolver/client/commands/schema.py +++ b/python/knot_resolver/client/commands/schema.py @@ -1,9 +1,9 @@ import argparse import json import sys -from typing import List, Optional, Tuple, Type +from typing import Optional, Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command from knot_resolver.datamodel import kres_config_json_schema from knot_resolver.utils.requests import request @@ -33,11 +33,6 @@ class SchemaCommand(Command): return schema, SchemaCommand - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return {} - # return parser_words(parser._actions) # pylint: disable=W0212 - def run(self, args: CommandArgs) -> None: if self.live: response = request(args.socket, "GET", "schema") diff --git a/python/knot_resolver/client/commands/stop.py b/python/knot_resolver/client/commands/stop.py index 35baf36ca..37748e1cc 100644 --- a/python/knot_resolver/client/commands/stop.py +++ b/python/knot_resolver/client/commands/stop.py @@ -1,8 +1,8 @@ import argparse import sys -from typing import List, Tuple, Type +from typing import Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command from knot_resolver.utils.requests import request @@ -26,7 +26,3 @@ class StopCommand(Command): if response.status != 200: print(response, file=sys.stderr) sys.exit(1) - - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return {} diff --git a/python/knot_resolver/client/commands/validate.py b/python/knot_resolver/client/commands/validate.py index f74777481..de1b44e1d 100644 --- a/python/knot_resolver/client/commands/validate.py +++ b/python/knot_resolver/client/commands/validate.py @@ -1,9 +1,9 @@ import argparse import sys from pathlib import Path -from typing import List, Tuple, Type +from typing import Tuple, Type -from knot_resolver.client.command import Command, CommandArgs, CompWords, register_command +from knot_resolver.client.command import Command, CommandArgs, register_command from knot_resolver.datamodel import KresConfig from knot_resolver.datamodel.globals import Context, reset_global_validation_context, set_global_validation_context from knot_resolver.utils.modeling import try_to_parse @@ -39,10 +39,6 @@ class ValidateCommand(Command): return validate, ValidateCommand - @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: - return {} - def run(self, args: CommandArgs) -> None: if self.input_file: with open(self.input_file, "r") as f: