Coverage for src/pdfbaker/__main__.py: 91%
32 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-20 14:42 +1200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-20 14:42 +1200
1"""Main entry point for pdfbaker (CLI)."""
3import logging
4import sys
5from pathlib import Path
7import click
9from pdfbaker import __version__
10from pdfbaker.baker import PDFBaker, PDFBakerOptions
11from pdfbaker.errors import PDFBakerError
13logger = logging.getLogger(__name__)
16@click.group()
17@click.version_option(version=__version__, prog_name="pdfbaker")
18def cli() -> None:
19 """Generate PDF documents from YAML-configured SVG templates."""
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
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)
66if __name__ == "__main__":
67 cli()