fleet-memory/hindsight-dev/hindsight_dev/generate_openapi.py
Nicolò Boschi 4f21886a0e
doc: changelog for 0.2.0 (and regenerate clients) (#99)
* doc: changelog for 0.2.0 (and regenerate clients)

* doc: changelog for 0.2.0 (and regenerate clients)

* doc: changelog for 0.2.0 (and regenerate clients)

* doc: changelog for 0.2.0 (and regenerate clients)

* doc: changelog for 0.2.0 (and regenerate clients)

* doc: changelog for 0.2.0 (and regenerate clients)

* doc: changelog for 0.2.0 (and regenerate clients)

* doc: changelog for 0.2.0 (and regenerate clients)
2026-01-05 12:36:29 +01:00

60 lines
2 KiB
Python

#!/usr/bin/env python3
"""
Generate OpenAPI specification from FastAPI app.
This script imports the FastAPI app and exports its OpenAPI schema to a JSON file.
"""
import json
import os
import sys
from pathlib import Path
from hindsight_api import MemoryEngine
from hindsight_api.api import create_app
def generate_openapi_spec(output_path: str = None):
"""Generate OpenAPI spec and save to file."""
# Default to hindsight-docs/static/openapi.json (single source of truth)
if output_path is None:
# Get the root of the project (3 levels up from this file)
root_dir = Path(__file__).parent.parent.parent
output_path = str(root_dir / "hindsight-docs" / "static" / "openapi.json")
# Create a temporary memory instance for OpenAPI generation
_memory = MemoryEngine(
db_url="mock",
memory_llm_provider="ollama",
memory_llm_api_key="mock",
memory_llm_model="mock",
)
app = create_app(_memory)
# Get the OpenAPI schema from the app
openapi_schema = app.openapi()
# Write to file
output_file = Path(output_path)
with open(output_file, "w") as f:
json.dump(openapi_schema, f, indent=2)
print(f"✓ OpenAPI specification generated: {output_file.absolute()}")
print(f" - Title: {openapi_schema['info']['title']}")
print(f" - Version: {openapi_schema['info']['version']}")
print(f" - Endpoints: {len(openapi_schema['paths'])}")
# List endpoints
print("\n Endpoints:")
for path, methods in openapi_schema["paths"].items():
for method in methods.keys():
if method.upper() in ["GET", "POST", "PUT", "DELETE", "PATCH"]:
endpoint_info = methods[method]
summary = endpoint_info.get("summary", "No summary")
tags = ", ".join(endpoint_info.get("tags", ["untagged"]))
print(f" {method.upper():6} {path:30} [{tags}] - {summary}")
if __name__ == "__main__":
output = sys.argv[1] if len(sys.argv) > 1 else "openapi.json"
generate_openapi_spec(output)