summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md3
-rwxr-xr-xREADME.md7
-rwxr-xr-xcmd2.py19
-rw-r--r--docs/conf.py2
-rw-r--r--docs/index.rst6
-rw-r--r--docs/integrating.rst12
-rw-r--r--docs/pycon2010/akkad.pngbin57996 -> 0 bytes
-rw-r--r--docs/pycon2010/apple.jpgbin72215 -> 0 bytes
-rw-r--r--docs/pycon2010/hook.jpgbin52555 -> 0 bytes
-rw-r--r--docs/pycon2010/pirate.py10
-rw-r--r--docs/pycon2010/pirate2.py24
-rw-r--r--docs/pycon2010/pirate3.py30
-rw-r--r--docs/pycon2010/pirate4.py36
-rw-r--r--docs/pycon2010/pirate5.py45
-rw-r--r--docs/pycon2010/pirate6.py50
-rw-r--r--docs/pycon2010/pirate7.py59
-rw-r--r--docs/pycon2010/pirate8.py71
-rw-r--r--docs/pycon2010/pycon2010.rst382
-rw-r--r--docs/pycon2010/sargon.jpgbin17452 -> 0 bytes
-rw-r--r--docs/pycon2010/schematic.pngbin8966 -> 0 bytes
-rw-r--r--docs/pycon2010/script.txt5
-rw-r--r--docs/pycon2010/strategy.pngbin29460 -> 0 bytes
-rw-r--r--docs/pycon2010/transcript.txt12
-rw-r--r--docs/pycon2010/urwid.pngbin40788 -> 0 bytes
-rw-r--r--docs/pycon2010/web-2-0-logos.gifbin55776 -> 0 bytes
-rwxr-xr-xsetup.py2
-rw-r--r--tests/test_cmd2.py2
27 files changed, 37 insertions, 740 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dd4011ac..09d711d6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,9 @@
-## 0.7.8 (TBD, 2017)
+## 0.7.8 (November TBD, 2017)
* Bug Fixes
* Fixed ``poutput()`` so it can print an integer zero and other **falsy** things
* Fixed a bug which was causing autodoc to fail for building docs on Readthedocs
+ * Fixed bug due to ``pyperclip`` dependency radically changing its project structure in latest version
* Enhancements
* Improved documentation for user-settable environment parameters
* Improved documentation for overriding the default supported comment styles
diff --git a/README.md b/README.md
index 30523e50..f7205147 100755
--- a/README.md
+++ b/README.md
@@ -114,10 +114,9 @@ Tutorials
A couple tutorials on using cmd2 exist:
-* A detailed PyCon 2010 talk by [Catherine Devlin](https://github.com/catherinedevlin), the original author
- * http://pyvideo.org/pycon-us-2010/pycon-2010--easy-command-line-applications-with-c.html
-* A nice brief step-by-step tutorial
- * https://kushaldas.in/posts/developing-command-line-interpreters-using-python-cmd2.html
+* Florida PyCon 2017 talk: [slides](https://archive.org/details/pyvideo_541___pyohio-2011-interactive-command-line-interpreters-with-cmd-and-cmd2)
+* PyCon 2010 talk by Catherine Devlin, the original author: [video](http://pyvideo.org/pycon-us-2010/pycon-2010--easy-command-line-applications-with-c.html)
+* A nice brief step-by-step tutorial: [blog](https://kushaldas.in/posts/developing-command-line-interpreters-using-python-cmd2.html)
Example Application
diff --git a/cmd2.py b/cmd2.py
index f01067a9..64ad1fe9 100755
--- a/cmd2.py
+++ b/cmd2.py
@@ -46,6 +46,13 @@ from optparse import make_option
import pyparsing
import pyperclip
+# Newer versions of pyperclip are released as a single file, but older versions had a more complicated structure
+try:
+ from pyperclip.exceptions import PyperclipException
+except ImportError:
+ # noinspection PyUnresolvedReferences
+ from pyperclip import PyperclipException
+
# On some systems, pyperclip will import gtk for its clipboard functionality.
# The following code is a workaround for gtk interfering with printing from a background
# thread while the CLI thread is blocking in raw_input() in Python 2 on Linux.
@@ -98,7 +105,7 @@ if six.PY3:
else:
BROKEN_PIPE_ERROR = IOError
-__version__ = '0.7.8a'
+__version__ = '0.7.8'
# Pyparsing enablePackrat() can greatly speed up parsing, but problems have been seen in Python 3 in the past
pyparsing.ParserElement.enablePackrat()
@@ -324,13 +331,17 @@ def options(option_list, arg_desc="arg"):
# Can we access the clipboard? Should always be true on Windows and Mac, but only sometimes on Linux
# noinspection PyUnresolvedReferences
try:
- if sys.platform.startswith('linux'):
+ # Get the version of the pyperclip module as a float
+ pyperclip_ver = float('.'.join(pyperclip.__version__.split('.')[:2]))
+
+ # The extraneous output bug in pyperclip on Linux using xclip was fixed in more recent versions of pyperclip
+ if sys.platform.startswith('linux') and pyperclip_ver < 1.6:
# Avoid extraneous output to stderr from xclip when clipboard is empty at cost of overwriting clipboard contents
pyperclip.copy('')
else:
# Try getting the contents of the clipboard
_ = pyperclip.paste()
-except pyperclip.exceptions.PyperclipException:
+except PyperclipException:
can_clip = False
else:
can_clip = True
@@ -582,7 +593,7 @@ class Cmd(cmd.Cmd):
Also handles BrokenPipeError exceptions for when a commands's output has been piped to another process and
that process terminates before the cmd2 command is finished executing.
- :param msg: str - message to print to current stdout - anyting convertible to a str with '{}'.format() is OK
+ :param msg: str - message to print to current stdout - anything convertible to a str with '{}'.format() is OK
:param end: str - string appended after the end of the message if not already present, default a newline
"""
if msg is not None and msg != '':
diff --git a/docs/conf.py b/docs/conf.py
index f79d5b3c..1212a6e2 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -62,7 +62,7 @@ author = 'Catherine Devlin and Todd Leonhardt'
# The short X.Y version.
version = '0.7'
# The full version, including alpha/beta/rc tags.
-release = '0.7.7'
+release = '0.7.8'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/docs/index.rst b/docs/index.rst
index 1f2bf96c..d84558af 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -46,9 +46,9 @@ Resources
* cmd_
* `cmd2 project page`_
* `project bug tracker`_
-* `PyCon 2010 presentation <https://github.com/python-cmd2/cmd2/blob/master/docs/pycon2010/pycon2010.rst>`_,
- *Easy Command-Line Applications with cmd and cmd2*:
- :doc:`slides <pycon2010/pycon2010>`,
+* Florida PyCon 2017: `slides <https://docs.google.com/presentation/d/1LRmpfBt3V-pYQfgQHdczf16F3hcXmhK83tl77R6IJtE/edit?usp=sharing>`_
+* PyOhio 2011: `video <https://archive.org/details/pyvideo_541___pyohio-2011-interactive-command-line-interpreters-with-cmd-and-cmd2>`_
+* PyCon 2010: `presentation <https://github.com/python-cmd2/cmd2/blob/master/docs/pycon2010/pycon2010.rst>`_,
`video <http://pyvideo.org/pycon-us-2010/pycon-2010--easy-command-line-applications-with-c.html>`_
These docs will refer to ``App`` as your ``cmd2.Cmd``
diff --git a/docs/integrating.rst b/docs/integrating.rst
index 32ab37e0..bcb9301c 100644
--- a/docs/integrating.rst
+++ b/docs/integrating.rst
@@ -46,10 +46,14 @@ code like the following::
# Do this within whatever event loop mechanism you wish to run a single command
cmd_line_text = "help history"
- app.onecmd_plus_hooks(cmd_line_text)
+ app.runcmds_plus_hooks([cmd_line_text])
app.postloop()
+The **runcmds_plus_hooks()** method is a convenience method to run multiple commands via **onecmd_plus_hooks()**. It
+properly deals with ``load`` commands which under the hood put commands in a FIFO queue as it reads them in from a
+script file.
+
The **onecmd_plus_hooks()** method will do the following to execute a single ``cmd2`` command in a normal fashion:
#. Parse the command line text
@@ -70,4 +74,10 @@ several disadvantages, including:
* Does not support transcript testing
* Does not allow commands at invocation via command-line arguments
+Here is a little more info on ``runcmds_plus_hooks``:
+
+.. automethod:: cmd2.Cmd.runcmds_plus_hooks
+
+
+
diff --git a/docs/pycon2010/akkad.png b/docs/pycon2010/akkad.png
deleted file mode 100644
index 57799e97..00000000
--- a/docs/pycon2010/akkad.png
+++ /dev/null
Binary files differ
diff --git a/docs/pycon2010/apple.jpg b/docs/pycon2010/apple.jpg
deleted file mode 100644
index 2148af3b..00000000
--- a/docs/pycon2010/apple.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/pycon2010/hook.jpg b/docs/pycon2010/hook.jpg
deleted file mode 100644
index 819370d0..00000000
--- a/docs/pycon2010/hook.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/pycon2010/pirate.py b/docs/pycon2010/pirate.py
deleted file mode 100644
index bd8b5170..00000000
--- a/docs/pycon2010/pirate.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# coding=utf-8
-from cmd import Cmd
-
-
-class Pirate(Cmd):
- pass
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pirate2.py b/docs/pycon2010/pirate2.py
deleted file mode 100644
index 343f94ff..00000000
--- a/docs/pycon2010/pirate2.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# coding=utf-8
-from cmd import Cmd
-
-
-# using ``do_`` methods
-
-class Pirate(Cmd):
- gold = 3
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
- print('Now we gots {0} doubloons'
- .format(self.gold))
-
- def do_drink(self, arg):
- 'Drown your sorrrows in rrrum.'
- self.gold -= 1
- print('Now we gots {0} doubloons'
- .format(self.gold))
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pirate3.py b/docs/pycon2010/pirate3.py
deleted file mode 100644
index 46f26501..00000000
--- a/docs/pycon2010/pirate3.py
+++ /dev/null
@@ -1,30 +0,0 @@
-# coding=utf-8
-from cmd import Cmd
-
-
-# using hook
-
-class Pirate(Cmd):
- gold = 3
- initial_gold = gold
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
-
- def do_drink(self, arg):
- 'Drown your sorrrows in rrrum.'
- self.gold -= 1
-
- def precmd(self, line):
- self.initial_gold = self.gold
- return line
-
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'
- .format(self.gold))
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pirate4.py b/docs/pycon2010/pirate4.py
deleted file mode 100644
index ae1e1f4b..00000000
--- a/docs/pycon2010/pirate4.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# coding=utf-8
-from cmd import Cmd
-
-
-# using arguments
-
-class Pirate(Cmd):
- gold = 3
- initial_gold = gold
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
-
- def do_drink(self, arg):
- '''Drown your sorrrows in rrrum.
-
- drink [n] - drink [n] barrel[s] o' rum.'''
- try:
- self.gold -= int(arg)
- except:
- if arg:
- print('''What's "{0}"? I'll take rrrum.'''.format(arg))
- self.gold -= 1
-
- def precmd(self, line):
- self.initial_gold = self.gold
- return line
-
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'.format(self.gold))
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pirate5.py b/docs/pycon2010/pirate5.py
deleted file mode 100644
index 68da88a5..00000000
--- a/docs/pycon2010/pirate5.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# coding=utf-8
-from cmd import Cmd
-
-
-# quitting
-
-class Pirate(Cmd):
- gold = 3
- initial_gold = gold
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
-
- def do_drink(self, arg):
- '''Drown your sorrrows in rrrum.
-
- drink [n] - drink [n] barrel[s] o' rum.'''
- try:
- self.gold -= int(arg)
- except:
- if arg:
- print('''What's "{0}"? I'll take rrrum.'''.format(arg))
- self.gold -= 1
-
- def precmd(self, line):
- self.initial_gold = self.gold
- return line
-
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'
- .format(self.gold))
- if self.gold < 0:
- print("Off to debtorrr's prison.")
- stop = True
- return stop
-
- def do_quit(self, arg):
- print("Quiterrr!")
- return True
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pirate6.py b/docs/pycon2010/pirate6.py
deleted file mode 100644
index bd5f5fe2..00000000
--- a/docs/pycon2010/pirate6.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# coding=utf-8
-from cmd2 import Cmd
-
-
-# prompts and defaults
-
-class Pirate(Cmd):
- gold = 3
- initial_gold = gold
- prompt = 'arrr> '
-
- def default(self, line):
- print('What mean ye by "{0}"?'
- .format(line))
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
-
- def do_drink(self, arg):
- '''Drown your sorrrows in rrrum.
-
- drink [n] - drink [n] barrel[s] o' rum.'''
- try:
- self.gold -= int(arg)
- except:
- if arg:
- print('''What's "{0}"? I'll take rrrum.'''.format(arg))
- self.gold -= 1
-
- def precmd(self, line):
- self.initial_gold = self.gold
- return line
-
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'
- .format(self.gold))
- if self.gold < 0:
- print("Off to debtorrr's prison.")
- stop = True
- return stop
-
- def do_quit(self, arg):
- print("Quiterrr!")
- return True
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pirate7.py b/docs/pycon2010/pirate7.py
deleted file mode 100644
index 799f73ed..00000000
--- a/docs/pycon2010/pirate7.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# coding=utf-8
-from cmd2 import Cmd
-
-
-# prompts and defaults
-
-class Pirate(Cmd):
- gold = 3
- initial_gold = gold
- prompt = 'arrr> '
-
- def default(self, line):
- print('What mean ye by "{0}"?'.format(line))
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
-
- def do_drink(self, arg):
- '''Drown your sorrrows in rrrum.
-
- drink [n] - drink [n] barrel[s] o' rum.'''
- try:
- self.gold -= int(arg)
- except:
- if arg:
- print('''What's "{0}"? I'll take rrrum.'''.format(arg))
- self.gold -= 1
-
- def precmd(self, line):
- self.initial_gold = self.gold
- return line
-
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'
- .format(self.gold))
- if self.gold < 0:
- print("Off to debtorrr's prison.")
- stop = True
- return stop
-
- def do_quit(self, arg):
- print("Quiterrr!")
- return True
-
- default_to_shell = True
- multilineCommands = ['sing']
- terminators = Cmd.terminators + ['...']
- songcolor = 'blue'
- settable = Cmd.settable + 'songcolor Color to ``sing`` in (red/blue/green/cyan/magenta, bold, underline)'
- Cmd.shortcuts.update({'~': 'sing'})
-
- def do_sing(self, arg):
- print(self.colorize(arg, self.songcolor))
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pirate8.py b/docs/pycon2010/pirate8.py
deleted file mode 100644
index 58b56208..00000000
--- a/docs/pycon2010/pirate8.py
+++ /dev/null
@@ -1,71 +0,0 @@
-# coding=utf-8
-from cmd2 import Cmd, options, make_option
-
-
-# prompts and defaults
-
-class Pirate(Cmd):
- gold = 3
- initial_gold = gold
- prompt = 'arrr> '
-
- def default(self, line):
- print('What mean ye by "{0}"?'.format(line))
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
-
- def do_drink(self, arg):
- '''Drown your sorrrows in rrrum.
-
- drink [n] - drink [n] barrel[s] o' rum.'''
- try:
- self.gold -= int(arg)
- except:
- if arg:
- print('''What's "{0}"? I'll take rrrum.'''.format(arg))
- self.gold -= 1
-
- def precmd(self, line):
- self.initial_gold = self.gold
- return line
-
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'
- .format(self.gold))
- if self.gold < 0:
- print("Off to debtorrr's prison.")
- stop = True
- return stop
-
- def do_quit(self, arg):
- print("Quiterrr!")
- return True
-
- default_to_shell = True
- multilineCommands = ['sing']
- terminators = Cmd.terminators + ['...']
- songcolor = 'blue'
- settable = Cmd.settable + 'songcolor Color to ``sing`` in (red/blue/green/cyan/magenta, bold, underline)'
- Cmd.shortcuts.update({'~': 'sing'})
-
- def do_sing(self, arg):
- print(self.colorize(arg, self.songcolor))
-
- @options([make_option('--ho', type='int', default=2,
- help="How often to chant 'ho'"),
- make_option('-c', '--commas',
- action="store_true",
- help="Intersperse commas")])
- def do_yo(self, arg, opts):
- chant = ['yo'] + ['ho'] * opts.ho
- separator = ', ' if opts.commas else ' '
- chant = separator.join(chant)
- print('{0} and a bottle of {1}'
- .format(chant, arg))
-
-
-pirate = Pirate()
-pirate.cmdloop()
diff --git a/docs/pycon2010/pycon2010.rst b/docs/pycon2010/pycon2010.rst
deleted file mode 100644
index 6c3af676..00000000
--- a/docs/pycon2010/pycon2010.rst
+++ /dev/null
@@ -1,382 +0,0 @@
-================================================
-Easy command-line interpreters with cmd and cmd2
-================================================
-
-:author: Catherine Devlin
-:date: 2010-02-20
-:slides: http://pypi.python.org/pypi/cmd2
-
-Web 2.0
-=======
-
-.. image:: web-2-0-logos.gif
- :height: 350px
-
-But first...
-============
-
-.. image:: sargon.jpg
- :height: 250px
-
-.. image:: akkad.png
- :height: 250px
-
-Sargon the Great
- Founder of Akkadian Empire
-
-.. twenty-third century BC
-
-In between
-==========
-
-.. image:: apple.jpg
- :height: 250px
-
-Command-Line Interface
- Unlike the Akkadian Empire,
- the CLI will never die.
-
-Defining CLI
-============
-
-Also known as
-
-- "Line-oriented command interpreter"
-- "Command-line interface"
-- "Shell"
-
-1. Accepts free text input at prompt
-2. Outputs lines of text
-3. (repeat)
-
-Examples
-========
-
-.. class:: big
-
- * Bash, Korn, zsh
- * Python shell
- * screen
- * Zork
- * SQL clients: psql, SQL*\Plus, mysql...
- * ed
-
-.. ``ed`` proves that CLI is sometimes the wrong answer.
-
-!= Command Line Utilities
-=========================
-
-.. class:: big
-
- (``ls``, ``grep``, ``ping``, etc.)
-
- 1. Accept arguments at invocation
- 2. execute
- 3. terminate
-
- Use ``sys.argv``, ``optparse``
-
-!="Text User Interface"
-=======================
-
-* Use entire (session) screen
-* I/O is *not* line-by-line
-* See ``curses``, ``urwid``
-
-.. image:: urwid.png
- :height: 250px
-
-
-Decide your priorities
-======================
-
-.. image:: strategy.png
- :height: 350px
-
-A ``cmd`` app: pirate.py
-========================
-
-::
-
- from cmd import Cmd
-
- class Pirate(Cmd):
- pass
-
- pirate = Pirate()
- pirate.cmdloop()
-
-.. Nothing here... but history and help
-
-.. ctrl-r for bash-style history
-
-Fundamental prrrinciple
-=======================
-
-.. class:: huge
-
- ``(Cmd) foo a b c``
-
- becomes
-
- ``self.do_foo('a b c')``
-
-``do_``-methods: pirate2.py
-===========================
-
-::
-
- class Pirate(Cmd):
- gold = 3
- def do_loot(self, arg):
- 'Seize booty frrrom a passing ship.'
- self.gold += 1
- print('Now we gots {0} doubloons'
- .format(self.gold))
- def do_drink(self, arg):
- 'Drown your sorrrows in rrrum.'
- self.gold -= 1
- print('Now we gots {0} doubloons'
- .format(self.gold))
-
-.. do_methods; more help
-
-Hooks
-=====
-
-.. image:: hook.jpg
- :height: 250px
-
-::
-
- self.preloop()
- self.postloop()
- self.precmd(line)
- self.postcmd(stop, line)
-
-Hooks: pirate3.py
-=================
-
-::
-
- def do_loot(self, arg):
- 'Seize booty from a passing ship.'
- self.gold += 1
- def do_drink(self, arg):
- 'Drown your sorrrows in rrrum.'
- self.gold -= 1
- def precmd(self, line):
- self.initial_gold = self.gold
- return line
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'
- .format(self.gold))
-
-Arguments: pirate4.py
-=====================
-
-::
-
- def do_drink(self, arg):
- '''Drown your sorrrows in rrrum.
-
- drink [n] - drink [n] barrel[s] o' rum.'''
- try:
- self.gold -= int(arg)
- except:
- if arg:
- print('''What's "{0}"? I'll take rrrum.'''
- .format(arg))
- self.gold -= 1
-
-quitting: pirate5.py
-====================
-
-::
-
- def postcmd(self, stop, line):
- if self.gold != self.initial_gold:
- print('Now we gots {0} doubloons'
- .format(self.gold))
- if self.gold < 0:
- print("Off to debtorrr's prison.")
- stop = True
- return stop
- def do_quit(self, arg):
- print("Quiterrr!")
- return True
-
-prompts, defaults: pirate6.py
-=============================
-
-::
-
- prompt = 'arrr> '
- def default(self, line):
- print('What mean ye by "{0}"?'
- .format(line))
-
-Other CLI packages
-==================
-
-.. class:: big
-
- * CmdLoop
- * cly
- * CMdO
- * pycopia
- * cmdlin
- * cmd2
-
-Demo
-====
-
-.. class:: huge
-
- Convert ``cmd`` app to ``cmd2``
-
-cmd2
-====
-
-.. image:: schematic.png
- :height: 350px
-
-As you wish, Guido
-==================
-
-.. class:: huge
-
- Python 3 compatible
-
-(um, mostly)
-
-Absolutely free
-===============
-
-Script files
-
-Commands at invocation
-
-Output redirection
-
-Python
-
-Transcript testing
-
-But wait, there's more
-======================
-
- * Abbreviated commands
- * Shell commands
- * Quitting
- * Timing
- * Echo
- * Debug
-
-Minor changes: pirate7.py
-=========================
-
-::
-
- default_to_shell = True
- multilineCommands = ['sing']
- terminators = Cmd.terminators + ['...']
- songcolor = 'blue'
- settable = Cmd.settable + 'songcolor Color to ``sing`` in (red/blue/green/cyan/magenta, bold, underline)'
- Cmd.shortcuts.update({'~': 'sing'})
- def do_sing(self, arg):
- print(self.colorize(arg, self.songcolor))
-
-Now how much would you pay?
-===========================
-
-options / flags
-
-Quiet (suppress feedback)
-
-BASH-style ``select``
-
-Parsing: terminators, suffixes
-
-Options: pirate8.py
-===================
-
-::
-
- @options([make_option('--ho', type='int', default=2,
- help="How often to chant 'ho'"),
- make_option('-c', '--commas',
- action="store_true",
- help="Intersperse commas")])
- def do_yo(self, arg, opts):
- chant = ['yo'] + ['ho'] * opts.ho
- separator = ', ' if opts.commas else ' '
- chant = separator.join(chant)
- print('{0} and a bottle of {1}'
- .format(chant, arg))
-
-Serious example: sqlpython
-==========================
-
-.. class:: big
-
- ``cmd``-based app by Luca Canali @ CERN
-
- Replacement for Oracle SQL\*Plus
-
- Now ``cmd2``-based; postgreSQL; MySQL
-
-File reporter
-=============
-
-.. class:: huge
-
- Gather info: Python
-
- Store: postgresql
-
- Report: html
-
-fileutil.py
-===========
-
-::
-
- import glob
- import os.path
-
- for fullfilename in glob.glob('/home/cat/proj/cmd2/*.py'):
- (dirpath, fname) = os.path.split(fullfilename)
- stats = os.stat(fullfilename)
- binds['path'] = dirpath
- binds['name'] = fname
- binds['bytes'] = stats.st_size
- cmd("""INSERT INTO cat.files (path, name, bytes)
- VALUES (%(path)s, %(name)s, %(bytes)s)""")
- quit()
-
-sqlpython features
-==================
-
-.. class:: big
-
- * from ``cmd2``: scripts, redirection,
- py, etc.
- * multiple connections
- * UNIX: ls, cat, grep
- * Special output
-
-
-Thank you
-=========
-
-.. class:: big
-
- http://pypi.python.org/pypi/cmd2
-
- http://catherinedevlin.blogspot.com
-
- http://catherinedevlin.pythoneers.com
-
-
diff --git a/docs/pycon2010/sargon.jpg b/docs/pycon2010/sargon.jpg
deleted file mode 100644
index 5960f1e0..00000000
--- a/docs/pycon2010/sargon.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/pycon2010/schematic.png b/docs/pycon2010/schematic.png
deleted file mode 100644
index d4b39092..00000000
--- a/docs/pycon2010/schematic.png
+++ /dev/null
Binary files differ
diff --git a/docs/pycon2010/script.txt b/docs/pycon2010/script.txt
deleted file mode 100644
index c638b1a7..00000000
--- a/docs/pycon2010/script.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-loot
-loot
-drink /* arrr */ 2 # matey
-drink chardonnay
-
diff --git a/docs/pycon2010/strategy.png b/docs/pycon2010/strategy.png
deleted file mode 100644
index 7d6afdcd..00000000
--- a/docs/pycon2010/strategy.png
+++ /dev/null
Binary files differ
diff --git a/docs/pycon2010/transcript.txt b/docs/pycon2010/transcript.txt
deleted file mode 100644
index d00e44fc..00000000
--- a/docs/pycon2010/transcript.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-arrr> loot
-Now we gots 4 doubloons
-arrr> loot
-Now we gots 5 doubloons
-arrr> drink 3
-Now we gots 2 doubloons
-arrr> drink chardonnay
-What's "chardonnay"? I'll take rrrum.
-Now we gots 1 doubloons
-arrr> quit
-Quiterrr!
-
diff --git a/docs/pycon2010/urwid.png b/docs/pycon2010/urwid.png
deleted file mode 100644
index c2b5a9bf..00000000
--- a/docs/pycon2010/urwid.png
+++ /dev/null
Binary files differ
diff --git a/docs/pycon2010/web-2-0-logos.gif b/docs/pycon2010/web-2-0-logos.gif
deleted file mode 100644
index 9d48e37d..00000000
--- a/docs/pycon2010/web-2-0-logos.gif
+++ /dev/null
Binary files differ
diff --git a/setup.py b/setup.py
index b4b76098..6607b799 100755
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@ Setuptools setup file, used to install or test 'cmd2'
"""
from setuptools import setup
-VERSION = '0.7.8a'
+VERSION = '0.7.8'
DESCRIPTION = "cmd2 - a tool for building interactive command line applications in Python"
LONG_DESCRIPTION = """cmd2 is a tool for building interactive command line applications in Python. Its goal is to make
it quick and easy for developers to build feature-rich and user-friendly interactive command line applications. It
diff --git a/tests/test_cmd2.py b/tests/test_cmd2.py
index c395acc3..0e9ad589 100644
--- a/tests/test_cmd2.py
+++ b/tests/test_cmd2.py
@@ -24,7 +24,7 @@ from conftest import run_cmd, normalize, BASE_HELP, HELP_HISTORY, SHORTCUTS_TXT,
def test_ver():
- assert cmd2.__version__ == '0.7.8a'
+ assert cmd2.__version__ == '0.7.8'
def test_empty_statement(base_app):