##// END OF EJS Templates
Remove extraneous whitespace
Julia Evans -
Show More
@@ -1,109 +1,109 b''
1 1 """Module containing a preprocessor that removes the outputs from code cells"""
2 2
3 3 # Copyright (c) IPython Development Team.
4 4 # Distributed under the terms of the Modified BSD License.
5 5
6 6 #-----------------------------------------------------------------------------
7 7 # Imports
8 8 #-----------------------------------------------------------------------------
9 9
10 10 import os
11 11 import sys
12 12
13 13 from Queue import Empty
14 14 from IPython.kernel import KernelManager
15 15 from IPython.nbformat.current import reads, NotebookNode, writes
16 16
17 17 from .base import Preprocessor
18 18
19 19
20 20 #-----------------------------------------------------------------------------
21 21 # Classes
22 22 #-----------------------------------------------------------------------------
23 23 class ExecutePreprocessor(Preprocessor):
24 24 """
25 25 Executes all the cells in a notebook
26 26 """
27 27 def __init__(self, *args, **kwargs):
28 28 """
29 29 Start an kernel to run the Python code
30 30 """
31 31 super(ExecutePreprocessor, self).__init__(*args, **kwargs)
32 32 self.km = KernelManager()
33 33 # run %pylab inline, because some notebooks assume this
34 34 # even though they shouldn't
35 35 self.km.start_kernel(extra_arguments=['--pylab=inline'], stderr=open(os.devnull, 'w'))
36 36 self.kc = self.km.client()
37 37 self.kc.start_channels()
38 38 self.iopub = self.kc.iopub_channel
39 39 self.shell = self.kc.shell_channel
40
40
41 41 self.shell.execute("pass")
42 42 self.shell.get_msg()
43
43
44 44 def preprocess_cell(self, cell, resources, cell_index):
45 45 """
46 46 Apply a transformation on each code cell. See base.py for details.
47 47 """
48 48 if cell.cell_type != 'code':
49 49 return cell, resources
50 50 try:
51 51 outputs = self.run_cell(self.shell, self.iopub, cell)
52 52 except Exception as e:
53 53 print >> sys.stderr, "failed to run cell:", repr(e)
54 54 print >> sys.stderr, cell.input
55 55 sys.exit(1)
56 56 cell.outputs = outputs
57 57 return cell, resources
58 58
59 59 @staticmethod
60 60 def run_cell(shell, iopub, cell):
61 61 # print cell.input
62 62 shell.execute(cell.input)
63 63 # wait for finish, maximum 20s
64 64 shell.get_msg(timeout=20)
65 65 outs = []
66
66
67 67 while True:
68 68 try:
69 69 msg = iopub.get_msg(timeout=0.2)
70 70 except Empty:
71 71 break
72 72 msg_type = msg['msg_type']
73 73 if msg_type in ('status', 'pyin'):
74 74 continue
75 75 elif msg_type == 'clear_output':
76 76 outs = []
77 77 continue
78
78
79 79 content = msg['content']
80 80 # print msg_type, content
81 81 out = NotebookNode(output_type=msg_type)
82
82
83 83 if msg_type == 'stream':
84 84 out.stream = content['name']
85 85 out.text = content['data']
86 86 elif msg_type in ('display_data', 'pyout'):
87 87 out['metadata'] = content['metadata']
88 88 for mime, data in content['data'].iteritems():
89 89 attr = mime.split('/')[-1].lower()
90 90 # this gets most right, but fix svg+html, plain
91 91 attr = attr.replace('+xml', '').replace('plain', 'text')
92 92 setattr(out, attr, data)
93 93 if msg_type == 'pyout':
94 94 out.prompt_number = content['execution_count']
95 95 elif msg_type == 'pyerr':
96 96 out.ename = content['ename']
97 97 out.evalue = content['evalue']
98 98 out.traceback = content['traceback']
99 99 else:
100 100 print >> sys.stderr, "unhandled iopub msg:", msg_type
101
101
102 102 outs.append(out)
103 103 return outs
104
104
105 105
106 106 def __del__(self):
107 107 self.kc.stop_channels()
108 108 self.km.shutdown_kernel()
109 109 del self.km
General Comments 0
You need to be logged in to leave comments. Login now