Skip to content

Commit 6c5f8d8

Browse files
release: 1.9.0 (#153)
* feat(api): api update * chore(internal): update pydantic dependency * codegen metadata * chore(types): change optional parameter type from NotGiven to Omit * chore: do not install brew dependencies in ./scripts/bootstrap by default * codegen metadata * codegen metadata * codegen metadata * chore(internal): detect missing future annotations with ruff * feat(api): api update * feat(api): api update * chore: bump `httpx-aiohttp` version to 0.1.9 * feat(api): api update * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * fix(client): close streams without requiring full consumption * codegen metadata * chore(internal/tests): avoid race condition with implicit client cleanup * chore(internal): grammar fix (it's -> its) * release: 1.9.0 --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent 942eb2c commit 6c5f8d8

34 files changed

Lines changed: 670 additions & 461 deletions

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "1.8.0"
2+
".": "1.9.0"
33
}

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 29
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-e67b8e285739a9a3998fbe39b5eb97fac5bb8f571781d4f5d242b3824d4d743e.yml
3-
openapi_spec_hash: bd661c93deb864b606bfc2d2ee110a1f
4-
config_hash: 00b1a3fd1b197bd253cdd6b7bc360c02
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-f59a2fe653b8ffaf4db2369ed4faaf97babf6525836c332bfcf3bbaf253de229.yml
3+
openapi_spec_hash: 2597723172f71e3be691d3dda87fcea8
4+
config_hash: 70cdb57c982c578d1961657c07b8b397

CHANGELOG.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,32 @@
11
# Changelog
22

3+
## 1.9.0 (2025-11-04)
4+
5+
Full Changelog: [v1.8.0...v1.9.0](https://github.com/ArcadeAI/arcade-py/compare/v1.8.0...v1.9.0)
6+
7+
### Features
8+
9+
* **api:** api update ([85c5f67](https://github.com/ArcadeAI/arcade-py/commit/85c5f671f829356f6b4556745785e9ecf3d86ff5))
10+
* **api:** api update ([73a9b83](https://github.com/ArcadeAI/arcade-py/commit/73a9b83cd333bd38db8560b91764f662fa8f4e7a))
11+
* **api:** api update ([cc7a611](https://github.com/ArcadeAI/arcade-py/commit/cc7a611b60084672f41979aea807f18249d1cb01))
12+
* **api:** api update ([eebc9ed](https://github.com/ArcadeAI/arcade-py/commit/eebc9edf476f0838f584f6d356fdaee8d8d79c76))
13+
14+
15+
### Bug Fixes
16+
17+
* **client:** close streams without requiring full consumption ([e5ceb83](https://github.com/ArcadeAI/arcade-py/commit/e5ceb832d91dfca38c306f69526c8a909d932f16))
18+
19+
20+
### Chores
21+
22+
* bump `httpx-aiohttp` version to 0.1.9 ([8d8e4b7](https://github.com/ArcadeAI/arcade-py/commit/8d8e4b7d707dce5a3e9869f3346cd256cd759c5c))
23+
* do not install brew dependencies in ./scripts/bootstrap by default ([927371b](https://github.com/ArcadeAI/arcade-py/commit/927371b47365c528be87e5dce549c0363d9b7a11))
24+
* **internal/tests:** avoid race condition with implicit client cleanup ([b14f88e](https://github.com/ArcadeAI/arcade-py/commit/b14f88efb33569f5307d9eabc4d7b6a6da9f477e))
25+
* **internal:** detect missing future annotations with ruff ([0afbe98](https://github.com/ArcadeAI/arcade-py/commit/0afbe984f92a6323e30c8eeb50685083ad83869e))
26+
* **internal:** grammar fix (it's -&gt; its) ([95c0ec1](https://github.com/ArcadeAI/arcade-py/commit/95c0ec14da8731bd724acb9c64973a05288c7fda))
27+
* **internal:** update pydantic dependency ([450a852](https://github.com/ArcadeAI/arcade-py/commit/450a852ffa8000a2c7e1d4d294a925366301c3fd))
28+
* **types:** change optional parameter type from NotGiven to Omit ([484c472](https://github.com/ArcadeAI/arcade-py/commit/484c472696a53d5b7ea9c14d9a826bc6701f0704))
29+
330
## 1.8.0 (2025-09-11)
431

532
Full Changelog: [v1.7.0...v1.8.0](https://github.com/ArcadeAI/arcade-py/compare/v1.7.0...v1.8.0)

pyproject.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "arcadepy"
3-
version = "1.8.0"
3+
version = "1.9.0"
44
description = "The official Python library for the Arcade API"
55
dynamic = ["readme"]
66
license = "MIT"
@@ -39,7 +39,7 @@ Homepage = "https://github.com/ArcadeAI/arcade-py"
3939
Repository = "https://github.com/ArcadeAI/arcade-py"
4040

4141
[project.optional-dependencies]
42-
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.8"]
42+
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]
4343

4444
[tool.rye]
4545
managed = true
@@ -224,6 +224,8 @@ select = [
224224
"B",
225225
# remove unused imports
226226
"F401",
227+
# check for missing future annotations
228+
"FA102",
227229
# bare except statements
228230
"E722",
229231
# unused arguments
@@ -246,6 +248,8 @@ unfixable = [
246248
"T203",
247249
]
248250

251+
extend-safe-fixes = ["FA102"]
252+
249253
[tool.ruff.lint.flake8-tidy-imports.banned-api]
250254
"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"
251255

requirements-dev.lock

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ httpx==0.28.1
5656
# via arcadepy
5757
# via httpx-aiohttp
5858
# via respx
59-
httpx-aiohttp==0.1.8
59+
httpx-aiohttp==0.1.9
6060
# via arcadepy
6161
idna==3.4
6262
# via anyio
@@ -88,9 +88,9 @@ pluggy==1.5.0
8888
propcache==0.3.1
8989
# via aiohttp
9090
# via yarl
91-
pydantic==2.10.3
91+
pydantic==2.11.9
9292
# via arcadepy
93-
pydantic-core==2.27.1
93+
pydantic-core==2.33.2
9494
# via pydantic
9595
pygments==2.18.0
9696
# via rich
@@ -126,6 +126,9 @@ typing-extensions==4.12.2
126126
# via pydantic
127127
# via pydantic-core
128128
# via pyright
129+
# via typing-inspection
130+
typing-inspection==0.4.1
131+
# via pydantic
129132
virtualenv==20.24.5
130133
# via nox
131134
yarl==1.20.0

requirements.lock

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ httpcore==1.0.9
4343
httpx==0.28.1
4444
# via arcadepy
4545
# via httpx-aiohttp
46-
httpx-aiohttp==0.1.8
46+
httpx-aiohttp==0.1.9
4747
# via arcadepy
4848
idna==3.4
4949
# via anyio
@@ -55,9 +55,9 @@ multidict==6.4.4
5555
propcache==0.3.1
5656
# via aiohttp
5757
# via yarl
58-
pydantic==2.10.3
58+
pydantic==2.11.9
5959
# via arcadepy
60-
pydantic-core==2.27.1
60+
pydantic-core==2.33.2
6161
# via pydantic
6262
sniffio==1.3.0
6363
# via anyio
@@ -68,5 +68,8 @@ typing-extensions==4.12.2
6868
# via multidict
6969
# via pydantic
7070
# via pydantic-core
71+
# via typing-inspection
72+
typing-inspection==0.4.1
73+
# via pydantic
7174
yarl==1.20.0
7275
# via aiohttp

scripts/bootstrap

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,18 @@ set -e
44

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

7-
if ! command -v rye >/dev/null 2>&1 && [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ]; then
7+
if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then
88
brew bundle check >/dev/null 2>&1 || {
9-
echo "==> Installing Homebrew dependencies…"
10-
brew bundle
9+
echo -n "==> Install Homebrew dependencies? (y/N): "
10+
read -r response
11+
case "$response" in
12+
[yY][eE][sS]|[yY])
13+
brew bundle
14+
;;
15+
*)
16+
;;
17+
esac
18+
echo
1119
}
1220
fi
1321

src/arcadepy/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import typing as _t
44

55
from . import types
6-
from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes
6+
from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes, omit, not_given
77
from ._utils import file_from_path
88
from ._client import Arcade, Client, Stream, Timeout, Transport, AsyncArcade, AsyncClient, AsyncStream, RequestOptions
99
from ._models import BaseModel
@@ -38,7 +38,9 @@
3838
"ProxiesTypes",
3939
"NotGiven",
4040
"NOT_GIVEN",
41+
"not_given",
4142
"Omit",
43+
"omit",
4244
"ArcadeError",
4345
"APIError",
4446
"APIStatusError",

src/arcadepy/_base_client.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
from ._qs import Querystring
4343
from ._files import to_httpx_files, async_to_httpx_files
4444
from ._types import (
45-
NOT_GIVEN,
4645
Body,
4746
Omit,
4847
Query,
@@ -57,6 +56,7 @@
5756
RequestOptions,
5857
HttpxRequestFiles,
5958
ModelBuilderProtocol,
59+
not_given,
6060
)
6161
from ._utils import is_dict, is_list, asyncify, is_given, lru_cache, is_mapping
6262
from ._compat import PYDANTIC_V1, model_copy, model_dump
@@ -145,9 +145,9 @@ def __init__(
145145
def __init__(
146146
self,
147147
*,
148-
url: URL | NotGiven = NOT_GIVEN,
149-
json: Body | NotGiven = NOT_GIVEN,
150-
params: Query | NotGiven = NOT_GIVEN,
148+
url: URL | NotGiven = not_given,
149+
json: Body | NotGiven = not_given,
150+
params: Query | NotGiven = not_given,
151151
) -> None:
152152
self.url = url
153153
self.json = json
@@ -595,7 +595,7 @@ def _maybe_override_cast_to(self, cast_to: type[ResponseT], options: FinalReques
595595
# we internally support defining a temporary header to override the
596596
# default `cast_to` type for use with `.with_raw_response` and `.with_streaming_response`
597597
# see _response.py for implementation details
598-
override_cast_to = headers.pop(OVERRIDE_CAST_TO_HEADER, NOT_GIVEN)
598+
override_cast_to = headers.pop(OVERRIDE_CAST_TO_HEADER, not_given)
599599
if is_given(override_cast_to):
600600
options.headers = headers
601601
return cast(Type[ResponseT], override_cast_to)
@@ -825,7 +825,7 @@ def __init__(
825825
version: str,
826826
base_url: str | URL,
827827
max_retries: int = DEFAULT_MAX_RETRIES,
828-
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
828+
timeout: float | Timeout | None | NotGiven = not_given,
829829
http_client: httpx.Client | None = None,
830830
custom_headers: Mapping[str, str] | None = None,
831831
custom_query: Mapping[str, object] | None = None,
@@ -1356,7 +1356,7 @@ def __init__(
13561356
base_url: str | URL,
13571357
_strict_response_validation: bool,
13581358
max_retries: int = DEFAULT_MAX_RETRIES,
1359-
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
1359+
timeout: float | Timeout | None | NotGiven = not_given,
13601360
http_client: httpx.AsyncClient | None = None,
13611361
custom_headers: Mapping[str, str] | None = None,
13621362
custom_query: Mapping[str, object] | None = None,
@@ -1818,8 +1818,8 @@ def make_request_options(
18181818
extra_query: Query | None = None,
18191819
extra_body: Body | None = None,
18201820
idempotency_key: str | None = None,
1821-
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
1822-
post_parser: PostParser | NotGiven = NOT_GIVEN,
1821+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
1822+
post_parser: PostParser | NotGiven = not_given,
18231823
) -> RequestOptions:
18241824
"""Create a dict of type RequestOptions without keys of NotGiven values."""
18251825
options: RequestOptions = {}

src/arcadepy/_client.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@
33
from __future__ import annotations
44

55
import os
6-
from typing import Any, Union, Mapping
6+
from typing import Any, Mapping
77
from typing_extensions import Self, override
88

99
import httpx
1010

1111
from . import _exceptions
1212
from ._qs import Querystring
1313
from ._types import (
14-
NOT_GIVEN,
1514
Omit,
1615
Timeout,
1716
NotGiven,
1817
Transport,
1918
ProxiesTypes,
2019
RequestOptions,
20+
not_given,
2121
)
2222
from ._utils import is_given, get_async_library
2323
from ._version import __version__
@@ -54,7 +54,7 @@ def __init__(
5454
*,
5555
api_key: str | None = None,
5656
base_url: str | httpx.URL | None = None,
57-
timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN,
57+
timeout: float | Timeout | None | NotGiven = not_given,
5858
max_retries: int = DEFAULT_MAX_RETRIES,
5959
default_headers: Mapping[str, str] | None = None,
6060
default_query: Mapping[str, object] | None = None,
@@ -134,9 +134,9 @@ def copy(
134134
*,
135135
api_key: str | None = None,
136136
base_url: str | httpx.URL | None = None,
137-
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
137+
timeout: float | Timeout | None | NotGiven = not_given,
138138
http_client: httpx.Client | None = None,
139-
max_retries: int | NotGiven = NOT_GIVEN,
139+
max_retries: int | NotGiven = not_given,
140140
default_headers: Mapping[str, str] | None = None,
141141
set_default_headers: Mapping[str, str] | None = None,
142142
default_query: Mapping[str, object] | None = None,
@@ -232,7 +232,7 @@ def __init__(
232232
*,
233233
api_key: str | None = None,
234234
base_url: str | httpx.URL | None = None,
235-
timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN,
235+
timeout: float | Timeout | None | NotGiven = not_given,
236236
max_retries: int = DEFAULT_MAX_RETRIES,
237237
default_headers: Mapping[str, str] | None = None,
238238
default_query: Mapping[str, object] | None = None,
@@ -312,9 +312,9 @@ def copy(
312312
*,
313313
api_key: str | None = None,
314314
base_url: str | httpx.URL | None = None,
315-
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
315+
timeout: float | Timeout | None | NotGiven = not_given,
316316
http_client: httpx.AsyncClient | None = None,
317-
max_retries: int | NotGiven = NOT_GIVEN,
317+
max_retries: int | NotGiven = not_given,
318318
default_headers: Mapping[str, str] | None = None,
319319
set_default_headers: Mapping[str, str] | None = None,
320320
default_query: Mapping[str, object] | None = None,

0 commit comments

Comments
 (0)