From 19c0586b45204ac264038ce23da89858aefda46f Mon Sep 17 00:00:00 2001 From: kotfu Date: Fri, 12 Jan 2018 21:07:44 -0700 Subject: @with_argument_parser now passes an arglist instead of a string --- examples/argparse_example.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'examples/argparse_example.py') diff --git a/examples/argparse_example.py b/examples/argparse_example.py index d784ccf5..3574f549 100755 --- a/examples/argparse_example.py +++ b/examples/argparse_example.py @@ -47,7 +47,7 @@ class CmdLineApp(Cmd): argparser.add_argument('-r', '--repeat', type=int, help='output [n] times') argparser.add_argument('words', nargs='+', help='words to say') @with_argument_parser(argparser) - def do_speak(self, cmdline, args=None): + def do_speak(self, arglist, args=None): """Repeats what you tell me to.""" words = [] for word in args.words: @@ -68,7 +68,7 @@ class CmdLineApp(Cmd): argparser.add_argument('tag', nargs=1, help='tag') argparser.add_argument('content', nargs='+', help='content to surround with tag') @with_argument_parser(argparser) - def do_tag(self, argv, args=None): + def do_tag(self, arglist, args=None): self.stdout.write('<{0}>{1}'.format(args.tag[0], ' '.join(args.content))) self.stdout.write('\n') # self.stdout.write is better than "print", because Cmd can be -- cgit v1.2.1 From c26b00853633c7df8cdee0ee49b3596154bb09c1 Mon Sep 17 00:00:00 2001 From: kotfu Date: Fri, 12 Jan 2018 22:28:29 -0700 Subject: new @with_argument_list decorator --- examples/argparse_example.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'examples/argparse_example.py') diff --git a/examples/argparse_example.py b/examples/argparse_example.py index 3574f549..40ea372c 100755 --- a/examples/argparse_example.py +++ b/examples/argparse_example.py @@ -14,7 +14,7 @@ verifying that the output produced matches the transcript. import argparse import sys -from cmd2 import Cmd, make_option, options, with_argument_parser +from cmd2 import Cmd, make_option, options, with_argument_parser, with_argument_list class CmdLineApp(Cmd): @@ -69,10 +69,20 @@ class CmdLineApp(Cmd): argparser.add_argument('content', nargs='+', help='content to surround with tag') @with_argument_parser(argparser) def do_tag(self, arglist, args=None): - self.stdout.write('<{0}>{1}'.format(args.tag[0], ' '.join(args.content))) - self.stdout.write('\n') - # self.stdout.write is better than "print", because Cmd can be - # initialized with a non-standard output destination + """create a html tag""" + self.poutput('<{0}>{1}'.format(args.tag[0], ' '.join(args.content))) + + + @with_argument_list + def do_tagg(self, arglist): + """verion of creating an html tag using arglist instead of argparser""" + if len(arglist) >= 2: + tag = arglist[0] + content = arglist[1:] + self.poutput('<{0}>{1}'.format(tag, ' '.join(content))) + else: + self.perror("tagg requires at least 2 arguments") + # @options uses the python optparse module which has been deprecated # since 2011. Use @with_argument_parser instead, which utilizes the -- cgit v1.2.1 From 141d95194b30d959f6c21f4546100551c442b13d Mon Sep 17 00:00:00 2001 From: Todd Leonhardt Date: Mon, 15 Jan 2018 01:34:50 -0500 Subject: Made a couple cleanup changes 1) cmd2 no longer imports make_option from optparse - test files and examples now import this directly - this helps emphasize that this old optparse methodology of adding options to commands is deprecated 2) All argparsers have been given custom names instead of just "argparser" - this helps with readability and maintainability, especially with IDE renaming and such --- examples/argparse_example.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'examples/argparse_example.py') diff --git a/examples/argparse_example.py b/examples/argparse_example.py index 40ea372c..b203feef 100755 --- a/examples/argparse_example.py +++ b/examples/argparse_example.py @@ -14,7 +14,8 @@ verifying that the output produced matches the transcript. import argparse import sys -from cmd2 import Cmd, make_option, options, with_argument_parser, with_argument_list +from cmd2 import Cmd, options, with_argument_parser, with_argument_list +from optparse import make_option class CmdLineApp(Cmd): @@ -40,13 +41,13 @@ class CmdLineApp(Cmd): # Setting this true makes it run a shell command if a cmd2/cmd command doesn't exist # self.default_to_shell = True + speak_parser = argparse.ArgumentParser() + speak_parser.add_argument('-p', '--piglatin', action='store_true', help='atinLay') + speak_parser.add_argument('-s', '--shout', action='store_true', help='N00B EMULATION MODE') + speak_parser.add_argument('-r', '--repeat', type=int, help='output [n] times') + speak_parser.add_argument('words', nargs='+', help='words to say') - argparser = argparse.ArgumentParser() - argparser.add_argument('-p', '--piglatin', action='store_true', help='atinLay') - argparser.add_argument('-s', '--shout', action='store_true', help='N00B EMULATION MODE') - argparser.add_argument('-r', '--repeat', type=int, help='output [n] times') - argparser.add_argument('words', nargs='+', help='words to say') - @with_argument_parser(argparser) + @with_argument_parser(speak_parser) def do_speak(self, arglist, args=None): """Repeats what you tell me to.""" words = [] @@ -63,11 +64,11 @@ class CmdLineApp(Cmd): do_say = do_speak # now "say" is a synonym for "speak" do_orate = do_speak # another synonym, but this one takes multi-line input + tag_parser = argparse.ArgumentParser(description='create a html tag') + tag_parser.add_argument('tag', nargs=1, help='tag') + tag_parser.add_argument('content', nargs='+', help='content to surround with tag') - argparser = argparse.ArgumentParser(description='create a html tag') - argparser.add_argument('tag', nargs=1, help='tag') - argparser.add_argument('content', nargs='+', help='content to surround with tag') - @with_argument_parser(argparser) + @with_argument_parser(tag_parser) def do_tag(self, arglist, args=None): """create a html tag""" self.poutput('<{0}>{1}'.format(args.tag[0], ' '.join(args.content))) @@ -107,6 +108,7 @@ class CmdLineApp(Cmd): # self.stdout.write is better than "print", because Cmd can be # initialized with a non-standard output destination + if __name__ == '__main__': # You can do your custom Argparse parsing here to meet your application's needs parser = argparse.ArgumentParser(description='Process the arguments however you like.') -- cgit v1.2.1 From eee2d621abfb3d6455570b540069a4853a68f8c6 Mon Sep 17 00:00:00 2001 From: Todd Leonhardt Date: Mon, 15 Jan 2018 12:11:12 -0500 Subject: Changed @with_argument_parser to only pass single argument to commands Also added another @with_argparser_and_list decorator that uses argparse.parse_known_args to pass two arguments to a command: both the argparse output and a list of unknown/unmatched args. --- examples/argparse_example.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'examples/argparse_example.py') diff --git a/examples/argparse_example.py b/examples/argparse_example.py index b203feef..ae45411c 100755 --- a/examples/argparse_example.py +++ b/examples/argparse_example.py @@ -48,7 +48,7 @@ class CmdLineApp(Cmd): speak_parser.add_argument('words', nargs='+', help='words to say') @with_argument_parser(speak_parser) - def do_speak(self, arglist, args=None): + def do_speak(self, args): """Repeats what you tell me to.""" words = [] for word in args.words: @@ -69,7 +69,7 @@ class CmdLineApp(Cmd): tag_parser.add_argument('content', nargs='+', help='content to surround with tag') @with_argument_parser(tag_parser) - def do_tag(self, arglist, args=None): + def do_tag(self, args): """create a html tag""" self.poutput('<{0}>{1}'.format(args.tag[0], ' '.join(args.content))) -- cgit v1.2.1