Source code for pycharmers.cli.jupyter_arrange

# coding: utf-8
import os
import sys
import json
import argparse

from pathlib import Path
from typing import Any,Dict

[docs]def reorder_jupyter(jupyter_dict:Dict[str,Any])->Dict[str,Any]: """Reorder the execution count in Jupyter Notebook (``.ipynb``) Args: jupyter_dict (Dict[str,Any]): The contents of the jupyter notebook file (``.ipynb``). Returns: Dict[str,Any]: The reordered contents of the jupyter notebook file. """ N = sum([1 for cell in jupyter_dict['cells'] if 'execution_count' in cell]) num = 0 for cell in jupyter_dict['cells']: if 'execution_count' in cell: num+=1 cell['execution_count'] = num if 'outputs' in cell: outputs = cell['outputs'] for output in outputs: if 'execution_count' in output: cell['outputs'][0]['execution_count']=num # output['execution_count'] = num if num==N-1: break return jupyter_dict
name2method = { "reorder" : reorder_jupyter, }
[docs]def jupyter_arrange(argv=sys.argv[1:]): """Arrange Jupyter Notebook. Args: -I/-in/--input-jupyter (str) : The path to ``input_jupyter.ipynb``. -O/-out/--output-jupyter (str) : The path to ``output_jupyter.ipynb``. -M/--method (str) : Which method to apply? NOTE: When you run from the command line, execute as follows:: $ jupyter-arrange -I path/to/input.ipynb -O path/to/output.ipynb -M reorder """ parser = argparse.ArgumentParser(prog="jupyter-arrange", description="Arrange jupyter notebook.", add_help=True) parser.add_argument("-I", "-in", "--input-jupyter", type=str, required=True, help="The path to input_jupyter.ipynb") parser.add_argument("-O", "-out", "--output-jupyter", type=str, default=None, help="The path to output_jupyter.ipynb") parser.add_argument("-M", "--method", choices=list(name2method.keys()), default="reorder", help="Which method to apply?") args = parser.parse_args() input_jupyter = args.input_jupyter output_jupyter = args.output_jupyter method = args.method if output_jupyter is None: output_jupyter = f"_{method}".join(os.path.splitext(input_jupyter)) # Read jupyter file. with open(input_jupyter, mode="r") as input_file: jupyter_dict = json.load(input_file) # Arrange jupyter_dict = name2method[method](jupyter_dict) # Write jupyter file. with open(output_jupyter, mode="w") as output_file: json.dump(jupyter_dict, output_file)