Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
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.0.2"
".": "0.0.3"
}
2 changes: 1 addition & 1 deletion .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 123
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/unity-ai-solutions%2Fbandlab-sdk-e9fb5f50d7611b987057db88caeff8183f5d35f2cce83c930706cedb1efb90bb.yml
openapi_spec_hash: 3fcf9af7f10bbb3a0d447cdaeb776679
config_hash: a00f401738097b10492b97e6ba575984
config_hash: 859efd139fe6e60b06140aad6560c5da
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# Changelog

## 0.0.3 (2025-12-03)

Full Changelog: [v0.0.2...v0.0.3](https://github.com/unityaisolutions/bandlab-sdk-python/compare/v0.0.2...v0.0.3)

### Bug Fixes

* **client:** close streams without requiring full consumption ([ea9d82b](https://github.com/unityaisolutions/bandlab-sdk-python/commit/ea9d82bb87931c41546a3f1e71169781d5ec70a5))
* compat with Python 3.14 ([710c9a7](https://github.com/unityaisolutions/bandlab-sdk-python/commit/710c9a712830d120d4e4a66617340aa957f1169c))
* **compat:** update signatures of `model_dump` and `model_dump_json` for Pydantic v1 ([b3f4b49](https://github.com/unityaisolutions/bandlab-sdk-python/commit/b3f4b4991368caf3ae4f09e94ef9a7f7e3e779af))
* ensure streams are always closed ([3a056cb](https://github.com/unityaisolutions/bandlab-sdk-python/commit/3a056cb8f6aa81d7767c06539c4ab4219e8685bc))


### Chores

* add Python 3.14 classifier and testing ([ad33f9f](https://github.com/unityaisolutions/bandlab-sdk-python/commit/ad33f9fb79502d5d5690152c60207103f22ad178))
* bump `httpx-aiohttp` version to 0.1.9 ([fa828c9](https://github.com/unityaisolutions/bandlab-sdk-python/commit/fa828c92892d138797f2d4305cfc06175320443d))
* **deps:** mypy 1.18.1 has a regression, pin to 1.17 ([fa9f124](https://github.com/unityaisolutions/bandlab-sdk-python/commit/fa9f124fad44885c9cc34322c2e88648100a5ed4))
* **docs:** use environment variables for authentication in code snippets ([7a1af6b](https://github.com/unityaisolutions/bandlab-sdk-python/commit/7a1af6bbb832e2a2321f0c4c8237c10595f8734f))
* **internal/tests:** avoid race condition with implicit client cleanup ([d2bed4c](https://github.com/unityaisolutions/bandlab-sdk-python/commit/d2bed4c19191de9a7e74e203562584fca180d725))
* **internal:** detect missing future annotations with ruff ([1bf6691](https://github.com/unityaisolutions/bandlab-sdk-python/commit/1bf6691622550cb48d94f47d8f0348f15224c0ca))
* **internal:** grammar fix (it's -> its) ([33f5e3e](https://github.com/unityaisolutions/bandlab-sdk-python/commit/33f5e3e49bf7838a04944266b18adc7fd0293791))
* **package:** drop Python 3.8 support ([94ff736](https://github.com/unityaisolutions/bandlab-sdk-python/commit/94ff73658e32c150f8ce4b6038e5f8e1f99a9356))
* update lockfile ([e49fcca](https://github.com/unityaisolutions/bandlab-sdk-python/commit/e49fcca518687ff871a76f8b212612572c96155b))

## 0.0.2 (2025-10-03)

Full Changelog: [v0.0.1...v0.0.2](https://github.com/unityaisolutions/bandlab-sdk-python/compare/v0.0.1...v0.0.2)
Expand Down
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!-- prettier-ignore -->
[![PyPI version](https://img.shields.io/pypi/v/bandlab_sdk.svg?label=pypi%20(stable))](https://pypi.org/project/bandlab_sdk/)

The Bandlab SDK Python library provides convenient access to the Bandlab SDK REST API from any Python 3.8+
The Bandlab SDK Python library provides convenient access to the Bandlab SDK REST API from any Python 3.9+
application. The library includes type definitions for all request params and response fields,
and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).

Expand Down Expand Up @@ -91,14 +91,17 @@ pip install bandlab_sdk[aiohttp]
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:

```python
import os
import asyncio
from bandlab_sdk import DefaultAioHttpClient
from bandlab_sdk import AsyncBandlabSDK


async def main() -> None:
async with AsyncBandlabSDK(
bearer_token="My Bearer Token",
bearer_token=os.environ.get(
"BANDLAB_SDK_BEARER_TOKEN"
), # This is the default and can be omitted
http_client=DefaultAioHttpClient(),
) as client:
response = await client.validation.validate(
Expand Down Expand Up @@ -395,7 +398,7 @@ print(bandlab_sdk.__version__)

## Requirements

Python 3.8 or higher.
Python 3.9 or higher.

## Contributing

Expand Down
30 changes: 18 additions & 12 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,30 +1,32 @@
[project]
name = "bandlab_sdk"
version = "0.0.2"
version = "0.0.3"
description = "The official Python library for the bandlab-sdk API"
dynamic = ["readme"]
license = "Apache-2.0"
authors = [
{ name = "Bandlab SDK", email = "" },
]

dependencies = [
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
]
requires-python = ">= 3.8"

requires-python = ">= 3.9"
classifiers = [
"Typing :: Typed",
"Intended Audience :: Developers",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Operating System :: OS Independent",
"Operating System :: POSIX",
"Operating System :: MacOS",
Expand All @@ -39,14 +41,14 @@ Homepage = "https://github.com/unityaisolutions/bandlab-sdk-python"
Repository = "https://github.com/unityaisolutions/bandlab-sdk-python"

[project.optional-dependencies]
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.8"]
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]

[tool.rye]
managed = true
# version pins are in requirements-dev.lock
dev-dependencies = [
"pyright==1.1.399",
"mypy",
"mypy==1.17",
"respx",
"pytest",
"pytest-asyncio",
Expand Down Expand Up @@ -141,7 +143,7 @@ filterwarnings = [
# there are a couple of flags that are still disabled by
# default in strict mode as they are experimental and niche.
typeCheckingMode = "strict"
pythonVersion = "3.8"
pythonVersion = "3.9"

exclude = [
"_dev",
Expand Down Expand Up @@ -224,6 +226,8 @@ select = [
"B",
# remove unused imports
"F401",
# check for missing future annotations
"FA102",
# bare except statements
"E722",
# unused arguments
Expand All @@ -246,6 +250,8 @@ unfixable = [
"T203",
]

extend-safe-fixes = ["FA102"]

[tool.ruff.lint.flake8-tidy-imports.banned-api]
"functools.lru_cache".msg = "This function does not retain type information for the wrapped function's arguments; The `lru_cache` function from `_utils` should be used instead"

Expand Down
114 changes: 63 additions & 51 deletions requirements-dev.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,40 +12,45 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.12.8
aiohttp==3.13.2
# via bandlab-sdk
# via httpx-aiohttp
aiosignal==1.3.2
aiosignal==1.4.0
# via aiohttp
annotated-types==0.6.0
annotated-types==0.7.0
# via pydantic
anyio==4.4.0
anyio==4.12.0
# via bandlab-sdk
# via httpx
argcomplete==3.1.2
argcomplete==3.6.3
# via nox
async-timeout==5.0.1
# via aiohttp
attrs==25.3.0
attrs==25.4.0
# via aiohttp
certifi==2023.7.22
# via nox
backports-asyncio-runner==1.2.0
# via pytest-asyncio
certifi==2025.11.12
# via httpcore
# via httpx
colorlog==6.7.0
colorlog==6.10.1
# via nox
dependency-groups==1.3.1
# via nox
dirty-equals==0.6.0
distlib==0.3.7
dirty-equals==0.11
distlib==0.4.0
# via virtualenv
distro==1.8.0
distro==1.9.0
# via bandlab-sdk
exceptiongroup==1.2.2
exceptiongroup==1.3.1
# via anyio
# via pytest
execnet==2.1.1
execnet==2.1.2
# via pytest-xdist
filelock==3.12.4
filelock==3.19.1
# via virtualenv
frozenlist==1.6.2
frozenlist==1.8.0
# via aiohttp
# via aiosignal
h11==0.16.0
Expand All @@ -56,82 +61,89 @@ httpx==0.28.1
# via bandlab-sdk
# via httpx-aiohttp
# via respx
httpx-aiohttp==0.1.8
httpx-aiohttp==0.1.9
# via bandlab-sdk
idna==3.4
humanize==4.13.0
# via nox
idna==3.11
# via anyio
# via httpx
# via yarl
importlib-metadata==7.0.0
iniconfig==2.0.0
importlib-metadata==8.7.0
iniconfig==2.1.0
# via pytest
markdown-it-py==3.0.0
# via rich
mdurl==0.1.2
# via markdown-it-py
multidict==6.4.4
multidict==6.7.0
# via aiohttp
# via yarl
mypy==1.14.1
mypy-extensions==1.0.0
mypy==1.17.0
mypy-extensions==1.1.0
# via mypy
nodeenv==1.8.0
nodeenv==1.9.1
# via pyright
nox==2023.4.22
packaging==23.2
nox==2025.11.12
packaging==25.0
# via dependency-groups
# via nox
# via pytest
platformdirs==3.11.0
pathspec==0.12.1
# via mypy
platformdirs==4.4.0
# via virtualenv
pluggy==1.5.0
pluggy==1.6.0
# via pytest
propcache==0.3.1
propcache==0.4.1
# via aiohttp
# via yarl
pydantic==2.11.9
pydantic==2.12.5
# via bandlab-sdk
pydantic-core==2.33.2
pydantic-core==2.41.5
# via pydantic
pygments==2.18.0
pygments==2.19.2
# via pytest
# via rich
pyright==1.1.399
pytest==8.3.3
pytest==8.4.2
# via pytest-asyncio
# via pytest-xdist
pytest-asyncio==0.24.0
pytest-xdist==3.7.0
python-dateutil==2.8.2
pytest-asyncio==1.2.0
pytest-xdist==3.8.0
python-dateutil==2.9.0.post0
# via time-machine
pytz==2023.3.post1
# via dirty-equals
respx==0.22.0
rich==13.7.1
ruff==0.9.4
setuptools==68.2.2
# via nodeenv
six==1.16.0
rich==14.2.0
ruff==0.14.7
six==1.17.0
# via python-dateutil
sniffio==1.3.0
# via anyio
sniffio==1.3.1
# via bandlab-sdk
time-machine==2.9.0
tomli==2.0.2
time-machine==2.19.0
tomli==2.3.0
# via dependency-groups
# via mypy
# via nox
# via pytest
typing-extensions==4.12.2
typing-extensions==4.15.0
# via aiosignal
# via anyio
# via bandlab-sdk
# via exceptiongroup
# via multidict
# via mypy
# via pydantic
# via pydantic-core
# via pyright
# via pytest-asyncio
# via typing-inspection
typing-inspection==0.4.1
# via virtualenv
typing-inspection==0.4.2
# via pydantic
virtualenv==20.24.5
virtualenv==20.35.4
# via nox
yarl==1.20.0
yarl==1.22.0
# via aiohttp
zipp==3.17.0
zipp==3.23.0
# via importlib-metadata
Loading
Loading