Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
98724ee
chore(internal): codegen related update
stainless-app[bot] Nov 21, 2025
2e208be
codegen metadata
stainless-app[bot] Nov 24, 2025
359f6a8
codegen metadata
stainless-app[bot] Nov 24, 2025
a4ee7c5
codegen metadata
stainless-app[bot] Nov 25, 2025
824ac3f
codegen metadata
stainless-app[bot] Nov 25, 2025
b6c112a
codegen metadata
stainless-app[bot] Nov 25, 2025
007d337
fix: ensure streams are always closed
stainless-app[bot] Nov 27, 2025
227e51f
chore(deps): mypy 1.18.1 has a regression, pin to 1.17
stainless-app[bot] Nov 27, 2025
420776a
codegen metadata
stainless-app[bot] Dec 1, 2025
48e85d7
chore: update lockfile
stainless-app[bot] Dec 2, 2025
832d353
codegen metadata
stainless-app[bot] Dec 2, 2025
89f2835
chore(docs): use environment variables for authentication in code sni…
stainless-app[bot] Dec 2, 2025
a702b9d
codegen metadata
stainless-app[bot] Dec 3, 2025
64edc3c
codegen metadata
stainless-app[bot] Dec 3, 2025
f84db64
codegen metadata
stainless-app[bot] Dec 4, 2025
47806ce
feat(api): api update
stainless-app[bot] Dec 4, 2025
ab076a9
fix(types): allow pyright to infer TypedDict types within SequenceNotStr
stainless-app[bot] Dec 8, 2025
dad2da6
chore: add missing docstrings
stainless-app[bot] Dec 8, 2025
c8a206a
feat(api): api update
stainless-app[bot] Dec 9, 2025
66931f9
feat(api): api update
stainless-app[bot] Dec 9, 2025
79859d6
feat(api): api update
stainless-app[bot] Dec 9, 2025
8737e4a
chore(internal): add missing files argument to base client
stainless-app[bot] Dec 15, 2025
f5c9aa6
chore: speedup initial import
stainless-app[bot] Dec 16, 2025
47196d1
fix: use async_to_httpx_files in patch method
stainless-app[bot] Dec 17, 2025
be20a97
chore(internal): add `--fix` argument to lint script
stainless-app[bot] Dec 18, 2025
e18d328
release: 1.20.0
stainless-app[bot] Dec 18, 2025
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 @@
{
".": "1.19.0"
".": "1.20.0"
}
4 changes: 2 additions & 2 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 90
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/knock%2Fknock-ce72fff9b44a47ab7e0425e496f09c61cde5b4258feb20cb5dbef6fa615a57e4.yml
openapi_spec_hash: 3054ea299cf43dc89b68266818fecfe4
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/knock%2Fknock-e4fa52740f0456b398ba70a2d1a75e2363a8ae73202aea5dfb5959d2cda0f941.yml
openapi_spec_hash: 625e7ae73ab57c5c100e39cc96f3ad0b
config_hash: 2b42d138d85c524e65fa7e205d36cc4a
30 changes: 30 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,35 @@
# Changelog

## 1.20.0 (2025-12-18)

Full Changelog: [v1.19.0...v1.20.0](https://github.com/knocklabs/knock-python/compare/v1.19.0...v1.20.0)

### Features

* **api:** api update ([79859d6](https://github.com/knocklabs/knock-python/commit/79859d6ca10acd18814ba447bf59d8289f361e74))
* **api:** api update ([66931f9](https://github.com/knocklabs/knock-python/commit/66931f970f1e98fb2152194ba9834e914538d109))
* **api:** api update ([c8a206a](https://github.com/knocklabs/knock-python/commit/c8a206a627961a6ece03ff8d9aeb371d73e5be04))
* **api:** api update ([47806ce](https://github.com/knocklabs/knock-python/commit/47806ce73d09bedb21d6ded55c68a5401d50abbe))


### Bug Fixes

* ensure streams are always closed ([007d337](https://github.com/knocklabs/knock-python/commit/007d337f07c9de1883d0580209aa743384e24925))
* **types:** allow pyright to infer TypedDict types within SequenceNotStr ([ab076a9](https://github.com/knocklabs/knock-python/commit/ab076a9225fe2b2d013603b7136c7a76ea0f3300))
* use async_to_httpx_files in patch method ([47196d1](https://github.com/knocklabs/knock-python/commit/47196d100147ab585fdb4fb3e7e05b92b953c2ec))


### Chores

* add missing docstrings ([dad2da6](https://github.com/knocklabs/knock-python/commit/dad2da6573ee829b4ac6c44d480e7becd19a25e0))
* **deps:** mypy 1.18.1 has a regression, pin to 1.17 ([227e51f](https://github.com/knocklabs/knock-python/commit/227e51fa9f367e8aa67f9fe9ce96c844c3925b9e))
* **docs:** use environment variables for authentication in code snippets ([89f2835](https://github.com/knocklabs/knock-python/commit/89f283596c21f14a316593dd8542c0ae8b872afc))
* **internal:** add `--fix` argument to lint script ([be20a97](https://github.com/knocklabs/knock-python/commit/be20a97526ee33e626576d27f817f186218facb4))
* **internal:** add missing files argument to base client ([8737e4a](https://github.com/knocklabs/knock-python/commit/8737e4a0cd84c85d0887b2e0ce5d9acd034abe87))
* **internal:** codegen related update ([98724ee](https://github.com/knocklabs/knock-python/commit/98724ee95eeaf2dffd5e725b212d223b9db1096a))
* speedup initial import ([f5c9aa6](https://github.com/knocklabs/knock-python/commit/f5c9aa6dd753849ac29c12ca41e1723ac77d1892))
* update lockfile ([48e85d7](https://github.com/knocklabs/knock-python/commit/48e85d7d0cdd44f342abd95e1517dc4f51f1d67d))

## 1.19.0 (2025-11-20)

Full Changelog: [v1.18.1...v1.19.0](https://github.com/knocklabs/knock-python/compare/v1.18.1...v1.19.0)
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,15 @@ pip install knockapi[aiohttp]
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:

```python
import os
import asyncio
from knockapi import DefaultAioHttpClient
from knockapi import AsyncKnock


async def main() -> None:
async with AsyncKnock(
api_key="My API Key",
api_key=os.environ.get("KNOCK_API_KEY"), # This is the default and can be omitted
http_client=DefaultAioHttpClient(),
) as client:
response = await client.workflows.trigger(
Expand Down
19 changes: 11 additions & 8 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
[project]
name = "knockapi"
version = "1.19.0"
version = "1.20.0"
description = "The official Python library for the knock API"
dynamic = ["readme"]
license = "Apache-2.0"
authors = [
{ name = "Knock", email = "support@knock.app" },
]

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.9"
classifiers = [
"Typing :: Typed",
Expand All @@ -24,6 +26,7 @@ classifiers = [
"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 @@ -45,7 +48,7 @@ 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
112 changes: 62 additions & 50 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 httpx-aiohttp
# via knockapi
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 httpx
# via knockapi
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 knockapi
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 @@ -58,80 +63,87 @@ httpx==0.28.1
# via respx
httpx-aiohttp==0.1.9
# via knockapi
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 knockapi
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 knockapi
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 exceptiongroup
# via knockapi
# 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
39 changes: 20 additions & 19 deletions requirements.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12,28 +12,28 @@
-e file:.
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.12.8
aiohttp==3.13.2
# via httpx-aiohttp
# via knockapi
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 httpx
# via knockapi
async-timeout==5.0.1
# via aiohttp
attrs==25.3.0
attrs==25.4.0
# via aiohttp
certifi==2023.7.22
certifi==2025.11.12
# via httpcore
# via httpx
distro==1.8.0
distro==1.9.0
# via knockapi
exceptiongroup==1.2.2
exceptiongroup==1.3.1
# via anyio
frozenlist==1.6.2
frozenlist==1.8.0
# via aiohttp
# via aiosignal
h11==0.16.0
Expand All @@ -45,31 +45,32 @@ httpx==0.28.1
# via knockapi
httpx-aiohttp==0.1.9
# via knockapi
idna==3.4
idna==3.11
# via anyio
# via httpx
# via yarl
multidict==6.4.4
multidict==6.7.0
# via aiohttp
# via yarl
propcache==0.3.1
propcache==0.4.1
# via aiohttp
# via yarl
pydantic==2.11.9
pydantic==2.12.5
# via knockapi
pydantic-core==2.33.2
pydantic-core==2.41.5
# via pydantic
sniffio==1.3.0
# via anyio
sniffio==1.3.1
# via knockapi
typing-extensions==4.12.2
typing-extensions==4.15.0
# via aiosignal
# via anyio
# via exceptiongroup
# via knockapi
# via multidict
# via pydantic
# via pydantic-core
# via typing-inspection
typing-inspection==0.4.1
typing-inspection==0.4.2
# via pydantic
yarl==1.20.0
yarl==1.22.0
# via aiohttp
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 knockapi'
Loading