(args: argparse.Namespace)
| 1016 | |
| 1017 | |
| 1018 | def cmd_batch(args: argparse.Namespace) -> int: |
| 1019 | output_dir = Path(args.output_dir).expanduser().resolve() if args.output_dir else None |
| 1020 | if output_dir: |
| 1021 | output_dir.mkdir(parents=True, exist_ok=True) |
| 1022 | if args.manifest: |
| 1023 | jobs = _manifest_jobs(Path(args.manifest).expanduser().resolve(), output_dir, args.format) |
| 1024 | else: |
| 1025 | if not args.input_dir or output_dir is None: |
| 1026 | raise ModlyCliError("batch requires --input-dir and --output-dir, or --manifest with per-entry outputs") |
| 1027 | input_dir = Path(args.input_dir).expanduser().resolve() |
| 1028 | jobs = [(image, output_dir / f"{image.stem}.{args.format}", args.format) for image in _iter_images(input_dir)] |
| 1029 | |
| 1030 | results: list[dict[str, Any]] = [] |
| 1031 | failures = 0 |
| 1032 | original_format = args.format |
| 1033 | try: |
| 1034 | for image, output, fmt in jobs: |
| 1035 | args.format = fmt |
| 1036 | try: |
| 1037 | results.append(_generate_one(args, image, output)) |
| 1038 | except ModlyCliError as exc: |
| 1039 | failures += 1 |
| 1040 | results.append({"ok": False, "image": str(image), "error": str(exc)}) |
| 1041 | if not args.continue_on_error: |
| 1042 | break |
| 1043 | finally: |
| 1044 | args.format = original_format |
| 1045 | _json_print({"ok": failures == 0, "count": len(results), "failures": failures, "results": results}, compact=args.compact) |
| 1046 | return 0 if failures == 0 else 1 |
| 1047 | |
| 1048 | |
| 1049 | def cmd_serve(args: argparse.Namespace) -> int: |
nothing calls this directly
no test coverage detected