Coverage for codexa/main.py: 97%

35 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-08-10 07:53 +0000

1import logging 

2 

3import click 

4import colorama 

5 

6from codexa import __version__ 

7from codexa.commands.compare import compare_command 

8from codexa.commands.list import list_command 

9from codexa.commands.run import run_command 

10from codexa.core.handler import CliHandler 

11from codexa.core.output import ColorHandler 

12 

13colorama.init(autoreset=True) 

14 

15 

16def __get_log_level(verbosity: int) -> int: 

17 levels = {0: logging.WARN, 1: logging.INFO, 2: logging.DEBUG} 

18 return levels.get(verbosity, logging.DEBUG) 

19 

20 

21def __set_logger(level: int): 

22 logger = logging.getLogger(__package__) 

23 log_level = __get_log_level(level) 

24 logger.setLevel(log_level) 

25 handler = ColorHandler() 

26 handler.setLevel(log_level) 

27 

28 timestamp_format = "[%(asctime)s][%(levelname)s] %(message)s" 

29 if log_level == logging.DEBUG: 

30 timestamp_format = "[%(asctime)s][%(levelname)s] %(name)s: %(message)s" 

31 formatter = logging.Formatter( 

32 fmt=timestamp_format, 

33 datefmt="%Y-%m-%d %H:%M:%S", 

34 ) 

35 handler.setFormatter(formatter) 

36 logger.addHandler(handler) 

37 

38 

39@click.group(cls=CliHandler) 

40@click.pass_context 

41@click.version_option(version=__version__) 

42@click.option( 

43 "-v", 

44 "--verbose", 

45 count=True, 

46 help="Increase verbosity. Use multiple times for more detail (e.g., -vv for debug).", 

47) 

48def cli(context: click.Context, verbose: int): 

49 """Codexa: CLI tool for test automation assistance.""" 

50 __set_logger(verbose) 

51 context.ensure_object(dict) 

52 

53 

54cli.add_command(run_command) 

55cli.add_command(list_command) 

56cli.add_command(compare_command)