Files
Alberto Schiabel e7bb45f449 fix(py): normalize generated SDK doc examples (#3689)
This PR:
- normalizes Python SDK reference examples generated from source
docstrings
- rewrites the `Triggers.parse()` docstring so the generated
Flask/FastAPI examples are copy-pasteable
- strips nested Markdown fences before wrapping generated examples in
MDX code fences
- regenerates `docs/content/reference/sdk-reference/python/`
- adds regression coverage for the `Triggers.parse()` generated example
and fenced example normalization
- does not include a changeset because this only changes docs
generation, generated docs, and tests

## Verification

- `cd python && .venv/bin/python -m pytest tests/test_generate_docs.py
-q`
- `cd python && .venv/bin/ruff check --config config/ruff.toml
composio/core/models/triggers.py scripts/generate-docs.py
tests/test_generate_docs.py`
- `cd python && .venv/bin/ruff format --check --config config/ruff.toml
composio/core/models/triggers.py scripts/generate-docs.py
tests/test_generate_docs.py`
- `cd python && .venv/bin/python scripts/generate-docs.py`
- `cd docs && bun install --frozen-lockfile`
- `cd docs && bun run types:check`
2026-06-26 15:12:15 +04:00

59 lines
1.6 KiB
Python

"""Regression tests for SDK reference generation."""
from __future__ import annotations
import ast
import importlib.util
from pathlib import Path
import pytest
from composio.core.models.triggers import Triggers
def load_generate_docs_module():
script_path = Path(__file__).resolve().parents[1] / "scripts" / "generate-docs.py"
spec = importlib.util.spec_from_file_location("_generate_docs", script_path)
assert spec is not None
assert spec.loader is not None
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def test_triggers_parse_generated_example_is_valid_python():
generate_docs = load_generate_docs_module()
parsed = generate_docs.parse_docstring(Triggers.parse.__doc__)
assert parsed["examples"], "Triggers.parse() must keep its public example"
try:
ast.parse(parsed["examples"][0])
except SyntaxError as exc:
pytest.fail(
"Triggers.parse() generated SDK reference example must be "
f"copy-pasteable Python: {exc}"
)
def test_generated_examples_do_not_keep_nested_markdown_fences():
generate_docs = load_generate_docs_module()
parsed = generate_docs.parse_docstring(
"""
Fetch SDK data.
Example:
```python
result = composio.tools.get_raw_tool_router_meta_tools("session_123")
print(result)
```
"""
)
assert parsed["examples"] == [
'result = composio.tools.get_raw_tool_router_meta_tools("session_123")\n'
"print(result)"
]