Coverage for src/pdfbaker/__main__.py: 91%

32 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-20 04:55 +1200

1"""Main entry point for pdfbaker (CLI).""" 

2 

3import logging 

4import sys 

5from pathlib import Path 

6 

7import click 

8 

9from pdfbaker import __version__ 

10from pdfbaker.baker import PDFBaker, PDFBakerOptions 

11from pdfbaker.errors import PDFBakerError 

12 

13logger = logging.getLogger(__name__) 

14 

15 

16@click.group() 

17@click.version_option(version=__version__, prog_name="pdfbaker") 

18def cli() -> None: 

19 """Generate PDF documents from YAML-configured SVG templates.""" 

20 

21 

22@cli.command() 

23@click.argument( 

24 "config_file", 

25 type=click.Path(exists=True, dir_okay=False, path_type=Path), 

26) 

27@click.option("-q", "--quiet", is_flag=True, help="Show errors only") 

28@click.option("-v", "--verbose", is_flag=True, help="Show debug information") 

29@click.option( 

30 "-t", 

31 "--trace", 

32 is_flag=True, 

33 help="Show trace information (even more detailed than --verbose)", 

34) 

35@click.option("--keep-build", is_flag=True, help="Keep build artifacts") 

36@click.option("--debug", is_flag=True, help="Debug mode (--verbose and --keep-build)") 

37# pylint: disable=too-many-arguments,too-many-positional-arguments 

38def bake( 

39 config_file: Path, 

40 quiet: bool, 

41 verbose: bool, 

42 trace: bool, 

43 keep_build: bool, 

44 debug: bool, 

45) -> int: 

46 """Parse config file and bake PDFs.""" 

47 if debug: 

48 verbose = True 

49 keep_build = True 

50 

51 try: 

52 options = PDFBakerOptions( 

53 quiet=quiet, 

54 verbose=verbose, 

55 trace=trace, 

56 keep_build=keep_build, 

57 ) 

58 baker = PDFBaker(config_file, options=options) 

59 success = baker.bake() 

60 sys.exit(0 if success else 1) 

61 except PDFBakerError as exc: 

62 logger.error(str(exc)) 

63 sys.exit(1) 

64 

65 

66if __name__ == "__main__": 

67 cli()