# HG changeset patch # User catherine@Drou # Date 1266347125 18000 # Node ID 4300ef912f4a36bd66af94aa0e80a944306adc96 # Parent 787573d350c5e54b7966252b271bcf4b1cba082a graph' diff -r 787573d350c5 -r 4300ef912f4a docs/pycon2010/ease.png Binary file docs/pycon2010/ease.png has changed diff -r 787573d350c5 -r 4300ef912f4a docs/pycon2010/graph.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/docs/pycon2010/graph.py Tue Feb 16 14:05:25 2010 -0500 @@ -0,0 +1,39 @@ +from turtle import * +pu() +goto(-400,-400) + +def label(txt): + write(txt, font=('Arial', 20, 'italic')) + +def line(len, _label): + start = pos() + pd() + forward(len) + pu() + forward(30) + pd() + label(_label) + pu() + goto(start) + +def tech(x, y, _label): + pu() + goto(x, y) + pd() + write(_label, font=('Arial', 40, 'bold')) + pu() + +line(600, "Easy to write") +left(90) +line(600, "Easy to use") + +tech(-360, 160, 'GUI') +tech(-390, 100, 'AJAX') +tech(-300, -10, 'webapp') +tech(190, -380, 'CLU') +tech(90, -320, 'TUI') +tech(100, -210, 'cmd') +tech(80, -100, 'cmd2') + +while True: + pass \ No newline at end of file diff -r 787573d350c5 -r 4300ef912f4a docs/pycon2010/pycon2010.rst --- a/docs/pycon2010/pycon2010.rst Tue Feb 16 13:01:41 2010 -0500 +++ b/docs/pycon2010/pycon2010.rst Tue Feb 16 14:05:25 2010 -0500 @@ -1,84 +1,89 @@ -py 3 +===== +Title +===== Web 2.0 ======= .. image:: web-2-0-logos.gif - :height: 300 px + :height: 300px But first... ============ .. image:: sargon.jpg - :height: 300 px - -Sargon the Great founded the Akkadian Empire -in the twenty-third century BC. + :height: 300px + +Sargon the Great + Founder of Akkadian Empire + +.. twenty-third century BC In between ========== .. image:: apple.jpg - :height: 300 px + :height: 300px -Unlike the Akkadian Empire, the CLI will never disappear. - -line-oriented command interpreter -command-line interface -text user interface -terminal user interface -console -shell +Command-Line Interface + Unlike the Akkadian Empire, + the CLI will never die. Defining ======== + +- "Line-oriented command interpreter" +- "Command-line interface" +- "Shell" -Prompt accepts free text input -Outputs lines of text -CLI environment persists +* Accepts free text input at prompt +* Outputs lines of text +* Persistent CLI environment Examples ======== -Bash, Korn, zsh -Python shell -screen -Zork -ed -SQL clients: psql, SQL*\Plus, mysql... +* 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 ========================= -Accept single set of arguments at -invocation, execute, terminate - -dir -grep -ping +* Accept arguments at invocation +* execution +* terminate -sys.argv -optparse +Examples +-------- +* ls +* grep +* ping -!= Text User Interfaces -======================= +Use ``sys.argv``, ``optparse`` -("console") +!= "Text User Interfaces", "Consoles" +===================================== -Use entire (session) screen -Not line-by-line +* Use entire (session) screen +* I/O is *not* line-by-line .. image:: urwid.png :height: 300px -curses -urwid - +Use ``curses``, ``urwid`` -foo a b c -> -self.do_foo('a b c') -self.default('foo a b c') +Tradeoff +======== +.. image:: ease.png + :height: 300px + pirate.py ========= @@ -92,7 +97,95 @@ pirate = Pirate() pirate.cmdloop() -history: cursor -ctrl-r -help +Nothing here... but history and help + +.. ctrl-r for bash-style history + +Fundamental prrrinciple +======================= + +.. class: huge + + ``foo a b c`` -> + + ``self.do_foo('a b c')`` + +``do_``-methods: pirate2.py +=========================== + +:: + + class Pirate(Cmd): + gold = 10 + 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.jpeg + :height: 300px + +Hooks: pirate3.py +================= + +:: + class Pirate(Cmd): + gold = 3 + def do_loot(self, arg): + 'Drown your sorrrows in rrrum.' + self.gold += 1 + def do_drink(self, arg): + 'Drown your sorrrows in rrrum.' + self.gold -= 1 + def postcmd(self, stop, line): + 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): + print('Now we gots {0} doubloons'.format(self.gold)) + if self.gold < 0: + print("Off to debtorrr's prrrison. Game overrr.") + return True + return stop + def do_quit(self, arg): + print("Quiterrr!") + return True + +prompts and defaults: pirate6.py +================================ + +:: + + prompt = 'arrr> ' + def default(self, line): + print('What mean ye by "{0}"?'.format(line)) \ No newline at end of file diff -r 787573d350c5 -r 4300ef912f4a setup.py --- a/setup.py Tue Feb 16 13:01:41 2010 -0500 +++ b/setup.py Tue Feb 16 14:05:25 2010 -0500 @@ -11,7 +11,7 @@ setup( name="cmd2", version="0.6.0", - py_modules=["cmd2",], + py_modules=["cmd2","pyparsing_py3"], use_2to3=True, # metadata for upload to PyPI