Spaces:
Runtime error
Runtime error
import argparse | |
import shutil | |
import subprocess # nosec - disable B404:import-subprocess check | |
import time | |
from pathlib import Path | |
import nbformat | |
def disable_gradio_debug(notebook_path): | |
nb = nbformat.read(notebook_path, as_version=nbformat.NO_CONVERT) | |
found = False | |
for cell in nb["cells"]: | |
if "gradio" in cell["source"] and "debug" in cell["source"]: | |
found = True | |
cell["source"] = cell["source"].replace("debug=True", "debug=False") | |
if found: | |
print(f"Disabled gradio debug mode for {notebook_path}") | |
nbformat.write(nb, str(notebook_path), version=nbformat.NO_CONVERT) | |
def arguments(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument("--exclude_execution_file") | |
parser.add_argument("--exclude_conversion_file") | |
parser.add_argument("--timeout", type=float, default=7200, help="timeout for notebook execution") | |
parser.add_argument("--rst_dir", type=Path, help="rst files output directory", default=Path("rst")) | |
return parser.parse_args() | |
def prepare_ignore_list(input_file): | |
with Path(input_file).open("r") as f: | |
lines = f.readlines() | |
return list(map(str.strip, lines)) | |
def main(): | |
args = arguments() | |
ignore_conversion_list = [] | |
ignore_execution_list = [] | |
failed_notebooks = [] | |
rst_failed = [] | |
if args.exclude_conversion_file is not None: | |
ignore_conversion_list = prepare_ignore_list(args.exclude_conversion_file) | |
if args.exclude_execution_file is not None: | |
ignore_execution_list = prepare_ignore_list(args.exclude_execution_file) | |
root = Path(__file__).parents[1] | |
notebooks_dir = root / "notebooks" | |
notebooks = sorted(list(notebooks_dir.rglob("**/*.ipynb"))) | |
for notebook in notebooks: | |
notebook_path = notebook.relative_to(root) | |
if str(notebook_path) in ignore_conversion_list: | |
continue | |
disable_gradio_debug(notebook_path) | |
notebook_executed = notebook_path.parent / notebook_path.name.replace(".ipynb", "-with-output.ipynb") | |
start = time.perf_counter() | |
print(f"Convert {notebook_path}") | |
if str(notebook_path) not in ignore_execution_list: | |
try: | |
retcode = subprocess.run( | |
[ | |
"jupyter", | |
"nbconvert", | |
"--log-level=INFO", | |
"--execute", | |
"--to", | |
"notebook", | |
"--output", | |
str(notebook_executed), | |
"--output-dir", | |
str(root), | |
"--ExecutePreprocessor.kernel_name=python3", | |
str(notebook_path), | |
], | |
timeout=args.timeout, | |
).returncode | |
except subprocess.TimeoutExpired: | |
retcode = -42 | |
print(f"TIMEOUT: {notebook_path}") | |
if retcode: | |
failed_notebooks.append(str(notebook_path)) | |
continue | |
else: | |
shutil.copyfile(notebook_path, notebook_executed) | |
rst_retcode = subprocess.run( | |
[ | |
"jupyter", | |
"nbconvert", | |
"--to", | |
"rst", | |
str(notebook_executed), | |
"--output-dir", | |
str(args.rst_dir), | |
"--TagRemovePreprocessor.remove_all_outputs_tags=hide_output --TagRemovePreprocessor.enabled=True", | |
], | |
timeout=args.timeout, | |
).returncode | |
notebook_rst = args.rst_dir / notebook_executed.name.replace(".ipynb", ".rst") | |
# remove all non-printable characters | |
subprocess.run( | |
[ | |
"sed", | |
"-i", | |
"-e", | |
"s/\x1b\[[0-9;]*m//g", | |
"-e", | |
"s/\x1b\[?25h//g", | |
"-e", | |
"s/\x1b\[?25l//g", | |
str(notebook_rst), | |
], | |
timeout=args.timeout, | |
) | |
end = time.perf_counter() - start | |
print(f"Notebook conversion took: {end:.4f} s") | |
if rst_retcode: | |
rst_failed.append(str(notebook_path)) | |
if failed_notebooks: | |
print("EXECUTION FAILED:") | |
print("\n".join(failed_notebooks)) | |
if rst_failed: | |
print("RST CONVERSION FAILED:") | |
print("\n".join(rst_failed)) | |
if __name__ == "__main__": | |
main() | |