diff options
Diffstat (limited to 'examples')
-rwxr-xr-x | examples/example.py | 52 | ||||
-rw-r--r-- | examples/transcript_regex.txt | 7 |
2 files changed, 42 insertions, 17 deletions
diff --git a/examples/example.py b/examples/example.py index 482788cc..e4158f13 100755 --- a/examples/example.py +++ b/examples/example.py @@ -1,14 +1,18 @@ #!/usr/bin/env python # coding=utf-8 -"""A sample application for cmd2. +""" +A sample application for cmd2. -Thanks to cmd2's built-in transcript testing capability, it also serves as a test suite for example.py when used with - the exampleSession.txt transcript. +Thanks to cmd2's built-in transcript testing capability, it also serves as a +test suite for example.py when used with the exampleSession.txt transcript. -Running `python example.py -t exampleSession.txt` will run all the commands in the transcript against example.py, -verifying that the output produced matches the transcript. +Running `python example.py -t exampleSession.txt` will run all the commands in +the transcript against example.py, verifying that the output produced matches +the transcript. """ +import random + from cmd2 import Cmd, make_option, options, set_use_arg_list @@ -17,13 +21,16 @@ class CmdLineApp(Cmd): # Setting this true makes it run a shell command if a cmd2/cmd command doesn't exist # default_to_shell = True + MUMBLES = ['like', '...', 'um', 'er', 'hmmm', 'ahh'] + MUMBLE_FIRST = ['so', 'like', 'well'] + MUMBLE_LAST = ['right?'] def __init__(self): self.abbrev = True self.multilineCommands = ['orate'] self.maxrepeats = 3 - # Add stuff to settable and shortcutgs before calling base class initializer + # Add stuff to settable and shortcuts before calling base class initializer self.settable['maxrepeats'] = 'max repetitions for speak command' self.shortcuts.update({'&': 'speak'}) @@ -33,10 +40,11 @@ class CmdLineApp(Cmd): # For option commands, pass a single argument string instead of a list of argument strings to the do_* methods set_use_arg_list(False) - @options([make_option('-p', '--piglatin', action="store_true", help="atinLay"), - make_option('-s', '--shout', action="store_true", help="N00B EMULATION MODE"), - make_option('-r', '--repeat', type="int", help="output [n] times") - ]) + opts = [make_option('-p', '--piglatin', action="store_true", help="atinLay"), + make_option('-s', '--shout', action="store_true", help="N00B EMULATION MODE"), + make_option('-r', '--repeat', type="int", help="output [n] times")] + + @options(opts, arg_desc='(text to say)') def do_speak(self, arg, opts=None): """Repeats what you tell me to.""" arg = ''.join(arg) @@ -46,14 +54,30 @@ class CmdLineApp(Cmd): arg = arg.upper() repetitions = opts.repeat or 1 for i in range(min(repetitions, self.maxrepeats)): - self.stdout.write(arg) - self.stdout.write('\n') - # self.stdout.write is better than "print", because Cmd can be - # initialized with a non-standard output destination + self.poutput(arg) + # recommend using the poutput function instead of + # self.stdout.write or "print", because Cmd allows the user + # to redirect output do_say = do_speak # now "say" is a synonym for "speak" do_orate = do_speak # another synonym, but this one takes multi-line input + @options([ make_option('-r', '--repeat', type="int", help="output [n] times") ]) + def do_mumble(self, arg, opts=None): + """Mumbles what you tell me to.""" + repetitions = opts.repeat or 1 + arg = arg.split() + for i in range(min(repetitions, self.maxrepeats)): + output = [] + if (random.random() < .33): + output.append(random.choice(self.MUMBLE_FIRST)) + for word in arg: + if (random.random() < .40): + output.append(random.choice(self.MUMBLES)) + output.append(word) + if (random.random() < .25): + output.append(random.choice(self.MUMBLE_LAST)) + self.poutput(' '.join(output)) if __name__ == '__main__': c = CmdLineApp() diff --git a/examples/transcript_regex.txt b/examples/transcript_regex.txt index a310224b..27b4c639 100644 --- a/examples/transcript_regex.txt +++ b/examples/transcript_regex.txt @@ -1,17 +1,18 @@ # Run this transcript with "python example.py -t transcript_regex.txt" # The regex for colors is because no color on Windows. # The regex for editor will match whatever program you use. +# regexes on prompts just make the trailing space obvious (Cmd) set abbrev: True autorun_on_edit: False colors: /(True|False)/ -continuation_prompt: > +continuation_prompt: >/ / debug: False echo: False -editor: /.*/ +editor: /.*?/ feedback_to_output: False locals_in_py: True maxrepeats: 3 -prompt: (Cmd) +prompt: (Cmd)/ / quiet: False timing: False |