Python SDK
philiprehberger-docgen
Generated client + hand-tuned pollRender helper. View source on GitHub.
Install
shell
pip install philiprehberger-docgenQuickstart
Author a template, freeze a version, submit a render, poll until terminal.
python
import os
from philiprehberger_docgen import (
Configuration, ApiClient, TemplatesApi, RendersApi,
TemplateCreate, RenderCreate,
)
from philiprehberger_docgen_sdk import poll_render
config = Configuration(
host="https://api.docgen.philiprehberger.com",
access_token=os.environ["DOCGEN_API_KEY"], # docgen_live_…
)
client = ApiClient(config)
templates = TemplatesApi(client)
renders = RendersApi(client)
# 1. Create a template
template = templates.create_template(TemplateCreate(
name="Invoice",
body="<h1>Invoice {{ number }}</h1><p>Total: {{ total }}</p>",
))
# 2. Freeze v1
templates.create_template_version(template_id=template.id)
# 3. Submit a render
render = renders.create_render(RenderCreate(
template_id=template.id,
formats=["pdf"],
data={"number": "INV-001", "total": "$2,625.00"},
))
# 4. Poll until terminal
done = poll_render(renders, render.id, max_wait_ms=30_000)
for output in done.outputs:
if output.format == "pdf":
print(f"Download: {output.url}")The pollRender helper
Exponential backoff (500ms → 5s ceiling), configurable wall-clock budget.
python
from philiprehberger_docgen_sdk import poll_render, PollRenderTimeout
try:
done = poll_render(
renders,
render.id,
max_wait_ms=30_000,
initial_interval_ms=500,
max_interval_ms=5_000,
backoff_factor=1.6,
)
except PollRenderTimeout as e:
# e.render_id, e.max_wait_ms
...Frameworks. The client is pure-stdlib HTTP via urllib3, so it slots into FastAPI, Django, Flask, or a plain script identically. No global state, no monkey-patching.
Typing. Pydantic v2 models, full type hints, py.typed shipped — mypy + pyright see the SDK as fully typed.