Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
1197a12
fix(types): allow pyright to infer TypedDict types within SequenceNotStr
stainless-app[bot] Dec 8, 2025
6fc2141
chore: add missing docstrings
stainless-app[bot] Dec 8, 2025
84ade2c
chore(internal): add missing files argument to base client
stainless-app[bot] Dec 15, 2025
5300f18
chore: speedup initial import
stainless-app[bot] Dec 16, 2025
2a4c51a
fix: use async_to_httpx_files in patch method
stainless-app[bot] Dec 17, 2025
aaa77d7
chore(internal): add `--fix` argument to lint script
stainless-app[bot] Dec 18, 2025
72f7709
chore(internal): codegen related update
stainless-app[bot] Jan 5, 2026
6ab992c
feat(api): api update
stainless-app[bot] Jan 6, 2026
94f4fa9
feat(api): api update
stainless-app[bot] Jan 9, 2026
5cc25b3
feat(client): add support for binary request streaming
stainless-app[bot] Jan 13, 2026
f7afece
feat(api): api update
stainless-app[bot] Jan 16, 2026
34bf2ba
chore(internal): update `actions/checkout` version
stainless-app[bot] Jan 16, 2026
37e674a
chore(ci): upgrade `actions/github-script`
stainless-app[bot] Jan 23, 2026
c00e5f5
feat(api): api update
stainless-app[bot] Jan 26, 2026
bc95591
feat(api): api update
stainless-app[bot] Jan 26, 2026
24288cd
feat(api): api update
stainless-app[bot] Jan 29, 2026
7b89b88
feat(client): add custom JSON encoder for extended type support
stainless-app[bot] Jan 29, 2026
cd147cc
chore(internal): bump dependencies
stainless-app[bot] Feb 9, 2026
6fa1e9a
chore(internal): fix lint error on Python 3.14
stainless-app[bot] Feb 11, 2026
cafa350
chore: format all `api.md` files
stainless-app[bot] Feb 12, 2026
4c5c4e2
feat(api): api update
stainless-app[bot] Feb 13, 2026
b01c5bb
codegen metadata
stainless-app[bot] Feb 17, 2026
dcbbc25
codegen metadata
stainless-app[bot] Feb 17, 2026
99d100e
codegen metadata
stainless-app[bot] Feb 17, 2026
76efbc2
codegen metadata
stainless-app[bot] Feb 17, 2026
85a5da0
chore: update mock server docs
stainless-app[bot] Feb 19, 2026
1d2f5ba
chore(internal): add request options to SSE classes
stainless-app[bot] Feb 23, 2026
1ca0a6e
chore(internal): make `test_proxy_environment_variables` more resilient
stainless-app[bot] Feb 23, 2026
0e5b065
chore(internal): make `test_proxy_environment_variables` more resilie…
stainless-app[bot] Feb 24, 2026
1a73fd8
chore(docs): add missing descriptions
stainless-app[bot] Feb 27, 2026
859b8f0
feat(api): api update
stainless-app[bot] Mar 3, 2026
73aaccf
chore(test): do not count install time for mock server timeout
stainless-app[bot] Mar 5, 2026
c6b3603
chore(ci): skip uploading artifacts on stainless-internal branches
stainless-app[bot] Mar 7, 2026
fb62543
release: 0.11.0
stainless-app[bot] Mar 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/prelude-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand All @@ -44,7 +44,7 @@ jobs:
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/prelude-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand All @@ -61,14 +61,18 @@ jobs:
run: rye build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/prelude-python'
if: |-
github.repository == 'stainless-sdks/prelude-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v6
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

- name: Upload tarball
if: github.repository == 'stainless-sdks/prelude-python'
if: |-
github.repository == 'stainless-sdks/prelude-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
env:
URL: https://pkg.stainless.com/s
AUTH: ${{ steps.github-oidc.outputs.github_token }}
Expand All @@ -81,7 +85,7 @@ jobs:
runs-on: ${{ github.repository == 'stainless-sdks/prelude-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
if: github.repository == 'prelude-so/python-sdk' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Check release environment
run: |
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.10.0"
".": "0.11.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 19
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/prelude%2Fprelude-fe14bed3c1b6245444e1a53e7b0b172301c207ef9500dc68f4d8e58a7bfec436.yml
openapi_spec_hash: 4acdc9dd487011b2391f6fe02812a6bd
config_hash: 55380048fe5cf686421acf7eeaae21be
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/prelude%2Fprelude-c9124c257dd54dd0728cb57306b9082007439bfefac11642542605edb3e7606d.yml
openapi_spec_hash: 61dc64cc814d10975a8825ec88fd9c1c
config_hash: 107ae5754168e80c4ad2cd779a75bc36
44 changes: 44 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,49 @@
# Changelog

## 0.11.0 (2026-03-07)

Full Changelog: [v0.10.0...v0.11.0](https://github.com/prelude-so/python-sdk/compare/v0.10.0...v0.11.0)

### Features

* **api:** api update ([859b8f0](https://github.com/prelude-so/python-sdk/commit/859b8f0cccf997852bc2d1911b1699da74741551))
* **api:** api update ([4c5c4e2](https://github.com/prelude-so/python-sdk/commit/4c5c4e253a4f490b338d5536201a0ae3d5bc64a7))
* **api:** api update ([24288cd](https://github.com/prelude-so/python-sdk/commit/24288cdaca292916fbb906003adcbb80f8315343))
* **api:** api update ([bc95591](https://github.com/prelude-so/python-sdk/commit/bc95591afd9e4e6e09a4c8f83a5730ad3a5ed051))
* **api:** api update ([c00e5f5](https://github.com/prelude-so/python-sdk/commit/c00e5f5f604a94604140731637d7fb975376188e))
* **api:** api update ([f7afece](https://github.com/prelude-so/python-sdk/commit/f7afece5c9ea5bb3f3420a8a1f543da1e136bcff))
* **api:** api update ([94f4fa9](https://github.com/prelude-so/python-sdk/commit/94f4fa9904573e950ae6d01d289cce34e9e70370))
* **api:** api update ([6ab992c](https://github.com/prelude-so/python-sdk/commit/6ab992cc4da735868c0aed05cd737ed33f2c8d68))
* **client:** add custom JSON encoder for extended type support ([7b89b88](https://github.com/prelude-so/python-sdk/commit/7b89b884402982ffc74e27f13bfccdff24b8ff75))
* **client:** add support for binary request streaming ([5cc25b3](https://github.com/prelude-so/python-sdk/commit/5cc25b3416e9fe458d27fb26a0f8ebca1c36312a))


### Bug Fixes

* **types:** allow pyright to infer TypedDict types within SequenceNotStr ([1197a12](https://github.com/prelude-so/python-sdk/commit/1197a1218644530a19719ab9866385a3155581d5))
* use async_to_httpx_files in patch method ([2a4c51a](https://github.com/prelude-so/python-sdk/commit/2a4c51aa40b31c9709fd482771a5eb1defd60786))


### Chores

* add missing docstrings ([6fc2141](https://github.com/prelude-so/python-sdk/commit/6fc2141b36efba6d357336a36c1305864ffec8cb))
* **ci:** skip uploading artifacts on stainless-internal branches ([c6b3603](https://github.com/prelude-so/python-sdk/commit/c6b360343d0e2115be558ae6b17017235428206d))
* **ci:** upgrade `actions/github-script` ([37e674a](https://github.com/prelude-so/python-sdk/commit/37e674a17a76e2a0bb3a2f9b29439ea233830109))
* **docs:** add missing descriptions ([1a73fd8](https://github.com/prelude-so/python-sdk/commit/1a73fd80ad7b60fda2da8ad9746aede6b7d7bf1c))
* format all `api.md` files ([cafa350](https://github.com/prelude-so/python-sdk/commit/cafa350bb5651faa97e3d5b0ba520a24805e57ae))
* **internal:** add `--fix` argument to lint script ([aaa77d7](https://github.com/prelude-so/python-sdk/commit/aaa77d73edce4cc03a4cd203b90a7c6f9e145bbd))
* **internal:** add missing files argument to base client ([84ade2c](https://github.com/prelude-so/python-sdk/commit/84ade2c96740cc217646929248a0b4e60c2434f0))
* **internal:** add request options to SSE classes ([1d2f5ba](https://github.com/prelude-so/python-sdk/commit/1d2f5baf54ac0ed2e95c94c0c8a5ad97456d8db7))
* **internal:** bump dependencies ([cd147cc](https://github.com/prelude-so/python-sdk/commit/cd147cc674b99d1f42840dc8be4cbc50abe458cb))
* **internal:** codegen related update ([72f7709](https://github.com/prelude-so/python-sdk/commit/72f7709ffeae6b6b4ad835f0861136d713aa3ba5))
* **internal:** fix lint error on Python 3.14 ([6fa1e9a](https://github.com/prelude-so/python-sdk/commit/6fa1e9a65dd600399a33c4184b159693dc5f6fd2))
* **internal:** make `test_proxy_environment_variables` more resilient ([1ca0a6e](https://github.com/prelude-so/python-sdk/commit/1ca0a6ec1b01fc52bf7c02225a4a63873da0a75b))
* **internal:** make `test_proxy_environment_variables` more resilient to env ([0e5b065](https://github.com/prelude-so/python-sdk/commit/0e5b065a92f740de2a59ad94777ca4890b0aba13))
* **internal:** update `actions/checkout` version ([34bf2ba](https://github.com/prelude-so/python-sdk/commit/34bf2ba6a9e133d5287719459da01be9289b115d))
* speedup initial import ([5300f18](https://github.com/prelude-so/python-sdk/commit/5300f18a10c0db7b222c1bb3e487402aab9d318e))
* **test:** do not count install time for mock server timeout ([73aaccf](https://github.com/prelude-so/python-sdk/commit/73aaccf6b2dde8d80b4ee5d090a9057f847b4bac))
* update mock server docs ([85a5da0](https://github.com/prelude-so/python-sdk/commit/85a5da01c2f04110317bd8a8c5a4cec4bd7be831))

## 0.10.0 (2025-12-05)

Full Changelog: [v0.9.0...v0.10.0](https://github.com/prelude-so/python-sdk/compare/v0.9.0...v0.10.0)
Expand Down
3 changes: 1 addition & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,7 @@ $ pip install ./path-to-wheel-file.whl
Most tests require you to [set up a mock server](https://github.com/stoplightio/prism) against the OpenAPI spec to run the tests.

```sh
# you will need npm installed
$ npx prism mock path/to/your/openapi.yml
$ ./scripts/mock
```

```sh
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.

Copyright 2025 Prelude
Copyright 2026 Prelude

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "prelude-python-sdk"
version = "0.10.0"
version = "0.11.0"
description = "The official Python library for the Prelude API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down Expand Up @@ -69,7 +69,7 @@ format = { chain = [
# run formatting again to fix any inconsistencies when imports are stripped
"format:ruff",
]}
"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
"format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
"format:ruff" = "ruff format"

"lint" = { chain = [
Expand Down
20 changes: 10 additions & 10 deletions requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.13.2
aiohttp==3.13.3
# via httpx-aiohttp
# via prelude-python-sdk
aiosignal==1.4.0
# via aiohttp
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
anyio==4.12.1
# via httpx
# via prelude-python-sdk
argcomplete==3.6.3
Expand All @@ -31,7 +31,7 @@ attrs==25.4.0
# via nox
backports-asyncio-runner==1.2.0
# via pytest-asyncio
certifi==2025.11.12
certifi==2026.1.4
# via httpcore
# via httpx
colorlog==6.10.1
Expand Down Expand Up @@ -61,15 +61,15 @@ httpx==0.28.1
# via httpx-aiohttp
# via prelude-python-sdk
# via respx
httpx-aiohttp==0.1.9
httpx-aiohttp==0.1.12
# via prelude-python-sdk
humanize==4.13.0
# via nox
idna==3.11
# via anyio
# via httpx
# via yarl
importlib-metadata==8.7.0
importlib-metadata==8.7.1
iniconfig==2.1.0
# via pytest
markdown-it-py==3.0.0
Expand All @@ -82,14 +82,14 @@ multidict==6.7.0
mypy==1.17.0
mypy-extensions==1.1.0
# via mypy
nodeenv==1.9.1
nodeenv==1.10.0
# via pyright
nox==2025.11.12
packaging==25.0
# via dependency-groups
# via nox
# via pytest
pathspec==0.12.1
pathspec==1.0.3
# via mypy
platformdirs==4.4.0
# via virtualenv
Expand All @@ -115,13 +115,13 @@ python-dateutil==2.9.0.post0
# via time-machine
respx==0.22.0
rich==14.2.0
ruff==0.14.7
ruff==0.14.13
six==1.17.0
# via python-dateutil
sniffio==1.3.1
# via prelude-python-sdk
time-machine==2.19.0
tomli==2.3.0
tomli==2.4.0
# via dependency-groups
# via mypy
# via nox
Expand All @@ -141,7 +141,7 @@ typing-extensions==4.15.0
# via virtualenv
typing-inspection==0.4.2
# via pydantic
virtualenv==20.35.4
virtualenv==20.36.1
# via nox
yarl==1.22.0
# via aiohttp
Expand Down
8 changes: 4 additions & 4 deletions requirements.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.13.2
aiohttp==3.13.3
# via httpx-aiohttp
# via prelude-python-sdk
aiosignal==1.4.0
# via aiohttp
annotated-types==0.7.0
# via pydantic
anyio==4.12.0
anyio==4.12.1
# via httpx
# via prelude-python-sdk
async-timeout==5.0.1
# via aiohttp
attrs==25.4.0
# via aiohttp
certifi==2025.11.12
certifi==2026.1.4
# via httpcore
# via httpx
distro==1.9.0
Expand All @@ -43,7 +43,7 @@ httpcore==1.0.9
httpx==0.28.1
# via httpx-aiohttp
# via prelude-python-sdk
httpx-aiohttp==0.1.9
httpx-aiohttp==0.1.12
# via prelude-python-sdk
idna==3.11
# via anyio
Expand Down
9 changes: 7 additions & 2 deletions scripts/lint
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ set -e

cd "$(dirname "$0")/.."

echo "==> Running lints"
rye run lint
if [ "$1" = "--fix" ]; then
echo "==> Running lints with --fix"
rye run fix:ruff
else
echo "==> Running lints"
rye run lint
fi

echo "==> Making sure it imports"
rye run python -c 'import prelude_python_sdk'
13 changes: 12 additions & 1 deletion scripts/mock
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,22 @@ echo "==> Starting mock server with URL ${URL}"

# Run prism mock on the given spec
if [ "$1" == "--daemon" ]; then
# Pre-install the package so the download doesn't eat into the startup timeout
npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism --version

npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" &> .prism.log &

# Wait for server to come online
# Wait for server to come online (max 30s)
echo -n "Waiting for server"
attempts=0
while ! grep -q "✖ fatal\|Prism is listening" ".prism.log" ; do
attempts=$((attempts + 1))
if [ "$attempts" -ge 300 ]; then
echo
echo "Timed out waiting for Prism server to start"
cat .prism.log
exit 1
fi
echo -n "."
sleep 0.1
done
Expand Down
Loading