1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| import logging import argparse import os
__version__ = "0.1.0"
class Colors: RED = "\033[31m" GREEN = "\033[32m" YELLOW = "\033[33m" BLUE = "\033[34m" MAGENTA = "\033[35m" CYAN = "\033[36m" RED_BG = "\033[41m" GRAY = "\033[90m" RESET = "\033[0m"
class ColoredFormatter(logging.Formatter): COLORS = { logging.DEBUG: Colors.RESET, logging.INFO: Colors.CYAN, logging.WARNING: Colors.YELLOW, logging.ERROR: Colors.RED, } RESET = Colors.RESET
def format(self, record): color = self.COLORS.get(record.levelno, self.RESET) return f"{color}{super().format(record)}{self.RESET}"
def setup_logging(*, use_color, level): logging.getLogger().setLevel(level)
handler = logging.StreamHandler() if use_color: handler.setFormatter(ColoredFormatter("%(message)s")) else: handler.setFormatter(logging.Formatter("%(message)s"))
logging.getLogger().addHandler(handler)
def parse_args(): parser = argparse.ArgumentParser(description="xxx.") parser.add_argument( "path", nargs="?", default=os.getcwd(), type=str, ) parser.add_argument( "--output-json", type=str, metavar="FILE", help="Write detailed compilation results to a JSON file.", )
log_group = parser.add_mutually_exclusive_group() log_group.add_argument( "--log-debug", action="store_true", help="Enable debug-level logging output (default: info).", ) log_group.add_argument( "--log-error", action="store_true", help="Enable error-level logging output (default: info).", )
parser.add_argument( "--dry-run", action="store_true", ) parser.add_argument( "--jobs", type=int, default=None, help="Number of parallel jobs. (default: min(4, CPU count))", ) parser.add_argument( "--timeout", type=int, default=180, help="Compilation timeout in seconds for parallel mode. (default: 180s)", ) parser.add_argument( "--no-color", action="store_true", help="Disable colored output" ) parser.add_argument("--version", action="version", version=__version__)
return parser.parse_args()
def main(): args = parse_args()
if args.log_debug: log_level = logging.DEBUG elif args.log_error: log_level = logging.ERROR else: log_level = logging.INFO
setup_logging(use_color=not args.no_color, level=log_level)
if __name__ == "__main__": main()
|