#!/usr/bin/env python3 """Compare one base Config SQL payload with XML files. This is the base-configuration counterpart to extension manifest part analysis. It uses the same mechanical payload parser and XML matching logic. """ from __future__ import annotations import argparse import json from pathlib import Path from analyze_1c_manifest_object_parts import load_xml_files, parse_cas_payload, public_payload_report def main() -> int: parser = argparse.ArgumentParser(description="Compare one Config object payload with XML files.") parser.add_argument("--config-file", type=Path, required=True) parser.add_argument("--object-guid", required=True) parser.add_argument("--xml-path", type=Path, action="append", default=[]) parser.add_argument("--output", type=Path, required=True) args = parser.parse_args() xml_files = load_xml_files(args.xml_path) payload = parse_cas_payload(args.config_file) report = { "schema": "onec_config_object_xml_compare.v1", "object_guid": args.object_guid.lower(), "config_file": str(args.config_file), "xml_paths": [str(path) for path in args.xml_path], "xml_file_count": len(xml_files), "payload": public_payload_report(payload, xml_files), } args.output.parent.mkdir(parents=True, exist_ok=True) args.output.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8") print(json.dumps({"output": str(args.output), "xml_files": len(xml_files)}, ensure_ascii=False)) return 0 if __name__ == "__main__": raise SystemExit(main())