Files

73 lines
2.2 KiB
Python

"""Command-line entry point for the roster formatter."""
from __future__ import annotations
import argparse
from pathlib import Path
from roster_formatter import (
BASE_DIR,
LayoutSettings,
RosterFormatError,
RosterPeriod,
format_roster,
)
def build_parser() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(description="Generate a formatted roster PNG")
parser.add_argument(
"--input",
type=Path,
default=BASE_DIR / "input" / "original.pdf",
help="one-page landscape Letter roster PDF",
)
parser.add_argument(
"--output-dir",
type=Path,
default=BASE_DIR / "output",
help="directory for the formatted PNG",
)
parser.add_argument(
"--month",
help="override the month/year label (for example, 'September 2026' or '2026-09')",
)
advanced = parser.add_argument_group("advanced layout adjustments")
advanced.add_argument("--content-shift", type=float, default=100)
advanced.add_argument("--bottom-margin", type=float, default=60)
advanced.add_argument("--logo-x", type=float, default=50)
advanced.add_argument("--logo-y", type=float, default=-10)
advanced.add_argument("--logo-scale", type=float, default=0.27)
advanced.add_argument("--date-x", type=float, default=460)
advanced.add_argument("--date-y", type=float, default=88)
advanced.add_argument("--date-font-size", type=int, default=48)
return parser
def main() -> int:
args = build_parser().parse_args()
try:
period = RosterPeriod.parse(args.month)
settings = LayoutSettings(
content_shift=args.content_shift,
bottom_margin=args.bottom_margin,
logo_x=args.logo_x,
logo_y=args.logo_y,
logo_scale=args.logo_scale,
date_x=args.date_x,
date_y=args.date_y,
date_font_size=args.date_font_size,
)
output_path = args.output_dir / period.output_filename
result = format_roster(args.input, output_path, period, settings)
except RosterFormatError as exc:
raise SystemExit(f"error: {exc}") from exc
print(f"Created {result.path}")
return 0
if __name__ == "__main__":
raise SystemExit(main())