Source code for nb4llm.cli

#!/usr/bin/env python3
"""
CLI interface for nb4llm - Convert Jupyter notebooks to/from text format for LLM processing.
"""

import argparse
import sys
from pathlib import Path

from .converter import convert_ipynb_to_txt, convert_txt_to_ipynb


[docs] def main() -> None: parser = argparse.ArgumentParser( description="Convert Jupyter notebooks to/from text format for LLM processing", formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: nb4llm notebook.ipynb # Convert to notebook.txt nb4llm notebook.ipynb output.txt # Convert to specific output file nb4llm --reverse notebook.txt # Convert back to notebook.ipynb nb4llm --reverse notebook.txt output.ipynb # Convert to specific output file """, ) parser.add_argument("input_file", help="Input file (.ipynb or .txt)") parser.add_argument( "output_file", nargs="?", help="Output file (optional, auto-generated if not provided)", ) parser.add_argument( "--reverse", "-r", action="store_true", help="Convert from .txt back to .ipynb (default is .ipynb to .txt)", ) parser.add_argument("--verbose", "-v", action="store_true", help="Verbose output") args = parser.parse_args() input_path = Path(args.input_file) if not input_path.exists(): print(f"Error: Input file '{input_path}' does not exist.", file=sys.stderr) sys.exit(1) # Determine conversion direction and output file if args.reverse: # txt -> ipynb if input_path.suffix.lower() != ".txt": print( f"Warning: Input file '{input_path}' doesn't have .txt extension", file=sys.stderr, ) if args.output_file: output_path = Path(args.output_file) else: output_path = input_path.with_suffix(".ipynb") if args.verbose: print(f"Converting {input_path} -> {output_path}") try: convert_txt_to_ipynb(str(input_path), str(output_path)) print(f"Successfully converted to {output_path}") except Exception as e: print(f"Error converting file: {e}", file=sys.stderr) sys.exit(1) else: # ipynb -> txt if input_path.suffix.lower() != ".ipynb": print( f"Warning: Input file '{input_path}' doesn't have .ipynb extension", file=sys.stderr, ) if args.output_file: output_path = Path(args.output_file) else: output_path = input_path.with_suffix(".txt") if args.verbose: print(f"Converting {input_path} -> {output_path}") try: convert_ipynb_to_txt(str(input_path), str(output_path)) print(f"Successfully converted to {output_path}") except Exception as e: print(f"Error converting file: {e}", file=sys.stderr) sys.exit(1)
if __name__ == "__main__": main()