| """Simple CLI to hit the duplicate-detector API.""" | |
| from __future__ import annotations | |
| import argparse | |
| import json | |
| import os | |
| import sys | |
| from typing import Any, Dict | |
| import requests | |
| DEFAULT_BASE_URL = os.getenv("API_BASE_URL", "http://127.0.0.1:8000") | |
| def _print_response(label: str, response: requests.Response) -> None: | |
| print(f"\n== {label} ==") | |
| print(f"Status: {response.status_code}") | |
| if response.headers.get("content-type", "").startswith("application/json"): | |
| try: | |
| payload = response.json() | |
| print(json.dumps(payload, indent=2, default=str)) | |
| except ValueError: | |
| print(response.text) | |
| else: | |
| print(response.text) | |
| def main(argv: list[str] | None = None) -> int: | |
| parser = argparse.ArgumentParser(description="Exercise the duplicate-detector API.") | |
| parser.add_argument( | |
| "--base-url", | |
| default=DEFAULT_BASE_URL, | |
| help=f"API base URL (default: {DEFAULT_BASE_URL}).", | |
| ) | |
| args = parser.parse_args(argv) | |
| base_url = args.base_url.rstrip("/") | |
| try: | |
| health = requests.get(f"{base_url}/health", timeout=10) | |
| _print_response("Health", health) | |
| suggestions = requests.get(f"{base_url}/suggestions", timeout=60) | |
| _print_response("Suggestions", suggestions) | |
| return 0 | |
| except requests.RequestException as exc: | |
| print(f"Request failed: {exc}", file=sys.stderr) | |
| return 1 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |