46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
"""Offline replay of v3 primary-name captures; v2 remains a separate contract."""
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
import re
|
|
|
|
from . import audit_arr_day as day_audit, collect_arr_named_day as named, collect_arr_source as source
|
|
|
|
|
|
class VerifiedArchive(day_audit.VerifiedArchive):
|
|
version = named.VERSION
|
|
file_pattern = re.compile(r"(?:capture\.json|rate-assessments\.json|(?:request|rate|profile)-[0-9]{6}\.(?:json|meta\.json|response\.bin))")
|
|
operations = named.OPERATIONS
|
|
options_type = named.Options
|
|
max_inventory_files = 272000
|
|
|
|
|
|
def replay(archive):
|
|
source.require(archive.version == named.VERSION, "unsupported_named_day_archive_version")
|
|
return day_audit._replay(archive, named=True)
|
|
|
|
|
|
def main(argv=None):
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--capture-dir", type=Path, required=True)
|
|
parser.add_argument("--manifest-sha256", required=True)
|
|
args = parser.parse_args(argv)
|
|
try:
|
|
archive = VerifiedArchive(args.capture_dir, args.manifest_sha256)
|
|
rows, _, _ = replay(archive)
|
|
result = {"integrity_verified": True, "protocol_replayed": True, "source_records": len(rows),
|
|
"unique_profiles": archive.result["unique_profiles"],
|
|
"valid_name_candidates": archive.result["valid_name_candidates"],
|
|
"profile_issues": archive.result["profile_issues"], "network_calls": 0,
|
|
"finance_ready": False, "report_equivalence_verified": False}
|
|
except source.CollectionError as error:
|
|
result = {"integrity_verified": False, "error": str(error), "finance_ready": False}
|
|
except Exception:
|
|
result = {"integrity_verified": False, "error": "named_archive_invalid", "finance_ready": False}
|
|
print(json.dumps(result, ensure_ascii=False))
|
|
return 0 if result["integrity_verified"] else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|