wvpy.render_workbook

View Source
# run with:
#    python -m wvpy.render_workbook test.py
#    python -m wvpy.render_workbook test.ipynb

import argparse
import os
import sys
import traceback
from wvpy.jtools import render_as_html


def main() -> int:
    parser = argparse.ArgumentParser(description="Render .py or .ipynb to .html by executing in Jupyter")
    parser.add_argument(
        'infile', 
        metavar='infile', 
        type=str, 
        nargs='+',
        help='name of input file(s)')
    parser.add_argument('--strip_input', action='store_true')
    parser.add_argument('--quiet', action='store_true')
    args = parser.parse_args()
    # checks
    assert isinstance(args.quiet, bool)
    assert isinstance(args.strip_input, bool)
    assert len(args.infile) > 0
    assert len(set(args.infile)) == len(args.infile)
    tasks = []
    for input_file_name in args.infile:
        assert isinstance(input_file_name, str)
        assert len(input_file_name) > 0
        assert not input_file_name.endswith('.html')
        assert not input_file_name.endswith('.pdf')
        if not (input_file_name.endswith('.py') or input_file_name.endswith('.ipynb')):
            py_exists = os.path.exists(input_file_name + '.py')
            ipynb_exists = os.path.exists(input_file_name + '.ipynb')
            if py_exists == ipynb_exists:
                raise ValueError("if no suffix is specified, then exactly one of the .py or ipynb file forms must be present")
            if py_exists:
                input_file_name = input_file_name + '.py'
            else:
                input_file_name = input_file_name + '.ipynb'
        assert input_file_name.endswith('.py') or input_file_name.endswith('.ipynb')
        assert os.path.exists(input_file_name)
        tasks.append(input_file_name)
    # do the work
    for input_file_name in tasks:
        render_as_html(
            input_file_name, 
            exclude_input=args.strip_input, 
            verbose=args.quiet == False)
    return 0


if __name__ == '__main__':
    try:
        ret = main()
        sys.exit(ret)
    except AssertionError:
        _, _, tb = sys.exc_info()
        tb_info = traceback.extract_tb(tb)
        filename, line, func, text = tb_info[-1]
        print(f'Assertion failed {filename}:{line} (caller {func}) in statement {text}')
    except Exception as ex:
        print(ex)
    sys.exit(-1)
    
#   def main() -> int:
View Source
def main() -> int:
    parser = argparse.ArgumentParser(description="Render .py or .ipynb to .html by executing in Jupyter")
    parser.add_argument(
        'infile', 
        metavar='infile', 
        type=str, 
        nargs='+',
        help='name of input file(s)')
    parser.add_argument('--strip_input', action='store_true')
    parser.add_argument('--quiet', action='store_true')
    args = parser.parse_args()
    # checks
    assert isinstance(args.quiet, bool)
    assert isinstance(args.strip_input, bool)
    assert len(args.infile) > 0
    assert len(set(args.infile)) == len(args.infile)
    tasks = []
    for input_file_name in args.infile:
        assert isinstance(input_file_name, str)
        assert len(input_file_name) > 0
        assert not input_file_name.endswith('.html')
        assert not input_file_name.endswith('.pdf')
        if not (input_file_name.endswith('.py') or input_file_name.endswith('.ipynb')):
            py_exists = os.path.exists(input_file_name + '.py')
            ipynb_exists = os.path.exists(input_file_name + '.ipynb')
            if py_exists == ipynb_exists:
                raise ValueError("if no suffix is specified, then exactly one of the .py or ipynb file forms must be present")
            if py_exists:
                input_file_name = input_file_name + '.py'
            else:
                input_file_name = input_file_name + '.ipynb'
        assert input_file_name.endswith('.py') or input_file_name.endswith('.ipynb')
        assert os.path.exists(input_file_name)
        tasks.append(input_file_name)
    # do the work
    for input_file_name in tasks:
        render_as_html(
            input_file_name, 
            exclude_input=args.strip_input, 
            verbose=args.quiet == False)
    return 0