Docs Generator¶
The docs generator transforms a ContractMetadata object into human-readable documentation. The default output format is Markdown, making it easy to pipe generated docs into static site generators, pull requests, or wikis.
Classes¶
DocsGenerator
¶
Generate documentation from data contracts.
Transforms ContractMetadata objects into human-readable documentation in various formats (Markdown, HTML, etc.).
Example
from pycharter import parse_contract_file from pycharter.docs_generator import DocsGenerator
contract = parse_contract_file("contract.yaml") generator = DocsGenerator() docs = generator.generate(contract) print(docs)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
renderer
|
DocsRenderer | None
|
Renderer to use for output format. Defaults to MarkdownRenderer. |
None
|
Source code in src/pycharter/docs_generator/generator.py
generate
¶
generate(
contract: ContractMetadata,
include_schema: bool = True,
include_coercions: bool = True,
include_validations: bool = True,
include_metadata: bool = True,
) -> str
Generate full documentation for a contract.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
contract
|
ContractMetadata
|
ContractMetadata object to document |
required |
include_schema
|
bool
|
Include schema field documentation |
True
|
include_coercions
|
bool
|
Include coercion rules documentation |
True
|
include_validations
|
bool
|
Include validation rules documentation |
True
|
include_metadata
|
bool
|
Include metadata/ownership documentation |
True
|
Returns:
| Type | Description |
|---|---|
str
|
Generated documentation as string |
Source code in src/pycharter/docs_generator/generator.py
generate_schema_section
¶
Generate documentation for schema fields.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
schema
|
dict[str, Any]
|
JSON Schema dictionary |
required |
Returns:
| Type | Description |
|---|---|
str
|
Formatted schema documentation |
Source code in src/pycharter/docs_generator/generator.py
generate_coercion_section
¶
Generate documentation for coercion rules.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
rules
|
dict[str, Any]
|
Coercion rules dictionary |
required |
Returns:
| Type | Description |
|---|---|
str
|
Formatted coercion documentation |
Source code in src/pycharter/docs_generator/generator.py
generate_validation_section
¶
Generate documentation for validation rules.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
rules
|
dict[str, Any]
|
Validation rules dictionary |
required |
Returns:
| Type | Description |
|---|---|
str
|
Formatted validation documentation |
Source code in src/pycharter/docs_generator/generator.py
generate_metadata_section
¶
Generate documentation for contract metadata.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
contract
|
ContractMetadata
|
ContractMetadata object |
required |
Returns:
| Type | Description |
|---|---|
str
|
Formatted metadata documentation |
Source code in src/pycharter/docs_generator/generator.py
MarkdownRenderer
¶
Render documentation as Markdown.
render_header
¶
Render document header with title and optional version.
Source code in src/pycharter/docs_generator/renderers.py
render_section
¶
render_subsection
¶
render_table
¶
render_table(
headers: list[str],
rows: list[list[str | None]],
caption: str | None = None,
) -> str
Render a Markdown table.
Source code in src/pycharter/docs_generator/renderers.py
render_code_block
¶
render_list
¶
Render a list of items.
Source code in src/pycharter/docs_generator/renderers.py
render_description
¶
render_badge
¶
render_key_value
¶
Render a key-value pair.
Quick start¶
from pycharter import parse_contract_file
from pycharter.docs_generator import DocsGenerator
# Parse a contract
contract = parse_contract_file("contracts/orders.yaml")
# Generate Markdown documentation
generator = DocsGenerator()
docs = generator.generate(contract)
print(docs)
Selective output¶
Control which sections are included:
docs = generator.generate(
contract,
include_schema=True,
include_coercions=True,
include_validations=True,
include_metadata=True,
)
Saving to a file¶
from pathlib import Path
docs = generator.generate(contract)
Path("docs/contracts/orders.md").write_text(docs)
Generating docs for all contracts¶
from pathlib import Path
from pycharter import parse_contract_file
from pycharter.docs_generator import DocsGenerator
generator = DocsGenerator()
output_dir = Path("docs/contracts")
output_dir.mkdir(parents=True, exist_ok=True)
for contract_file in Path("contracts").glob("*.yaml"):
contract = parse_contract_file(str(contract_file))
docs = generator.generate(contract)
out = output_dir / f"{contract_file.stem}.md"
out.write_text(docs)
print(f"Generated {out}")
Custom renderer¶
Implement DocsRenderer to produce HTML, RST, or any other format:
from pycharter.docs_generator.renderers import DocsRenderer
from pycharter.docs_generator import DocsGenerator
class HtmlRenderer(DocsRenderer):
def render_header(self, title: str, version: str | None) -> str:
ver = f" <small>v{version}</small>" if version else ""
return f"<h1>{title}{ver}</h1>"
def render_description(self, description: str) -> str:
return f"<p>{description}</p>"
# ... implement remaining methods
generator = DocsGenerator(renderer=HtmlRenderer())
html = generator.generate(contract)
REST API¶
Generate documentation for a stored contract via the REST API:
The response is a Markdown string.
Import¶
from pycharter.docs_generator import DocsGenerator
from pycharter.docs_generator.renderers import MarkdownRenderer, DocsRenderer