73 lines
2.2 KiB
Python
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())
|