From ffc1ae7a11b5665c936d80cc4bc5f5d5ce82290e Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ale=C5=A1=20Mr=C3=A1zek?= Date: Fri, 2 Dec 2022 17:11:39 +0100 Subject: [PATCH] manager: client: uknown_args removed --- .../cli/cmd/completion.py | 33 ++++++++++--------- .../knot_resolver_manager/cli/cmd/config.py | 12 +++---- .../knot_resolver_manager/cli/cmd/convert.py | 10 +++--- manager/knot_resolver_manager/cli/cmd/exit.py | 10 +++--- .../knot_resolver_manager/cli/cmd/metrics.py | 10 +++--- .../knot_resolver_manager/cli/cmd/reload.py | 10 +++--- .../knot_resolver_manager/cli/cmd/schema.py | 11 +++---- manager/knot_resolver_manager/cli/cmd/stop.py | 10 +++--- .../knot_resolver_manager/cli/cmd/validate.py | 10 +++--- manager/knot_resolver_manager/cli/command.py | 6 ++-- manager/knot_resolver_manager/cli/kresctl.py | 5 +-- manager/knot_resolver_manager/cli/main.py | 4 +-- 12 files changed, 66 insertions(+), 65 deletions(-) diff --git a/manager/knot_resolver_manager/cli/cmd/completion.py b/manager/knot_resolver_manager/cli/cmd/completion.py index 4e4146ac9..56286f6fc 100644 --- a/manager/knot_resolver_manager/cli/cmd/completion.py +++ b/manager/knot_resolver_manager/cli/cmd/completion.py @@ -1,8 +1,8 @@ import argparse from enum import Enum -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Optional, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command class Shells(Enum): @@ -10,9 +10,6 @@ class Shells(Enum): FISH = 1 -CompWords = Dict[str, Optional[str]] - - def _parser_top_lvl_words(actions: List[argparse.Action]) -> CompWords: words: CompWords = {} @@ -26,14 +23,14 @@ def _parser_top_lvl_words(actions: List[argparse.Action]) -> CompWords: return words -def _subparser_words(unknown_args: List[str], actions: List[argparse.Action]) -> Optional[CompWords]: - for arg in unknown_args: +def _subparser_words(comp_args: List[str], actions: List[argparse.Action]) -> Optional[CompWords]: + for arg in comp_args: for action in actions: if isinstance(action, argparse._SubParsersAction) and arg in action.choices: subparser: argparse.ArgumentParser = action.choices[arg] command: Command = subparser._defaults["command"] - subparser_args = unknown_args[unknown_args.index(arg) + 1 :] + subparser_args = comp_args[comp_args.index(arg) + 1 :] if subparser_args: return command.completion(subparser_args, subparser) return None @@ -41,14 +38,14 @@ def _subparser_words(unknown_args: List[str], actions: List[argparse.Action]) -> @register_command class CompletionCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: - super().__init__(namespace, unknown_args) + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) self.shell: Shells = namespace.shell self.space = namespace.space - self.unknown_args: List[str] = unknown_args + self.comp_args: List[str] = namespace.comp_args if self.space: - self.unknown_args.append("") + self.comp_args.append("") @staticmethod def register_args_subparser( @@ -62,6 +59,12 @@ class CompletionCommand(Command): action="store_true", default=False, ) + completion.add_argument( + "comp_args", + type=str, + help="arguments to complete", + nargs="*", + ) shells_dest = "shell" shells = completion.add_mutually_exclusive_group() @@ -71,8 +74,8 @@ class CompletionCommand(Command): return completion, CompletionCommand @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: - comp: Dict[str, Optional[str]] = {} + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: + comp: CompWords = {} for action in parser._actions: for opt in action.option_strings: @@ -84,7 +87,7 @@ class CompletionCommand(Command): words: CompWords = {} if parser._subparsers: - subparser_words = _subparser_words(self.unknown_args, parser._subparsers._actions) + subparser_words = _subparser_words(self.comp_args, parser._subparsers._actions) if subparser_words is None: # parser top level options/commands diff --git a/manager/knot_resolver_manager/cli/cmd/config.py b/manager/knot_resolver_manager/cli/cmd/config.py index 84673e283..a454dd574 100644 --- a/manager/knot_resolver_manager/cli/cmd/config.py +++ b/manager/knot_resolver_manager/cli/cmd/config.py @@ -6,7 +6,7 @@ from typing import Any, Dict, List, Optional, Tuple, Type import yaml from typing_extensions import Literal -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command from knot_resolver_manager.datamodel.config_schema import KresConfig from knot_resolver_manager.utils.modeling import try_to_parse from knot_resolver_manager.utils.requests import request @@ -40,14 +40,14 @@ def reformat(data: str, req_format: Formats) -> str: return json.dumps(dict, indent=4) -def properties_comp(props: Dict[str, Any]) -> Dict[str, Optional[str]]: - comp: Dict[str, Optional[str]] = {} +def properties_comp(props: Dict[str, Any]) -> CompWords: + comp: CompWords = {} for name, prop in props.items(): comp[name] = prop["description"] if "description" in prop else None return comp -def node_comp(nodes: List[str], props: Dict[str, Any]) -> Dict[str, Optional[str]]: +def node_comp(nodes: List[str], props: Dict[str, Any]) -> CompWords: if len(nodes) > 1 and nodes[0] in props: prop = props[nodes[0]] @@ -77,8 +77,8 @@ def subparser_comp(parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: @register_command class ConfigCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: - super().__init__(namespace, unknown_args) + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) self.path: str = str(namespace.path) self.value_or_file: Optional[str] = namespace.value_or_file self.operation: Operations = namespace.operation diff --git a/manager/knot_resolver_manager/cli/cmd/convert.py b/manager/knot_resolver_manager/cli/cmd/convert.py index a820a5aaa..729e6272c 100644 --- a/manager/knot_resolver_manager/cli/cmd/convert.py +++ b/manager/knot_resolver_manager/cli/cmd/convert.py @@ -1,7 +1,7 @@ import argparse -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Optional, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command from knot_resolver_manager.datamodel import KresConfig from knot_resolver_manager.utils.modeling import try_to_parse from knot_resolver_manager.utils.modeling.exceptions import DataParsingError @@ -9,8 +9,8 @@ from knot_resolver_manager.utils.modeling.exceptions import DataParsingError @register_command class ConvertCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: - super().__init__(namespace, unknown_args) + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) self.input_file: str = namespace.input_file self.output_file: Optional[str] = namespace.output_file @@ -37,7 +37,7 @@ class ConvertCommand(Command): return convert, ConvertCommand @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: return {} def run(self, args: CommandArgs) -> None: diff --git a/manager/knot_resolver_manager/cli/cmd/exit.py b/manager/knot_resolver_manager/cli/cmd/exit.py index 9d351f89c..4f0d37305 100644 --- a/manager/knot_resolver_manager/cli/cmd/exit.py +++ b/manager/knot_resolver_manager/cli/cmd/exit.py @@ -1,20 +1,20 @@ import argparse import sys -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command @register_command class ExitCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: - super().__init__(namespace, unknown_args) + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) def run(self, args: CommandArgs) -> None: sys.exit() @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: return {} @staticmethod diff --git a/manager/knot_resolver_manager/cli/cmd/metrics.py b/manager/knot_resolver_manager/cli/cmd/metrics.py index 328440246..81fc88285 100644 --- a/manager/knot_resolver_manager/cli/cmd/metrics.py +++ b/manager/knot_resolver_manager/cli/cmd/metrics.py @@ -1,16 +1,16 @@ import argparse -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Optional, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command from knot_resolver_manager.utils.requests import request @register_command class MetricsCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: + def __init__(self, namespace: argparse.Namespace) -> None: self.file: Optional[str] = namespace.file - super().__init__(namespace, unknown_args) + super().__init__(namespace) @staticmethod def register_args_subparser( @@ -21,7 +21,7 @@ class MetricsCommand(Command): return metrics, MetricsCommand @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: return {} def run(self, args: CommandArgs) -> None: diff --git a/manager/knot_resolver_manager/cli/cmd/reload.py b/manager/knot_resolver_manager/cli/cmd/reload.py index f5b02ea31..7f6d753a0 100644 --- a/manager/knot_resolver_manager/cli/cmd/reload.py +++ b/manager/knot_resolver_manager/cli/cmd/reload.py @@ -1,14 +1,14 @@ import argparse -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command from knot_resolver_manager.utils.requests import request @register_command class ReloadCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: - super().__init__(namespace, unknown_args) + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) @staticmethod def register_args_subparser( @@ -19,7 +19,7 @@ class ReloadCommand(Command): return reload, ReloadCommand @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: return {} def run(self, args: CommandArgs) -> None: diff --git a/manager/knot_resolver_manager/cli/cmd/schema.py b/manager/knot_resolver_manager/cli/cmd/schema.py index eace243e2..32c14b045 100644 --- a/manager/knot_resolver_manager/cli/cmd/schema.py +++ b/manager/knot_resolver_manager/cli/cmd/schema.py @@ -1,18 +1,17 @@ import argparse import json -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Optional, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command from knot_resolver_manager.datamodel.config_schema import KresConfig @register_command class SchemaCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) self.file: Optional[str] = namespace.file - super().__init__(namespace, unknown_args) - @staticmethod def register_args_subparser( subparser: "argparse._SubParsersAction[argparse.ArgumentParser]", @@ -22,7 +21,7 @@ class SchemaCommand(Command): return schema, SchemaCommand @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: return {} def run(self, args: CommandArgs) -> None: diff --git a/manager/knot_resolver_manager/cli/cmd/stop.py b/manager/knot_resolver_manager/cli/cmd/stop.py index 01e9f43a6..c81eceb0a 100644 --- a/manager/knot_resolver_manager/cli/cmd/stop.py +++ b/manager/knot_resolver_manager/cli/cmd/stop.py @@ -1,14 +1,14 @@ import argparse -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command from knot_resolver_manager.utils.requests import request @register_command class StopCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: - super().__init__(namespace, unknown_args) + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) def run(self, args: CommandArgs) -> None: url = f"{args.socket}/stop" @@ -16,7 +16,7 @@ class StopCommand(Command): print(response) @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: return {} @staticmethod diff --git a/manager/knot_resolver_manager/cli/cmd/validate.py b/manager/knot_resolver_manager/cli/cmd/validate.py index e1457d2e7..9f2f0d880 100644 --- a/manager/knot_resolver_manager/cli/cmd/validate.py +++ b/manager/knot_resolver_manager/cli/cmd/validate.py @@ -1,7 +1,7 @@ import argparse -from typing import Dict, List, Optional, Tuple, Type +from typing import List, Tuple, Type -from knot_resolver_manager.cli.command import Command, CommandArgs, register_command +from knot_resolver_manager.cli.command import Command, CommandArgs, CompWords, register_command from knot_resolver_manager.datamodel import KresConfig from knot_resolver_manager.utils.modeling import try_to_parse from knot_resolver_manager.utils.modeling.exceptions import DataParsingError, DataValidationError @@ -9,8 +9,8 @@ from knot_resolver_manager.utils.modeling.exceptions import DataParsingError, Da @register_command class ValidateCommand(Command): - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: - super().__init__(namespace, unknown_args) + def __init__(self, namespace: argparse.Namespace) -> None: + super().__init__(namespace) self.input_file: str = namespace.input_file @staticmethod @@ -29,7 +29,7 @@ class ValidateCommand(Command): return validate, ValidateCommand @staticmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: return {} def run(self, args: CommandArgs) -> None: diff --git a/manager/knot_resolver_manager/cli/command.py b/manager/knot_resolver_manager/cli/command.py index f3228690e..625ad39d5 100644 --- a/manager/knot_resolver_manager/cli/command.py +++ b/manager/knot_resolver_manager/cli/command.py @@ -6,6 +6,8 @@ from urllib.parse import quote T = TypeVar("T", bound=Type["Command"]) +CompWords = Dict[str, Optional[str]] + _registered_commands: List[Type["Command"]] = [] @@ -43,7 +45,7 @@ class Command(ABC): raise NotImplementedError() @abstractmethod - def __init__(self, namespace: argparse.Namespace, unknown_args: List[str]) -> None: + def __init__(self, namespace: argparse.Namespace) -> None: super().__init__() @abstractmethod @@ -52,5 +54,5 @@ class Command(ABC): @staticmethod @abstractmethod - def completion(args: List[str], parser: argparse.ArgumentParser) -> Dict[str, Optional[str]]: + def completion(args: List[str], parser: argparse.ArgumentParser) -> CompWords: raise NotImplementedError() diff --git a/manager/knot_resolver_manager/cli/kresctl.py b/manager/knot_resolver_manager/cli/kresctl.py index caa43736d..05f9b445c 100644 --- a/manager/knot_resolver_manager/cli/kresctl.py +++ b/manager/knot_resolver_manager/cli/kresctl.py @@ -1,5 +1,4 @@ import argparse -from typing import List from knot_resolver_manager.cli.command import CommandArgs @@ -8,19 +7,17 @@ class Kresctl: def __init__( self, namespace: argparse.Namespace, - unknown_args: List[str], parser: argparse.ArgumentParser, prompt: str = "kresctl", ) -> None: self.path = None self.prompt = prompt self.namespace = namespace - self.unknown_args = unknown_args self.parser = parser def execute(self): cmd_args = CommandArgs(self.namespace, self.parser) - command = self.namespace.command(self.namespace, self.unknown_args) + command = self.namespace.command(self.namespace) command.run(cmd_args) def _prompt_format(self) -> str: diff --git a/manager/knot_resolver_manager/cli/main.py b/manager/knot_resolver_manager/cli/main.py index 5b51856ba..bed5f57cb 100644 --- a/manager/knot_resolver_manager/cli/main.py +++ b/manager/knot_resolver_manager/cli/main.py @@ -41,8 +41,8 @@ def main() -> None: autoimport_commands() parser = create_main_argument_parser() install_commands_parsers(parser) - namespace, unknown_args = parser.parse_known_args() - kresctl = Kresctl(namespace, unknown_args, parser) + namespace = parser.parse_args() + kresctl = Kresctl(namespace, parser) if namespace.interactive or len(vars(namespace)) == 2: kresctl.interactive() -- 2.47.3