#!/usr/bin/env python3 import sys import subprocess import os import logging # Set up logging to write to /tmp directory log_path = '/tmp/convertions.log' logging.basicConfig( filename=log_path, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s' ) def display_help(): help_text = """ Usage: convertions [args...] Available commands: csvtoexcel csvtojson exceltocsv # corrected command htmltomd jsontocsv mdtohtml yamltomd pngtojpg jpgtopng pdftojpg imagetomd jpgstopdf ... pdftomd csvmerge ... mdtabletocsv yamlttojson jsontoyaml audiototext texttospeech videotoaudio pdftoexcel docxtomd mergepdfs ... """ print(help_text) def expand_path(path): """ Expand ~ to the user's home directory """ return os.path.expanduser(path) def validate_paths(command, args): if command in ["jpgstopdf", "csvmerge", "mergepdfs"]: output_path = expand_path(args[0]) input_paths = [expand_path(path) for path in args[1:]] if len(input_paths) < 2: print(f"Error: Command '{command}' requires at least two input files.") sys.exit(1) if not all(os.path.isfile(path) for path in input_paths): print("Error: One or more input paths do not exist.") sys.exit(1) else: if len(args) < 2: print(f"Error: Command '{command}' requires an input and an output path.") sys.exit(1) input_path, output_path = expand_path(args[0]), expand_path(args[1]) if not os.path.isfile(input_path): print(f"Error: Input file '{input_path}' does not exist.") sys.exit(1) return output_path def main(): if len(sys.argv) < 2: display_help() sys.exit(1) command = sys.argv[1] args = sys.argv[2:] if command == "help": display_help() sys.exit(0) script_map = { "csvtoexcel": "csvtoexcel.py", "csvtojson": "csvtojson.py", "docxtomd": "docxtomd.py", "exceltocsv": "exceltocsv.py", # corrected from "excelto_csv" "htmltomd": "htmltomd.py", "jsontocsv": "jsontocsv.py", "mdtohtml": "mdtohtml.py", "mdtodocx": "mdtodocx.py", "yamltomd": "yamltomd.py", "pngtojpg": "pngtojpg.py", "jpgtopng": "jpgtopng.py", "pdftojpg": "pdftojpg.py", "imagetomd": "imagetomd.py", "jpgstopdf": "jpgstopdf.py", "pdftomd": "pdftomd.py", "csvmerge": "csvmerge.py", "mdtabletocsv": "mdtabletocsv.py", "yamlttojson": "yamlttojson.py", "jsontoyaml": "jsontoyaml.py", "audiototext": "audiototext.py", "texttospeech": "texttospeech.py", "videotoaudio": "videotoaudio.py", "pdftoexcel": "pdftoexcel.py", "mergepdfs": "mergepdfs.py" } if command not in script_map: print(f"Unknown command: {command}") display_help() sys.exit(1) if len(args) < 2 and command not in ["jpgstopdf", "csvmerge"]: print(f"Error: Insufficient arguments for command '{command}'.") display_help() sys.exit(1) output_path = validate_paths(command, args) script_path = os.path.join(os.path.dirname(__file__), script_map[command]) try: result = subprocess.run([sys.executable, script_path] + args, check=True) logging.info(f"Successfully executed {command} on {args}.") print(f"Conversion completed successfully. Output saved to '{output_path}'.") except subprocess.CalledProcessError as e: logging.error(f"Error executing {command} on {args}: {e}") print(f"Error: Conversion failed. Check the log file at /tmp/convertions.log for details.") if __name__ == "__main__": main()