Initial import NDC_1C
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from config.client import ODataClient, flatten_guid_like_fields, utc_now_iso
|
||||
from config.settings import LOGS_DIR, load_settings
|
||||
|
||||
|
||||
def _load_probe_targets() -> list[str]:
|
||||
report_file = LOGS_DIR / "probe_report.json"
|
||||
if not report_file.exists():
|
||||
return []
|
||||
|
||||
payload = json.loads(report_file.read_text(encoding="utf-8"))
|
||||
targets: list[str] = []
|
||||
for entity in payload.get("entities", []):
|
||||
if entity.get("status") == "ok" and entity.get("entity_set"):
|
||||
targets.append(str(entity["entity_set"]))
|
||||
return targets[:10]
|
||||
|
||||
|
||||
def _extract_link_map(records: list[dict[str, Any]]) -> dict[str, list[str]]:
|
||||
field_map: dict[str, set[str]] = {}
|
||||
for row in records:
|
||||
for field in flatten_guid_like_fields(row):
|
||||
value = row.get(field)
|
||||
if value is None:
|
||||
continue
|
||||
field_map.setdefault(field, set()).add(str(value))
|
||||
|
||||
normalized: dict[str, list[str]] = {}
|
||||
for field, values in field_map.items():
|
||||
normalized[field] = sorted(values)[:5]
|
||||
return normalized
|
||||
|
||||
|
||||
def main() -> int:
|
||||
settings = load_settings()
|
||||
client = ODataClient(settings)
|
||||
targets = _load_probe_targets()
|
||||
|
||||
if not targets:
|
||||
print(
|
||||
"[error] probe_report.json not found or empty. "
|
||||
"Run `python -m odata_probe.probe_entities` first."
|
||||
)
|
||||
return 1
|
||||
|
||||
links_payload: dict[str, Any] = {
|
||||
"generated_at": utc_now_iso(),
|
||||
"service_root": settings.service_root,
|
||||
"entities": [],
|
||||
}
|
||||
|
||||
for entity_set in targets:
|
||||
try:
|
||||
records = client.read_entity_set_records(entity_set, top=min(settings.probe_top, 5))
|
||||
links_payload["entities"].append(
|
||||
{
|
||||
"entity_set": entity_set,
|
||||
"records_fetched": len(records),
|
||||
"link_field_samples": _extract_link_map(records),
|
||||
}
|
||||
)
|
||||
print(f"[ok] {entity_set}: link map generated")
|
||||
except Exception as exc:
|
||||
links_payload["entities"].append(
|
||||
{
|
||||
"entity_set": entity_set,
|
||||
"error": str(exc),
|
||||
}
|
||||
)
|
||||
print(f"[warn] {entity_set}: {exc}")
|
||||
|
||||
output_file = LOGS_DIR / "sample_links.json"
|
||||
output_file.write_text(
|
||||
json.dumps(links_payload, ensure_ascii=False, indent=2),
|
||||
encoding="utf-8",
|
||||
)
|
||||
print(f"[ok] saved link map: {output_file}")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
|
||||
Reference in New Issue
Block a user