def test_tutorial_notebook(): from IPython.nbformat.current import read from runipy.notebook_runner import NotebookRunner rootdir = os.path.join(aospy.__path__[0], 'examples') with open(os.path.join(rootdir, 'tutorial.ipynb')) as nb: notebook = read(nb, 'json') r = NotebookRunner(notebook) r.run_notebook() r.shutdown_kernel()
class IPyNbFile(pytest.File): def collect(self): with self.fspath.open() as f: self.notebook_folder = self.fspath.dirname self.nb = reads(f.read(), 'json') self.runner = NotebookRunner(self.nb) cell_num = 0 for cell in self.runner.iter_code_cells(): yield IPyNbCell(self.name, self, cell_num, cell) cell_num += 1 def setup(self): self.fixture_cell = None def teardown(self): self.runner.shutdown_kernel()
def run(self): # Now convert the lecture notes, problem sets, and practice problems to # HTML notebooks. from runipy.notebook_runner import NotebookRunner from IPython.nbformat.current import read, write start_dir = os.path.abspath('.') for notebook in glob.glob('?.???/*.ipynb'): print("Running {0}...".format(notebook)) os.chdir(os.path.dirname(notebook)) with open(os.path.basename(notebook)) as f: r = NotebookRunner(read(f, 'json'), pylab=False) r.run_notebook(skip_exceptions=True) with open(os.path.basename(notebook), 'w') as f: write(r.nb, f, 'json') os.chdir(start_dir) r.shutdown_kernel()
class IPyNbFile(pytest.File): def collect(self): with self.fspath.open() as f: payload = f.read() self.nb = nbformat.reads(payload, 3) # kernel needs to start from the same dir the ipynb is in notebook_dir = self.fspath.dirname cwd = os.getcwd() if cwd != notebook_dir: os.chdir(notebook_dir) self.runner = NotebookRunner(self.nb) os.chdir(cwd) cell_num = 1 for cell in self.runner.iter_code_cells(): yield IPyNbCell.from_parent(self, name=self.name, cell_num=cell_num, cell=cell) cell_num += 1 def setup(self): self.fixture_cell = None def teardown(self): self.runner.shutdown_kernel()
class IPyNbFile(pytest.File): def collect(self): with self.fspath.open() as f: payload = f.read() self.notebook_folder = self.fspath.dirname try: # Ipython 3 self.nb = reads(payload, 3) except (TypeError, NBFormatError): # Ipython 2 self.nb = reads(payload, 'json') self.runner = NotebookRunner(self.nb) cell_num = 1 for cell in self.runner.iter_code_cells(): yield IPyNbCell(self.name, self, cell_num, cell) cell_num += 1 def setup(self): self.fixture_cell = None def teardown(self): self.runner.shutdown_kernel()
def parse(root): """returns list of the NB in root """ dirs = sorted([dn for dn in os.listdir(root) if '00' < dn < '99']) r = [] for sub_dir in dirs: f = sorted([ os.path.join(root, sub_dir, fn) for fn in os.listdir(os.path.join(root, sub_dir)) if ('00' < fn < '99' or fn.startswith('content')) and fn.endswith('.ipynb') ]) r.extend(f) return r nb_filenames = ["Index.ipynb", "Index-labs1-6.ipynb"] nb_filenames.extend(parse('./LABS')) nb_filenames.extend(parse('.')) for nb_filename in nb_filenames: print('*' * 80) print(nb_filename) print('*' * 80) notebook = read(open(nb_filename), 'json') r = NotebookRunner(notebook) r.run_notebook() r.shutdown_kernel()
def main(): log_format = '%(asctime)s %(levelname)s: %(message)s' log_datefmt = '%m/%d/%Y %I:%M:%S %p' parser = argparse.ArgumentParser() parser.add_argument('--version', '-v', action='version', version=runipy.__version__, help='print version information') parser.add_argument('input_file', nargs='?', help='.ipynb file to run (or stdin)') parser.add_argument('output_file', nargs='?', help='.ipynb file to save cell output to') parser.add_argument('--quiet', '-q', action='store_true', help='don\'t print anything unless things go wrong') parser.add_argument('--overwrite', '-o', action='store_true', help='write notebook output back to original notebook') parser.add_argument('--html', nargs='?', default=False, help='output an HTML snapshot of the notebook') parser.add_argument('--template', nargs='?', default=False, help='template to use for HTML output') parser.add_argument('--pylab', action='store_true', help='start notebook with pylab enabled') parser.add_argument('--matplotlib', action='store_true', help='start notebook with matplotlib inlined') parser.add_argument('--skip-exceptions', '-s', action='store_true', help='if an exception occurs in a cell,' + ' continue running the subsequent cells') parser.add_argument( '--stdout', action='store_true', help='print notebook to stdout (or use - as output_file') parser.add_argument( '--stdin', action='store_true', help='read notebook from stdin (or use - as input_file)') parser.add_argument( '--no-chdir', action='store_true', help="do not change directory to notebook's at kernel startup") parser.add_argument('--profile-dir', help="set the profile location directly") args = parser.parse_args() if args.overwrite: if args.output_file is not None: print( 'Error: output_filename must not be provided if ' '--overwrite (-o) given', file=stderr) exit(1) else: args.output_file = args.input_file if not args.quiet: logging.basicConfig(level=logging.INFO, format=log_format, datefmt=log_datefmt) working_dir = None payload_source = "" payload = "" if args.input_file == '-' or args.stdin: # force stdin payload_source = stdin.name payload = stdin.read() elif not args.input_file and stdin.isatty(): # no force, empty stdin parser.print_help() exit() elif not args.input_file: # no file -> default stdin payload_source = stdin.name payload = stdin.read() else: # must have specified normal input_file with open(args.input_file) as input_file: payload_source = input_file.name payload = input_file.read() working_dir = os.path.dirname(args.input_file) if args.no_chdir: working_dir = None if args.profile_dir: profile_dir = os.path.expanduser(args.profile_dir) else: profile_dir = None logging.info('Reading notebook %s', payload_source) try: # Ipython 3 nb = reads(payload, 3) except (TypeError, NBFormatError): # Ipython 2 nb = reads(payload, 'json') nb_runner = NotebookRunner(nb, args.pylab, args.matplotlib, profile_dir, working_dir) exit_status = 0 try: nb_runner.run_notebook(skip_exceptions=args.skip_exceptions) except NotebookError: exit_status = 1 if args.output_file and args.output_file != '-': logging.info('Saving to %s', args.output_file) with open(args.output_file, 'w') as output_filehandle: try: # Ipython 3 write(nb_runner.nb, output_filehandle, 3) except (TypeError, NBFormatError): # Ipython 2 write(nb_runner.nb, output_filehandle, 'json') if args.stdout or args.output_file == '-': try: # Ipython 3 write(nb_runner.nb, stdout, 3) except (TypeError, NBFormatError): # Ipython 2 write(nb_runner.nb, stdout, 'json') print() if args.html is not False: if args.html is None: # if --html is given but no filename is provided, # come up with a sane output name based on the # input filename if args.input_file.endswith('.ipynb'): args.html = args.input_file[:-6] + '.html' else: args.html = args.input_file + '.html' if args.template is False: exporter = HTMLExporter() else: exporter = HTMLExporter(config=Config({ 'HTMLExporter': { 'template_file': args.template, 'template_path': ['.', '/'] } })) logging.info('Saving HTML snapshot to %s' % args.html) output, resources = exporter.from_notebook_node( convert(nb_runner.nb, current_nbformat)) codecs.open(args.html, 'w', encoding='utf-8').write(output) nb_runner.shutdown_kernel() if exit_status != 0: logging.warning('Exiting with nonzero exit status') exit(exit_status)
def main(): log_format = '%(asctime)s %(levelname)s: %(message)s' log_datefmt = '%m/%d/%Y %I:%M:%S %p' parser = argparse.ArgumentParser() parser.add_argument('--version', '-v', action='version', version=runipy.__version__, help='print version information') parser.add_argument('input_file', nargs='?', help='.ipynb file to run (or stdin)') parser.add_argument('output_file', nargs='?', help='.ipynb file to save cell output to') parser.add_argument('--quiet', '-q', action='store_true', help='don\'t print anything unless things go wrong') parser.add_argument('--overwrite', '-o', action='store_true', help='write notebook output back to original notebook') parser.add_argument('--html', nargs='?', default=False, help='output an HTML snapshot of the notebook') parser.add_argument('--template', nargs='?', default=False, help='template to use for HTML output') parser.add_argument('--pylab', action='store_true', help='start notebook with pylab enabled') parser.add_argument('--matplotlib', action='store_true', help='start notebook with matplotlib inlined') parser.add_argument('--skip-exceptions', '-s', action='store_true', help='if an exception occurs in a cell, continue running the subsequent cells') parser.add_argument('--stdout', action='store_true', help='print notebook to stdout (or use - as output_file') parser.add_argument('--stdin', action='store_true', help='read notebook from stdin (or use - as input_file)') parser.add_argument('--no-chdir', action='store_true', help="do not change directory to notebook's at kernel startup") parser.add_argument('--profile-dir', help="set the profile location directly") args = parser.parse_args() if args.overwrite: if args.output_file is not None: print('Error: output_filename must not be provided if ' '--overwrite (-o) given', file=stderr) exit(1) else: args.output_file = args.input_file if not args.quiet: logging.basicConfig(level=logging.INFO, format=log_format, datefmt=log_datefmt) working_dir = None if args.input_file == '-' or args.stdin: # force stdin payload = stdin elif not args.input_file and stdin.isatty(): # no force, empty stdin parser.print_help() exit() elif not args.input_file: # no file -> default stdin payload = stdin else: # must have specified normal input_file payload = open(args.input_file) working_dir = os.path.dirname(args.input_file) if args.no_chdir: working_dir = None if args.profile_dir: profile_dir = os.path.expanduser(args.profile_dir) else: profile_dir = None logging.info('Reading notebook %s', payload.name) nb = read(payload, 'json') nb_runner = NotebookRunner(nb, args.pylab, args.matplotlib, profile_dir, working_dir) exit_status = 0 try: nb_runner.run_notebook(skip_exceptions=args.skip_exceptions) except NotebookError: exit_status = 1 if args.output_file and args.output_file != '-': logging.info('Saving to %s', args.output_file) write(nb_runner.nb, open(args.output_file, 'w'), 'json') if args.stdout or args.output_file == '-': write(nb_runner.nb, stdout, 'json') print() if args.html is not False: if args.html is None: # if --html is given but no filename is provided, # come up with a sane output name based on the # input filename if args.input_file.endswith('.ipynb'): args.html = args.input_file[:-6] + '.html' else: args.html = args.input_file + '.html' if args.template is False: exporter = HTMLExporter() else: exporter = HTMLExporter( config=Config({'HTMLExporter':{'template_file':args.template, 'template_path': ['.', '/']}})) logging.info('Saving HTML snapshot to %s' % args.html) output, resources = exporter.from_notebook_node(nb_runner.nb) codecs.open(args.html, 'w', encoding='utf-8').write(output) nb_runner.shutdown_kernel() if exit_status != 0: logging.warning('Exiting with nonzero exit status') exit(exit_status)
def run_notebook(parser, args): """Run notebook. Input parameters are in args. To run this inside script, put args to some object, i.e. >>> class Args(object): pass >>> args = Args() >>> args.output_file = ... >>> exit_status = run_notebook(args) """ if args.overwrite: if args.output_file is not None: print('Error: output_filename must not be provided if ' '--overwrite (-o) given', file=stderr) exit(1) else: args.output_file = args.input_file if not args.quiet: logging.basicConfig(level=logging.INFO, format=log_format, datefmt=log_datefmt) if args.debug: logging.basicConfig(level=logging.DEBUG, format=log_format, datefmt=log_datefmt) working_dir = None if args.profile_dir: profile_dir = os.path.expanduser(args.profile_dir) else: profile_dir = None if args.input_file == '-' or args.stdin: # force stdin payload = stdin elif not args.input_file and stdin.isatty(): # no force, empty stdin parser.print_help() exit() elif not args.input_file: # no file -> default stdin payload = stdin else: # must have specified normal input_file payload = open(args.input_file) working_dir = os.path.dirname(args.input_file) if args.no_chdir: working_dir = None logging.info('Reading notebook %s', payload.name) nb = read(payload, 'json') nb_runner = NotebookRunner(nb, args.pylab, args.matplotlib, profile_dir, working_dir, kernel=args.kernel, port=args.port) exit_status = 0 try: nb_runner.run_notebook(skip_exceptions=args.skip_exceptions) except NotebookError: exit_status = 1 if args.output_file and args.output_file != '-': logging.info('Saving to %s', args.output_file) write(nb_runner.nb, open(args.output_file, 'w'), 'json') if args.stdout or args.output_file == '-': write(nb_runner.nb, stdout, 'json') print() if args.html is not False: export_to_html(nb_runner, args) if args.rst is not False: export_to_rst(nb_runner, args) nb_runner.shutdown_kernel() return exit_status
from runipy.notebook_runner import NotebookRunner from IPython.nbformat.current import read import os def parse(root): """returns list of the NB in root """ dirs = sorted([dn for dn in os.listdir(root) if '00'<dn<'99']) r = [] for sub_dir in dirs: f = sorted([os.path.join(root,sub_dir,fn) for fn in os.listdir(os.path.join(root,sub_dir)) if ('00'<fn<'99' or fn.startswith('content')) and fn.endswith('.ipynb')]) r.extend(f) return r nb_filenames = ["Index.ipynb","Index-labs1-6.ipynb"] nb_filenames.extend(parse('./LABS')) nb_filenames.extend(parse('.')) for nb_filename in nb_filenames: print('*'*80) print(nb_filename) print('*'*80) notebook = read(open(nb_filename), 'json') r = NotebookRunner(notebook) r.run_notebook() r.shutdown_kernel()
def main(): log_format = "%(asctime)s %(levelname)s: %(message)s" log_datefmt = "%m/%d/%Y %I:%M:%S %p" parser = argparse.ArgumentParser() parser.add_argument( "--version", "-v", action="version", version=runipy.__version__, help="print version information" ) parser.add_argument("input_file", nargs="?", help=".ipynb file to run (or stdin)") parser.add_argument("output_file", nargs="?", help=".ipynb file to save cell output to") parser.add_argument("--quiet", "-q", action="store_true", help="don't print anything unless things go wrong") parser.add_argument( "--overwrite", "-o", action="store_true", help="write notebook output back to original notebook" ) format_grp = parser.add_mutually_exclusive_group() format_grp.add_argument("--html", nargs="?", default=False, help="output an HTML snapshot of the notebook") format_grp.add_argument("--pdf", nargs="?", default=False, help="output a PDF snapshot of the notebook") parser.add_argument("--template", nargs="?", default=False, help="template to use for HTML output") parser.add_argument("--pylab", action="store_true", help="start notebook with pylab enabled") parser.add_argument("--matplotlib", action="store_true", help="start notebook with matplotlib inlined") parser.add_argument( "--skip-exceptions", "-s", action="store_true", help="if an exception occurs in a cell," + " continue running the subsequent cells", ) parser.add_argument("--stdout", action="store_true", help="print notebook to stdout (or use - as output_file") parser.add_argument("--stdin", action="store_true", help="read notebook from stdin (or use - as input_file)") parser.add_argument( "--no-chdir", action="store_true", help="do not change directory to notebook's at kernel startup" ) parser.add_argument("--profile-dir", help="set the profile location directly") args = parser.parse_args() if args.overwrite: if args.output_file is not None: print("Error: output_filename must not be provided if " "--overwrite (-o) given", file=stderr) exit(1) else: args.output_file = args.input_file if not args.quiet: logging.basicConfig(level=logging.INFO, format=log_format, datefmt=log_datefmt) working_dir = None payload_source = "" payload = "" if args.input_file == "-" or args.stdin: # force stdin payload_source = stdin.name payload = stdin.read() elif not args.input_file and stdin.isatty(): # no force, empty stdin parser.print_help() exit() elif not args.input_file: # no file -> default stdin payload_source = stdin.name payload = stdin.read() else: # must have specified normal input_file with open(args.input_file) as input_file: payload_source = input_file.name payload = input_file.read() working_dir = os.path.dirname(args.input_file) if args.no_chdir: working_dir = None if args.profile_dir: profile_dir = os.path.expanduser(args.profile_dir) else: profile_dir = None logging.info("Reading notebook %s", payload_source) try: # Ipython 3 nb = reads(payload, 3) except (TypeError, NBFormatError): # Ipython 2 nb = reads(payload, "json") nb_runner = NotebookRunner(nb, args.pylab, args.matplotlib, profile_dir, working_dir) exit_status = 0 try: nb_runner.run_notebook(skip_exceptions=args.skip_exceptions) except NotebookError: exit_status = 1 if args.output_file and args.output_file != "-": logging.info("Saving to %s", args.output_file) with open(args.output_file, "w") as output_filehandle: try: # Ipython 3 write(nb_runner.nb, output_filehandle, 3) except (TypeError, NBFormatError): # Ipython 2 write(nb_runner.nb, output_filehandle, "json") if args.stdout or args.output_file == "-": try: # Ipython 3 write(nb_runner.nb, stdout, 3) except (TypeError, NBFormatError): # Ipython 2 write(nb_runner.nb, stdout, "json") print() if args.html is not False: if args.html is None: # if --html is given but no filename is provided, # come up with a sane output name based on the # input filename if args.input_file.endswith(".ipynb"): args.html = args.input_file[:-6] + ".html" else: args.html = args.input_file + ".html" if args.template is False: exporter = HTMLExporter() else: exporter = HTMLExporter( config=Config({"HTMLExporter": {"template_file": args.template, "template_path": [".", "/"]}}) ) logging.info("Saving HTML snapshot to %s" % args.html) output, resources = exporter.from_notebook_node(convert(nb_runner.nb, current_nbformat)) codecs.open(args.html, "w", encoding="utf-8").write(output) elif args.pdf is not False: if args.pdf is None: # if --html is given but no filename is provided, # come up with a sane output name based on the # input filename if args.input_file.endswith(".ipynb"): args.pdf = args.input_file[:-6] + ".pdf" else: args.pdf = args.input_file + ".pdf" if args.template is False: exporter = PDFExporter() else: exporter = PDFExporter( config=Config({"PDFExporter": {"template_file": args.template, "template_path": [".", "/"]}}) ) logging.info("Saving PDF snapshot to %s" % args.pdf) output, resources = exporter.from_notebook_node(convert(nb_runner.nb, current_nbformat)) writer = FilesWriter() writer.build_directory = os.path.dirname(args.pdf) writer.write(output, resources, os.path.splitext(os.path.basename(args.pdf))[0]) nb_runner.shutdown_kernel() if exit_status != 0: logging.warning("Exiting with nonzero exit status") exit(exit_status)