home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import exceptions
- import os
- import re
- import shlex
- import sys
- from IPython.PyColorize import Parser
- from IPython.genutils import marquee, file_read, file_readlines, Term
- __all__ = [
- 'Demo',
- 'IPythonDemo',
- 'LineDemo',
- 'IPythonLineDemo',
- 'DemoError']
-
- class DemoError(exceptions.Exception):
- pass
-
-
- def re_mark(mark):
- return re.compile('^\\s*#\\s+<demo>\\s+%s\\s*$' % mark, re.MULTILINE)
-
-
- class Demo(object):
- re_stop = re_mark('-*\\s?stop\\s?-*')
- re_silent = re_mark('silent')
- re_auto = re_mark('auto')
- re_auto_all = re_mark('auto_all')
-
- def __init__(self, src, title = '', arg_str = '', auto_all = None):
- if hasattr(src, 'read'):
- self.fobj = src
- self.fname = 'from a file-like object'
- if title == '':
- self.title = 'from a file-like object'
- else:
- self.title = title
- else:
- self.fobj = open(src)
- self.fname = src
- if title == '':
- (filepath, filename) = os.path.split(src)
- self.title = filename
- else:
- self.title = title
- self.sys_argv = [
- src] + shlex.split(arg_str)
- self.auto_all = auto_all
- self.ip_ns = __IPYTHON__.user_ns
- self.ip_colorize = __IPYTHON__.pycolorize
- self.ip_showtb = __IPYTHON__.showtraceback
- self.ip_runlines = __IPYTHON__.runlines
- self.shell = __IPYTHON__
- self.reload()
-
-
- def reload(self):
- self.src = self.fobj.read()
- src_b = _[1]
- self._silent = [ bool(self.re_silent.findall(b)) for b in src_b ]
- self._auto = [ bool(self.re_auto.findall(b)) for b in src_b ]
- src_blocks = []
-
- auto_strip = lambda s: self.re_auto.sub('', s)
- for i, b in enumerate(src_b):
- if self._auto[i]:
- src_blocks.append(auto_strip(b))
- continue
- ([] if self.auto_all is None else [],)
- src_blocks.append(b)
-
- src_blocks[0] = self.re_auto_all.sub('', src_blocks[0])
- self.nblocks = len(src_blocks)
- self.src_blocks = src_blocks
- self.src_blocks_colored = map(self.ip_colorize, self.src_blocks)
- self.reset()
-
-
- def reset(self):
- self.user_ns = { }
- self.finished = False
- self.block_index = 0
-
-
- def _validate_index(self, index):
- if index < 0 or index >= self.nblocks:
- raise ValueError('invalid block index %s' % index)
- index >= self.nblocks
-
-
- def _get_index(self, index):
- if index is None:
- if self.finished:
- print >>Term.cout, 'Demo finished. Use <demo_name>.reset() if you want to rerun it.'
- return None
- index = self.block_index
- else:
- self._validate_index(index)
- return index
-
-
- def seek(self, index):
- if index < 0:
- index = self.nblocks + index
-
- self._validate_index(index)
- self.block_index = index
- self.finished = False
-
-
- def back(self, num = 1):
- self.seek(self.block_index - num)
-
-
- def jump(self, num = 1):
- self.seek(self.block_index + num)
-
-
- def again(self):
- self.back(1)
- self()
-
-
- def edit(self, index = None):
- index = self._get_index(index)
- if index is None:
- return None
- if index > 0:
- index -= 1
-
- filename = self.shell.mktempfile(self.src_blocks[index])
- self.shell.hooks.editor(filename, 1)
- new_block = file_read(filename)
- self.src_blocks[index] = new_block
- self.src_blocks_colored[index] = self.ip_colorize(new_block)
- self.block_index = index
- self()
-
-
- def show(self, index = None):
- index = self._get_index(index)
- if index is None:
- return None
- print >>Term.cout, self.marquee('<%s> block # %s (%s remaining)' % (self.title, index, self.nblocks - index - 1))
- print >>Term.cout, self.src_blocks_colored[index]
- sys.stdout.flush()
-
-
- def show_all(self):
- fname = self.title
- title = self.title
- nblocks = self.nblocks
- silent = self._silent
- marquee = self.marquee
- for index, block in enumerate(self.src_blocks_colored):
- if silent[index]:
- print >>Term.cout, marquee('<%s> SILENT block # %s (%s remaining)' % (title, index, nblocks - index - 1))
- else:
- print >>Term.cout, marquee('<%s> block # %s (%s remaining)' % (title, index, nblocks - index - 1))
- print >>Term.cout, block,
-
- sys.stdout.flush()
-
-
- def runlines(self, source):
- exec source in self.user_ns
-
-
- def __call__(self, index = None):
- index = self._get_index(index)
- if index is None:
- return None
-
- try:
- marquee = self.marquee
- next_block = self.src_blocks[index]
- self.block_index += 1
-
- try:
- save_argv = sys.argv
- sys.argv = self.sys_argv
- self.runlines(next_block)
- self.post_cmd()
- finally:
- sys.argv = save_argv
-
- except:
- index is None
- self.ip_showtb(filename = self.fname)
-
- self.ip_ns.update(self.user_ns)
- if self.block_index == self.nblocks:
- mq1 = self.marquee('END OF DEMO')
- self.finished = True
-
-
-
- def marquee(self, txt = '', width = 78, mark = '*'):
- return marquee(txt, width, mark)
-
-
- def pre_cmd(self):
- pass
-
-
- def post_cmd(self):
- pass
-
-
-
- class IPythonDemo(Demo):
-
- def runlines(self, source):
- self.shell.runlines(source)
-
-
-
- class LineDemo(Demo):
-
- def reload(self):
- src_b = _[1]
- nblocks = len(src_b)
- self.src = os.linesep.join(self.fobj.readlines())
- self._silent = [
- False] * nblocks
- self._auto = [
- True] * nblocks
- self.auto_all = True
- self.nblocks = nblocks
- self.src_blocks = src_b
- self.src_blocks_colored = map(self.ip_colorize, self.src_blocks)
- self.reset()
-
-
-
- class IPythonLineDemo(IPythonDemo, LineDemo):
- pass
-
-
- class ClearMixin(object):
-
- def marquee(self, txt = '', width = 78, mark = '*'):
- return ''
-
-
- def pre_cmd(self):
- import IPython.platutils as IPython
- IPython.platutils.term_clear()
-
-
-
- class ClearDemo(ClearMixin, Demo):
- pass
-
-
- class ClearIPDemo(ClearMixin, IPythonDemo):
- pass
-
-