Source code for aerosandbox.tools.python.execution

from pathlib import Path
import sys, os
from aerosandbox.tools.python.io import convert_ipynb_to_py


[docs]def run_python_file(path: Path) -> None: """ Executes a Python file from a path. Args: path: File path Returns: None """ sys.path.append(str(path.parent)) __import__(path.with_suffix("").name)
[docs]def run_all_python_files(path: Path, recursive=True, verbose=True) -> None: """ Executes all Python files and Jupyter Notebooks in a directory. Args: path: A Path-type object (Path from built-in pathlib) representing a filepath recursive: Executes recursively (e.g. searches all subfolders too) Returns: None """ # Exclusions: if path == Path(os.path.abspath(__file__)): # Don't run this file return if "ignore" in str(path).lower(): # Don't run any file or folder with the word "ignore" in the name. return if path.is_file(): ### Run the file if it's a Python file if path.suffix == ".py": if verbose: print(f"##### Running file: {path}") run_python_file(path) ### Run the file if it's a Jupyter notebook if path.suffix == ".ipynb": if verbose: print(f"##### Converting file: {path}") notebook = path python_file = path.with_suffix(".py") convert_ipynb_to_py(notebook, python_file) run_all_python_files(python_file, recursive=False, verbose=verbose) elif path.is_dir() and recursive: if verbose: print(f"##### Opening directory: {path}") for subpath in path.iterdir(): run_all_python_files(subpath, recursive=recursive, verbose=verbose)