diff options
author | Todd Leonhardt <todd.leonhardt@gmail.com> | 2019-07-10 21:21:03 -0400 |
---|---|---|
committer | Todd Leonhardt <todd.leonhardt@gmail.com> | 2019-07-10 21:21:03 -0400 |
commit | 35ec62b1f8dc9a3de397cdcd9cdd66cd2c381f0e (patch) | |
tree | 65731c81d621d5fb546ab7f18b663d37471a8276 | |
parent | dbd83973b62b87e8dc74426af410b0852360f7e8 (diff) | |
download | cmd2-git-35ec62b1f8dc9a3de397cdcd9cdd66cd2c381f0e.tar.gz |
Restore self.statement_parser to a public attribute in cmd2.Cmd
-rw-r--r-- | cmd2/cmd2.py | 56 | ||||
-rw-r--r-- | cmd2/parsing.py | 2 | ||||
-rwxr-xr-x | examples/hooks.py | 6 | ||||
-rw-r--r-- | tests/test_cmd2.py | 4 | ||||
-rw-r--r-- | tests/test_completion.py | 4 |
5 files changed, 36 insertions, 36 deletions
diff --git a/cmd2/cmd2.py b/cmd2/cmd2.py index 26636c41..3aa4beb3 100644 --- a/cmd2/cmd2.py +++ b/cmd2/cmd2.py @@ -146,9 +146,9 @@ def with_argument_list(*args: List[Callable], preserve_quotes: bool = False) -> def arg_decorator(func: Callable): @functools.wraps(func) def cmd_wrapper(cmd2_instance, statement: Union[Statement, str]): - _, parsed_arglist = cmd2_instance._statement_parser.get_command_arg_list(command_name, - statement, - preserve_quotes) + _, parsed_arglist = cmd2_instance.statement_parser.get_command_arg_list(command_name, + statement, + preserve_quotes) return func(cmd2_instance, parsed_arglist) @@ -185,9 +185,9 @@ def with_argparser_and_unknown_args(argparser: argparse.ArgumentParser, *, def arg_decorator(func: Callable): @functools.wraps(func) def cmd_wrapper(cmd2_instance, statement: Union[Statement, str]): - statement, parsed_arglist = cmd2_instance._statement_parser.get_command_arg_list(command_name, - statement, - preserve_quotes) + statement, parsed_arglist = cmd2_instance.statement_parser.get_command_arg_list(command_name, + statement, + preserve_quotes) if ns_provider is None: namespace = None @@ -243,9 +243,9 @@ def with_argparser(argparser: argparse.ArgumentParser, *, def arg_decorator(func: Callable): @functools.wraps(func) def cmd_wrapper(cmd2_instance, statement: Union[Statement, str]): - statement, parsed_arglist = cmd2_instance._statement_parser.get_command_arg_list(command_name, - statement, - preserve_quotes) + statement, parsed_arglist = cmd2_instance.statement_parser.get_command_arg_list(command_name, + statement, + preserve_quotes) if ns_provider is None: namespace = None @@ -393,10 +393,10 @@ class Cmd(cmd.Cmd): if shortcuts is None: shortcuts = constants.DEFAULT_SHORTCUTS shortcuts = sorted(shortcuts.items(), reverse=True) - self._statement_parser = StatementParser(allow_redirection=allow_redirection, - terminators=terminators, - multiline_commands=multiline_commands, - shortcuts=shortcuts) + self.statement_parser = StatementParser(allow_redirection=allow_redirection, + terminators=terminators, + multiline_commands=multiline_commands, + shortcuts=shortcuts) # True if running inside a Python script or interactive console, False otherwise self._in_py = False @@ -561,17 +561,17 @@ class Cmd(cmd.Cmd): @property def aliases(self) -> Dict[str, str]: """Read-only property to access the aliases stored in the StatementParser.""" - return self._statement_parser.aliases + return self.statement_parser.aliases @property def allow_redirection(self) -> bool: """Getter for the allow_redirection property that determines whether or not redirection of stdout is allowed.""" - return self._statement_parser.allow_redirection + return self.statement_parser.allow_redirection @allow_redirection.setter def allow_redirection(self, value: bool) -> None: """Setter for the allow_redirection property that determines whether or not redirection of stdout is allowed.""" - self._statement_parser.allow_redirection = value + self.statement_parser.allow_redirection = value def poutput(self, msg: Any, *, end: str = '\n') -> None: """Print message to self.stdout and appends a newline by default @@ -1385,7 +1385,7 @@ class Cmd(cmd.Cmd): # from text and update the indexes. This only applies if we are at the the beginning of the line. shortcut_to_restore = '' if begidx == 0: - for (shortcut, _) in self._statement_parser.shortcuts: + for (shortcut, _) in self.statement_parser.shortcuts: if text.startswith(shortcut): # Save the shortcut to restore later shortcut_to_restore = shortcut @@ -1399,7 +1399,7 @@ class Cmd(cmd.Cmd): if begidx > 0: # Parse the command line - statement = self._statement_parser.parse_command_only(line) + statement = self.statement_parser.parse_command_only(line) command = statement.command expanded_line = statement.command_and_args @@ -1678,7 +1678,7 @@ class Cmd(cmd.Cmd): :param line: line read by readline :return: tuple containing (command, args, line) """ - statement = self._statement_parser.parse_command_only(line) + statement = self.statement_parser.parse_command_only(line) return statement.command, statement.args, statement.command_and_args def onecmd_plus_hooks(self, line: str, pyscript_bridge_call: bool = False) -> bool: @@ -1842,7 +1842,7 @@ class Cmd(cmd.Cmd): """ while True: try: - statement = self._statement_parser.parse(line) + statement = self.statement_parser.parse(line) if statement.multiline_command and statement.terminator: # we have a completed multiline command, we are done break @@ -1853,7 +1853,7 @@ class Cmd(cmd.Cmd): except ValueError: # we have unclosed quotation marks, lets parse only the command # and see if it's a multiline - statement = self._statement_parser.parse_command_only(line) + statement = self.statement_parser.parse_command_only(line) if not statement.multiline_command: # not a multiline command, so raise the exception raise @@ -1877,7 +1877,7 @@ class Cmd(cmd.Cmd): raise ex else: self.poutput('^C') - statement = self._statement_parser.parse('') + statement = self.statement_parser.parse('') break finally: self._at_continuation_prompt = False @@ -2290,7 +2290,7 @@ class Cmd(cmd.Cmd): """Create or overwrite an alias""" # Validate the alias name - valid, errmsg = self._statement_parser.is_valid_command(args.name) + valid, errmsg = self.statement_parser.is_valid_command(args.name) if not valid: self.perror("Invalid alias name: {}".format(errmsg)) return @@ -2301,7 +2301,7 @@ class Cmd(cmd.Cmd): # Unquote redirection and terminator tokens tokens_to_unquote = constants.REDIRECTION_TOKENS - tokens_to_unquote.extend(self._statement_parser.terminators) + tokens_to_unquote.extend(self.statement_parser.terminators) utils.unquote_specific_tokens(args.command_args, tokens_to_unquote) # Build the alias value string @@ -2421,7 +2421,7 @@ class Cmd(cmd.Cmd): """Create or overwrite a macro""" # Validate the macro name - valid, errmsg = self._statement_parser.is_valid_command(args.name) + valid, errmsg = self.statement_parser.is_valid_command(args.name) if not valid: self.perror("Invalid macro name: {}".format(errmsg)) return @@ -2436,7 +2436,7 @@ class Cmd(cmd.Cmd): # Unquote redirection and terminator tokens tokens_to_unquote = constants.REDIRECTION_TOKENS - tokens_to_unquote.extend(self._statement_parser.terminators) + tokens_to_unquote.extend(self.statement_parser.terminators) utils.unquote_specific_tokens(args.command_args, tokens_to_unquote) # Build the macro value string @@ -2830,7 +2830,7 @@ class Cmd(cmd.Cmd): @with_argparser(ACArgumentParser()) def do_shortcuts(self, _: argparse.Namespace) -> None: """List available shortcuts""" - result = "\n".join('%s: %s' % (sc[0], sc[1]) for sc in sorted(self._statement_parser.shortcuts)) + result = "\n".join('%s: %s' % (sc[0], sc[1]) for sc in sorted(self.statement_parser.shortcuts)) self.poutput("Shortcuts for other commands:\n{}".format(result)) @with_argparser(ACArgumentParser(epilog=INTERNAL_COMMAND_EPILOG)) @@ -2899,7 +2899,7 @@ class Cmd(cmd.Cmd): read_only_settings = """ Commands may be terminated with: {} Output redirection and pipes allowed: {}""" - return read_only_settings.format(str(self._statement_parser.terminators), self.allow_redirection) + return read_only_settings.format(str(self.statement_parser.terminators), self.allow_redirection) def _show(self, args: argparse.Namespace, parameter: str = '') -> None: """Shows current settings of parameters. diff --git a/cmd2/parsing.py b/cmd2/parsing.py index 86087db1..2e94516a 100644 --- a/cmd2/parsing.py +++ b/cmd2/parsing.py @@ -324,7 +324,7 @@ class StatementParser: This string is suitable for inclusion in an error message of your choice: - valid, errmsg = _statement_parser.is_valid_command('>') + valid, errmsg = statement_parser.is_valid_command('>') if not valid: errmsg = "Alias {}".format(errmsg) """ diff --git a/examples/hooks.py b/examples/hooks.py index acd427cd..409c8979 100755 --- a/examples/hooks.py +++ b/examples/hooks.py @@ -61,7 +61,7 @@ class CmdLineApp(cmd2.Cmd): command_pattern = re.compile(r'^([^\s\d]+)(\d+)') match = command_pattern.search(command) if match: - data.statement = self._statement_parser.parse("{} {} {}".format( + data.statement = self.statement_parser.parse("{} {} {}".format( match.group(1), match.group(2), '' if data.statement.args is None else data.statement.args @@ -71,7 +71,7 @@ class CmdLineApp(cmd2.Cmd): def downcase_hook(self, data: cmd2.plugin.PostparsingData) -> cmd2.plugin.PostparsingData: """A hook to make uppercase commands lowercase.""" command = data.statement.command.lower() - data.statement = self._statement_parser.parse("{} {}".format( + data.statement = self.statement_parser.parse("{} {}".format( command, '' if data.statement.args is None else data.statement.args )) @@ -85,7 +85,7 @@ class CmdLineApp(cmd2.Cmd): possible_cmds = [cmd for cmd in self.get_all_commands() if cmd.startswith(data.statement.command)] if len(possible_cmds) == 1: raw = data.statement.raw.replace(data.statement.command, possible_cmds[0], 1) - data.statement = self._statement_parser.parse(raw) + data.statement = self.statement_parser.parse(raw) return data @cmd2.with_argument_list diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py index c9a41033..9ffe547a 100644 --- a/tests/test_cmd2.py +++ b/tests/test_cmd2.py @@ -109,7 +109,7 @@ def test_base_show_readonly(base_app): expected = normalize(SHOW_TXT + '\nRead only settings:' + """ Commands may be terminated with: {} Output redirection and pipes allowed: {} -""".format(base_app._statement_parser.terminators, base_app.allow_redirection)) +""".format(base_app.statement_parser.terminators, base_app.allow_redirection)) assert out == expected @@ -532,7 +532,7 @@ def test_feedback_to_output_false(base_app): def test_disallow_redirection(base_app): # Set allow_redirection to False - base_app._statement_parser.allow_redirection = False + base_app.statement_parser.allow_redirection = False filename = 'test_allow_redirect.txt' diff --git a/tests/test_completion.py b/tests/test_completion.py index eea34ba6..5cfc741c 100644 --- a/tests/test_completion.py +++ b/tests/test_completion.py @@ -703,7 +703,7 @@ def test_tokens_for_completion_quoted_redirect(cmd2_app): endidx = len(line) begidx = endidx - len(text) - cmd2_app._statement_parser.redirection = True + cmd2_app.statement_parser.redirection = True expected_tokens = ['command', '>file'] expected_raw_tokens = ['command', '">file'] @@ -717,7 +717,7 @@ def test_tokens_for_completion_redirect_off(cmd2_app): endidx = len(line) begidx = endidx - len(text) - cmd2_app._statement_parser.allow_redirection = False + cmd2_app.statement_parser.allow_redirection = False expected_tokens = ['command', '>file'] expected_raw_tokens = ['command', '>file'] |