- synthgen/config.py: Config, load_config (YAML + --set), dump_config, проверки диапазонов §3 - synthgen/rng.py: rng_for (SHA-256 → Random), stable_hash - synthgen/__main__.py: разбор --config/--set/--out/--force, ошибка конфигурации → код 2 - synthgen/examples/default.yaml: все ключи §3 со значениями по умолчанию - копии из synthetic-group/gen (#35): inn, xlsx, ledger, chart (+80.09, 91.09 из seed arm-core) - тесты: config, inn, ledger; conftest с маркерами parser/slow - .gitignore: out/ - спека: решения 15–16 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
"""Точка входа: `python -m synthgen --config synthgen/examples/default.yaml --set group_size=12 --out DIR`.
|
||
|
||
Пока печатает итоговые настройки (спека §3); генерация набора добавится в следующих задачах.
|
||
"""
|
||
|
||
import argparse
|
||
import sys
|
||
from dataclasses import replace
|
||
from pathlib import Path
|
||
|
||
from synthgen.config import ConfigError, dump_config, load_config
|
||
|
||
|
||
def _parser() -> argparse.ArgumentParser:
|
||
parser = argparse.ArgumentParser(prog="synthgen", description="Генератор синтетического набора АРМ КА.")
|
||
parser.add_argument("--config", type=Path, default=None, help="YAML с настройками")
|
||
parser.add_argument(
|
||
"--set", dest="overrides", action="append", default=[], metavar="КЛЮЧ=ЗНАЧЕНИЕ",
|
||
help="переопределение настройки (можно повторять)",
|
||
)
|
||
parser.add_argument("--out", type=Path, default=None, help="каталог результата")
|
||
parser.add_argument("--force", action="store_true", help="перезаписать существующий каталог результата")
|
||
return parser
|
||
|
||
|
||
def main(argv: list[str] | None = None) -> int:
|
||
args = _parser().parse_args(argv)
|
||
try:
|
||
cfg = load_config(args.config, args.overrides)
|
||
except ConfigError as exc:
|
||
print(f"ошибка конфигурации: {exc}", file=sys.stderr)
|
||
return 2
|
||
if args.out is not None:
|
||
cfg = replace(cfg, out=args.out)
|
||
sys.stdout.write(dump_config(cfg))
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
raise SystemExit(main())
|