def test_render_heading(self): """ Unit test for cell type "heading" """ # Generate and test heading cells level 1-6 for level in xrange(1, 7): cell = { 'cell_type': 'heading', 'level': level, 'source': ['Test for heading type H{0}'.format(level)] } # Convert cell dictionaries to NotebookNode cell_nb = nbformat.NotebookNode(cell) # Make sure "source" attribute is uniconde not list. # For some reason, creating a NotebookNode manually like # this isn't converting source to a string like using # the create-from-file routine. if type(cell_nb.source) is list: cell_nb.source = '\n'.join(cell_nb.source) # Render to rst c = ConverterRST('') rst_list = c.render_heading(cell_nb) # render should return a list nt.assert_true(isinstance(rst_list, list)) rst_str = "".join(rst_list) # Confirm rst content chk_str = "Test for heading type H{0}\n{1}\n".format( level, c.heading_level[level] * 24) nt.assert_equal(rst_str, chk_str)
def run_cell(shell, iopub, cell, timeout=300): if not hasattr(cell, 'input'): return [], False shell.execute(cell.input) # wait for finish, maximum 5min by default reply = shell.get_msg(timeout=timeout)['content'] if reply['status'] == 'error': failed = True print("\nFAILURE:") print(cell.input) print('-----') print("raised:") print('\n'.join(reply['traceback'])) else: failed = False # Collect the outputs of the cell execution outs = [] while True: try: msg = iopub.get_msg(timeout=0.2) except Empty: break msg_type = msg['msg_type'] if msg_type in ('status', 'pyin'): continue elif msg_type == 'clear_output': outs = [] continue content = msg['content'] out = current.NotebookNode(output_type=msg_type) if msg_type == 'stream': out.stream = content['name'] out.text = content['data'] elif msg_type in ('display_data', 'pyout'): for mime, data in content['data'].items(): attr = mime.split('/')[-1].lower() # this gets most right, but fix svg+html, plain attr = attr.replace('+xml', '').replace('plain', 'text') setattr(out, attr, data) if msg_type == 'pyout': out.prompt_number = content['execution_count'] elif msg_type == 'pyerr': out.ename = content['ename'] out.evalue = content['evalue'] out.traceback = content['traceback'] else: print("unhandled iopub msg: %s" % msg_type) outs.append(out) return outs, failed
def run_cell(self, cell): # noqa: C901 """Run a notebook cell and update the output of that cell in-place.""" self.shell.execute(cell.input) reply = self.shell.get_msg() status = reply['content']['status'] if status == 'error': traceback_text = ("Cell raised uncaught exception: \n" "\n".join(reply['content']['traceback'])) outs = [] while True: msg = self.iopub.get_msg(timeout=1) msg_type = msg['msg_type'] content = msg['content'] if msg_type == 'status' and content['execution_state'] == 'idle': break # IPython 3.0.0-dev writes pyerr/pyout in the notebook format # but uses error/execute_result in the message spec. This does # the translation needed for tests to pass with IPython 3.0.0-dev notebook3_format_conversions = { 'error': 'pyerr', 'execute_result': 'pyout', } msg_type = notebook3_format_conversions.get(msg_type, msg_type) out = current.NotebookNode(output_type=msg_type) if 'execution_count' in content: cell['prompt_number'] = content['execution_count'] out.prompt_number = content['execution_count'] if msg_type in ('status', 'pyin', 'execute_input'): continue elif msg_type == 'stream': out.stream = content['name'] out.text = content['data'] elif msg_type in ('display_data', 'pyout'): for mime, data in content['data'].items(): try: attr = self.MIME_MAP[mime] except KeyError: raise NotImplementedError('unhandled mime type: %s' % mime) setattr(out, attr, data) elif msg_type == 'pyerr': out.ename = content['ename'] out.evalue = content['evalue'] out.traceback = content['traceback'] elif msg_type == 'clear_output': outs = [] continue else: raise NotImplementedError('unhandled iopub message: %s' % msg_type) outs.append(out) cell['outputs'] = outs if status == 'error': raise Exception(traceback_text)