DocgenTry it

Python SDK

philiprehberger-docgen

Generated client + hand-tuned pollRender helper. View source on GitHub.

Install

shell
pip install philiprehberger-docgen

Quickstart

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.