audit-labs/audit-tools

A collection of scripts, queries, and other goodies you can use in an audit.

clone: git clone https://gitbay.org/audit-labs/audit-tools.git

main: sampling/sampling_tool/manifest.py · raw

 1"""Manifest generation."""
 2
 3from __future__ import annotations
 4
 5import json
 6from pathlib import Path
 7
 8from . import __version__
 9
10
11def build_manifest(
12    *,
13    run_timestamp_utc: str,
14    input_file: Path,
15    input_sha256: str,
16    input_sheet: str | None,
17    options,
18    effective_id_column: str | None,
19    id_column_omitted: bool,
20    sample_size_actual: int,
21    random_seed: int | None,
22    source_row_count: int,
23    validated_population_count: int,
24    excluded_row_count: int,
25    duplicate_id_count: int,
26    blank_id_count: int,
27    output_files: list[str],
28) -> dict[str, object]:
29    return {
30        "tool": "audit_sample",
31        "version": __version__,
32        "run_timestamp_utc": run_timestamp_utc,
33        "input_file": str(input_file),
34        "input_sha256": input_sha256,
35        "input_sheet": input_sheet,
36        "method": options.method,
37        "id_column": options.id_column,
38        "effective_id_column": effective_id_column,
39        "id_column_omitted": id_column_omitted,
40        "stratify_column": options.stratify_column,
41        "sample_size_requested": options.sample_size,
42        "sample_size_actual": sample_size_actual,
43        "random_seed": random_seed,
44        "filters": options.filters,
45        "dedupe_id": options.dedupe_id,
46        "exclude_blank_id": options.exclude_blank_id,
47        "allow_shortfall": options.allow_shortfall,
48        "source_row_count": source_row_count,
49        "validated_population_count": validated_population_count,
50        "excluded_row_count": excluded_row_count,
51        "duplicate_id_count": duplicate_id_count,
52        "blank_id_count": blank_id_count,
53        "output_files": output_files,
54    }
55
56
57def write_manifest(manifest: dict[str, object], path: Path) -> None:
58    path.write_text(json.dumps(manifest, indent=2, sort_keys=True) + "\n")