Metadata-Version: 2.4
Name: proofline-sdk
Version: 1.0.1
Summary: Typed synchronous and asynchronous clients for the Proofline review API
Project-URL: Homepage, https://proofline.sh
Project-URL: Documentation, https://proofline.sh/docs/sdks/
Project-URL: Repository, https://github.com/prooflinedev/sdk-python
License-Expression: Apache-2.0 AND MIT
License-File: LICENSE
License-File: proofline/_generated/LICENSE
Keywords: code-review,deployment,openapi,proofline,sdk
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: anyio<5,>=4
Requires-Dist: attrs>=22.2.0
Requires-Dist: httpcore==1.0.9
Requires-Dist: httpx<0.29,>=0.27
Requires-Dist: pydantic<3,>=2.10
Requires-Dist: python-dateutil<3,>=2.8.2
Provides-Extra: dev
Requires-Dist: build==1.3.0; extra == 'dev'
Requires-Dist: hatchling==1.27.0; extra == 'dev'
Requires-Dist: mypy==1.18.2; extra == 'dev'
Requires-Dist: openapi-python-client==0.29.1; extra == 'dev'
Requires-Dist: pytest-asyncio==1.2.0; extra == 'dev'
Requires-Dist: pytest==8.4.2; extra == 'dev'
Requires-Dist: ruff==0.14.3; extra == 'dev'
Description-Content-Type: text/markdown

# proofline-sdk

Typed synchronous and asynchronous Python clients for the [Proofline](https://proofline.sh)
review API. They read and request reviews with a scoped API token, and add pagination,
waiting for a review, retries and typed errors. The import package is `proofline`.
Python 3.11 or newer is required.

```sh
pip install proofline-sdk
```

```python
import os
from proofline import ProoflineClient

with ProoflineClient(os.environ["PROOFLINE_TOKEN"]) as client:
    ...
```

The clients read `PROOFLINE_TOKEN` when no token is passed, keep the token in memory
and redact it from diagnostic output. `AsyncProoflineClient` has the same methods as
coroutines. The [SDK guide](https://proofline.sh/docs/sdks/) and
[API reference](https://proofline.sh/docs/api/) cover every operation.

Licensed under the Apache License, Version 2.0. The generated models under
`proofline/_generated` carry the MIT license of the generator templates.

## Exports

`export_reviews` reads one CSV or NDJSON page through the existing bounded transport.
It returns the original text, decoded rows, dataset version, settled horizon and
optional next cursor. CSV cells remain strings, including nested JSON cells;
NDJSON retains JSON values. Export tokens need `analytics:read`.
Repeat with the returned cursor and the same dataset, window, format and grouping.
A missing next cursor marks the last page. Each CSV page includes its own header.

```python
from uuid import UUID

with ProoflineClient() as client:
    page = client.export_reviews(
        UUID(os.environ["PROOFLINE_ORGANIZATION_ID"]), "reviews",
        from_time="2026-10-01T00:00:00Z", to_time="2026-10-25T00:00:00Z",
        format="csv",
    )
    print(page.text, end="")
    # Continue with cursor=page.next_cursor when it is not None.
```

## Development

The repository bundles its public API contract in `openapi.public.json`.
Run `python3 scripts/check.py` to install pinned tools, regenerate the client,
run checks and verify built packages.

## Publishing

GitHub Actions runs the checks on pull requests and main. The `Release` workflow
builds checked artifacts without publishing credentials. Run it on main with
`publish=false` to verify the release path. A `vX.Y.Z` tag matching the package
version, or a main-branch dispatch with `publish=true`, publishes after the
`pypi` environment approves the job. Release commits must belong to main.

Publishing uses GitHub OIDC and the repository's `release.yml` trusted publisher.
No registry token is stored in GitHub.

SDK patch releases can update packaging and publishing independently. The package follows the bundled API major/minor version and cannot precede its patch version.
