Sample Code
Here are some examples of scripts using purdy as a library. Full source is available in the repository: https://github.com/cltrudeau/purdy/tree/master/extras/samples
#!/usr/bin/env python
### Example purdy library code
#
# Displays a colourized Python REPL session to the screen
from purdy.actions import Append
from purdy.content import Code
from purdy.ui import SimpleScreen
screen = SimpleScreen()
blob = Code('../display_code/console.repl')
actions = [
Append(screen.code_box, blob),
]
if __name__ == '__main__':
screen.run(actions)
#!/usr/bin/env python
### Example purdy library code
#
# Appends the same colourized Python REPL session to the screen multiple
# times, waiting for a keypress between each
from purdy.actions import Append, Wait
from purdy.content import Code
from purdy.ui import SimpleScreen
screen = SimpleScreen(starting_line_number=1)
code_box = screen.code_box
blob = Code('../display_code/simple.repl')
actions = [
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
Append(code_box, blob),
Wait(),
]
if __name__ == '__main__':
screen.run(actions)
#!/usr/bin/env python
### Example purdy library code
#
# Uses the typewriter animation to display a bash console session
from purdy.actions import AppendTypewriter
from purdy.content import Code
from purdy.ui import SimpleScreen
screen = SimpleScreen()
code_box = screen.code_box
blob = Code('../display_code/curl.bash')
actions = [
AppendTypewriter(code_box, blob),
]
if __name__ == '__main__':
screen.run(actions)
#!/usr/bin/env python
### Example purdy library code
#
# Demonstrates the Shell action that runs a subprocess and returns the result
from purdy.actions import Shell, AppendTypewriter
from purdy.content import Code
from purdy.ui import SimpleScreen
screen = SimpleScreen()
code_box = screen.code_box
cmd1 = 'echo "hello there"'
cmd2 = 'echo "it is a nice day today"'
blob = Code(text=f'$ {cmd1}')
blob2 = Code(text=f'$ {cmd2}')
actions = [
AppendTypewriter(code_box, blob),
Shell(code_box, cmd1),
AppendTypewriter(code_box, blob2),
Shell(code_box, cmd2),
]
if __name__ == '__main__':
screen.run(actions)
#!/usr/bin/env python
### Example purdy library code
#
# Demonstrates the code folding mechanism
from purdy.actions import Append, Fold, Wait, Clear
from purdy.content import Code
from purdy.ui import SimpleScreen
code = Code('../display_code/code.py')
screen = SimpleScreen(starting_line_number=1)
box = screen.code_box
actions = [
Append(box, code),
Wait(),
Fold(box, 20, 23),
Wait(),
Fold(box, 27),
Wait(),
Clear(box), # test long fold without wait, used to crash
Append(box, code),
Fold(box, 2),
]
if __name__ == '__main__':
screen.run(actions)
#!/usr/bin/env python
### Example purdy library code
#
# Demonstrates highlighting and unhighlighting lines of code
from purdy.actions import Append, Highlight, Wait
from purdy.content import Code
from purdy.settings import settings
from purdy.ui import SimpleScreen
#settings['colour'] = 16
screen = SimpleScreen(settings, starting_line_number=1)
code_box = screen.code_box
blob = Code('../display_code/console.repl')
actions = [
Append(code_box, blob),
Wait(),
Highlight(code_box, range(5, 41), True),
Wait(),
Highlight(code_box, '5,6,10-20', False),
]
if __name__ == '__main__':
screen.run(actions)
#!/usr/bin/env python
### Example purdy library code
#
# Demonstrates appending strings to the end of existing lines as well as
# replacing lines. Both done with and without the typewriter animation.
from purdy.actions import (Append, Wait, Suffix, SuffixTypewriter,
Replace, Remove, InsertTypewriter)
from purdy.content import Code
from purdy.ui import SplitScreen
screen = SplitScreen(top_starting_line_number=10)
top = screen.top
bottom = screen.bottom
source = """\
@decorator
def foo(x):
\"\"\"Multi-line
doc string
\"\"\"
for index in range(1, x):
blah = '''
thing'''
# about to print
print(index)
"""
code = Code(text=source)
source = """\
>>> a = 1
>>> b = 2
>>> c = 3
"""
repl = Code(text=source)
actions = [
Append(top, code),
Append(bottom, repl),
Wait(),
Suffix(top, 1, 's'),
Suffix(top, 1, ' # append'),
Suffix(top, 2, ' # append'),
Suffix(top, 3, ' more string now'),
Suffix(top, 5, ' # append'),
Suffix(top, 6, ' # append'),
Suffix(top, 7, ' inside blah mline'),
Suffix(top, 8, ' # append'),
Suffix(top, 9, ' more comment'),
Suffix(top, 10, ' # append'),
Wait(),
SuffixTypewriter(bottom, 2, '9'),
Wait(),
]
blob1 = Code(text='>>> d = 4')
blob2 = Code(text="""\
>>> e = 5
>>> f = 6
""")
actions.extend([
Replace(bottom, 3, blob1),
Wait(),
SuffixTypewriter(bottom, 1, '56789'),
Wait(),
Suffix(bottom, 1, '333'),
SuffixTypewriter(bottom, 1, '444'),
Wait(),
Remove(bottom, 2, 1),
InsertTypewriter(bottom, 2, blob2),
InsertTypewriter(bottom, 0, blob2),
])
if __name__ == '__main__':
screen.run(actions)
#!/usr/bin/env python
### Example purdy library code
#
# Demonstrates the slide transition animation
from purdy.actions import Append, Wait, Transition, Fold
from purdy.content import Code
from purdy.ui import SimpleScreen, VirtualCodeBox
screen = SimpleScreen(starting_line_number=10)
code_box = screen.code_box
blob = Code('../display_code/simple.repl')
blob2 = Code('../display_code/traceback.repl')
blob3 = Code('../display_code/decorator.repl')
vbox = VirtualCodeBox(starting_line_number=20, display_mode='urwid')
# prep vbox for copy
vbox.perform_actions([
Append(vbox, blob3),
Fold(vbox, 2, 2),
])
actions = [
Append(code_box, blob2),
Wait(),
Transition(code_box), # test transition to empty
Append(code_box, blob),
Wait(),
# Test Wait after Transition and code box copy
Transition(code_box, code_box_to_copy=vbox),
Wait(),
Append(code_box, blob2),
]
if __name__ == '__main__':
screen.run(actions)