summaryrefslogtreecommitdiff
path: root/examples/first_app.py
diff options
context:
space:
mode:
authorkotfu <kotfu@kotfu.net>2019-07-06 17:52:19 -0600
committerGitHub <noreply@github.com>2019-07-06 17:52:19 -0600
commit34975b52e769514b44ee8c13147a22961e68e7a7 (patch)
treefe93e18257514efc25e8539d5005af34ef4dcd3b /examples/first_app.py
parente18013e7f6be6721531cde163ec4697eac247270 (diff)
parent0ae0567c48c0519cbecca8448df0caa32f530906 (diff)
downloadcmd2-git-34975b52e769514b44ee8c13147a22961e68e7a7.tar.gz
Merge pull request #712 from python-cmd2/docstructure
New Documentation Structure
Diffstat (limited to 'examples/first_app.py')
-rwxr-xr-xexamples/first_app.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/examples/first_app.py b/examples/first_app.py
new file mode 100755
index 00000000..b5bd07e9
--- /dev/null
+++ b/examples/first_app.py
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+# coding=utf-8
+"""
+A simple application using cmd2 which demonstrates 8 key features:
+
+ * Settings
+ * Commands
+ * Argument Parsing
+ * Generating Output
+ * Help
+ * Shortcuts
+ * Multiline Commands
+ * History
+"""
+import argparse
+
+import cmd2
+
+
+class FirstApp(cmd2.Cmd):
+ """A simple cmd2 application."""
+
+ def __init__(self):
+ shortcuts = cmd2.DEFAULT_SHORTCUTS
+ shortcuts.update({'&': 'speak'})
+ super().__init__(multiline_commands=['orate'], shortcuts=shortcuts)
+
+ # Make maxrepeats settable at runtime
+ self.maxrepeats = 3
+ self.settable['maxrepeats'] = 'max repetitions for speak command'
+
+ 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')
+
+ @cmd2.with_argparser(speak_parser)
+ def do_speak(self, args):
+ """Repeats what you tell me to."""
+ words = []
+ for word in args.words:
+ if args.piglatin:
+ word = '%s%say' % (word[1:], word[0])
+ if args.shout:
+ word = word.upper()
+ words.append(word)
+ repetitions = args.repeat or 1
+ for _ in range(min(repetitions, self.maxrepeats)):
+ # .poutput handles newlines, and accommodates output redirection too
+ self.poutput(' '.join(words))
+
+ # orate is a synonym for speak which takes multiline input
+ do_orate = do_speak
+
+
+if __name__ == '__main__':
+ import sys
+ c = FirstApp()
+ sys.exit(c.cmdloop())