← Files JinkōARCHIVED FILE
skills/jinko-data-table/scripts/inspect_data_table.py
3.52 KB · Oct 2, 2026 · 00:29 UTC
#!/usr/bin/env python3
"""Inspect and validate a Jinkō data table."""
from __future__ import annotations
import argparse
import json
import sys
from typing import Any
try:
from dotenv import load_dotenv
except ImportError: # pragma: no cover - depends on local environment
load_dotenv = None
def load_env() -> None:
if load_dotenv is not None:
load_dotenv()
def load_sdk():
try:
from jinko import JinkoClient
from jinko.exceptions import JinkoError
except ImportError:
print(
"Cannot import jinko. Install the SDK: pip install jinko-sdk",
file=sys.stderr,
)
return None
return JinkoClient, JinkoError
def to_jsonable(value: Any) -> Any:
if hasattr(value, "model_dump"):
return value.model_dump(mode="json", exclude_none=True)
return value
def valid_for_fitness_from_content(content: Any) -> bool | None:
if isinstance(content, dict):
public = (content.get("metadata") or {}).get("public") or {}
return public.get("validForFitnessFunction")
metadata = getattr(content, "metadata", None)
public = getattr(metadata, "public", None)
return getattr(public, "validForFitnessFunction", None)
def main() -> int:
parser = argparse.ArgumentParser(description="Inspect a Jinkō data table.")
parser.add_argument(
"--data-table-sid", required=True, help="DataTable SID, for example dt-..."
)
parser.add_argument(
"--content", action="store_true", help="Print structured content."
)
parser.add_argument("--summary", action="store_true", help="Print backend summary.")
parser.add_argument(
"--validate", action="store_true", help="Run backend validation."
)
parser.add_argument(
"--fitness", action="store_true", help="Print validForFitnessFunction metadata."
)
parser.add_argument(
"--require-fitness",
action="store_true",
help="Fail unless validForFitnessFunction is explicitly true.",
)
args = parser.parse_args()
load_env()
sdk = load_sdk()
if sdk is None:
return 1
JinkoClient, JinkoError = sdk
try:
client = JinkoClient()
table = client.get_data_table(args.data_table_sid)
content = None
if not (
args.content
or args.summary
or args.validate
or args.fitness
or args.require_fitness
):
print(f"DataTable {table.sid}")
if getattr(table, "url", None):
print(table.url)
return 0
if args.content or args.fitness or args.require_fitness:
content = table.content()
if args.content:
print(json.dumps(to_jsonable(content), indent=2, sort_keys=True))
if args.summary:
print(json.dumps(to_jsonable(table.summary()), indent=2, sort_keys=True))
if args.validate:
print(json.dumps(to_jsonable(table.validate()), indent=2, sort_keys=True))
if args.fitness or args.require_fitness:
valid = valid_for_fitness_from_content(content)
if valid is None:
print("validForFitnessFunction: <not reported>")
else:
print(f"validForFitnessFunction: {valid}")
if args.require_fitness and valid is not True:
return 3
return 0
except JinkoError as exc:
print(f"Jinkō SDK request failed: {exc}", file=sys.stderr)
return 2
if __name__ == "__main__":
raise SystemExit(main())
SHA-256: 37f68a1dd462d2ab69fd0d1b9824ff1272ec241c1b775fee14a79b58bede548b