Skip to content

Commit 66bd1a2

Browse files
release: 1.7.0 (#148)
* docs(client): fix httpx.Timeout documentation reference * feat(client): add support for aiohttp * chore(tests): skip some failing tests on the latest python versions * fix(ci): release-doctor — report correct token name * codegen metadata * chore(ci): only run for pushes and fork pull requests * fix(ci): correct conditional * chore(ci): change upload type * feat(api): api update * feat(api): api update * chore(internal): bump pinned h11 dep * chore(package): mark python 3.13 as supported * fix(parsing): correctly handle nested discriminated unions * codegen metadata * chore(readme): fix version rendering on pypi * fix(client): don't send Content-Type header on GET requests * feat: clean up environment call outs * codegen metadata * feat(api): api update * feat(api): api update * fix(parsing): ignore empty metadata * fix(parsing): parse extra field types * release: 1.7.0 --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent e9350d2 commit 66bd1a2

32 files changed

+570
-53
lines changed

.github/workflows/ci.yml

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
timeout-minutes: 10
1818
name: lint
1919
runs-on: ${{ github.repository == 'stainless-sdks/arcade-engine-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
20+
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
2021
steps:
2122
- uses: actions/checkout@v4
2223

@@ -34,17 +35,31 @@ jobs:
3435
- name: Run lints
3536
run: ./scripts/lint
3637

37-
upload:
38-
if: github.repository == 'stainless-sdks/arcade-engine-python'
38+
build:
39+
if: github.repository == 'stainless-sdks/arcade-engine-python' && (github.event_name == 'push' || github.event.pull_request.head.repo.fork)
3940
timeout-minutes: 10
40-
name: upload
41+
name: build
4142
permissions:
4243
contents: read
4344
id-token: write
4445
runs-on: depot-ubuntu-24.04
4546
steps:
4647
- uses: actions/checkout@v4
4748

49+
- name: Install Rye
50+
run: |
51+
curl -sSf https://rye.astral.sh/get | bash
52+
echo "$HOME/.rye/shims" >> $GITHUB_PATH
53+
env:
54+
RYE_VERSION: '0.44.0'
55+
RYE_INSTALL_OPTION: '--yes'
56+
57+
- name: Install dependencies
58+
run: rye sync --all-features
59+
60+
- name: Run build
61+
run: rye build
62+
4863
- name: Get GitHub OIDC Token
4964
id: github-oidc
5065
uses: actions/github-script@v6
@@ -62,6 +77,7 @@ jobs:
6277
timeout-minutes: 10
6378
name: test
6479
runs-on: ${{ github.repository == 'stainless-sdks/arcade-engine-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
80+
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
6581
steps:
6682
- uses: actions/checkout@v4
6783

.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.6.0"
2+
".": "1.7.0"
33
}

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 28
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-51958c25f4f5f8d03d873744f15369a2ce2894f246f162aecac70d1b4d2b6008.yml
3-
openapi_spec_hash: 5f61d1691a2c83c8067bc837b0000237
4-
config_hash: 6eb072febff9e7aba9cdeb6901761b97
1+
configured_endpoints: 29
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-b75dffb978bef36324c145a749091760738e0279993d012612135ca0cbee18f5.yml
3+
openapi_spec_hash: b4beb7b5837d4f8074832f0f42bff1b4
4+
config_hash: 3ff9aba9377f3c19253a0f87243f40d9

CHANGELOG.md

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

3+
## 1.7.0 (2025-07-23)
4+
5+
Full Changelog: [v1.6.0...v1.7.0](https://github.com/ArcadeAI/arcade-py/compare/v1.6.0...v1.7.0)
6+
7+
### Features
8+
9+
* **api:** api update ([ad08b68](https://github.com/ArcadeAI/arcade-py/commit/ad08b68a90d83b6488f7214469757354131828a3))
10+
* **api:** api update ([ef473c5](https://github.com/ArcadeAI/arcade-py/commit/ef473c51ed732f25f731ae9e29ae5a62cf9e5928))
11+
* **api:** api update ([a3c10fb](https://github.com/ArcadeAI/arcade-py/commit/a3c10fb94599d7e0adc0420027d35f578b5f05e0))
12+
* **api:** api update ([9fc71d7](https://github.com/ArcadeAI/arcade-py/commit/9fc71d78c6bbf539e1de774373ed4b0fbe0c28ea))
13+
* clean up environment call outs ([47ab416](https://github.com/ArcadeAI/arcade-py/commit/47ab416eaa76e665c7ec9d3a67b239eccc67e5e8))
14+
* **client:** add support for aiohttp ([5066882](https://github.com/ArcadeAI/arcade-py/commit/50668821ffc127000372f06286f8eb74c02a7ab4))
15+
16+
17+
### Bug Fixes
18+
19+
* **ci:** correct conditional ([79d08e8](https://github.com/ArcadeAI/arcade-py/commit/79d08e82eb314f465c3cd4052af53c906e4cbfd6))
20+
* **ci:** release-doctor — report correct token name ([03cfe8a](https://github.com/ArcadeAI/arcade-py/commit/03cfe8aed6485613f5228053d313f8152f6262a3))
21+
* **client:** don't send Content-Type header on GET requests ([6a3e11c](https://github.com/ArcadeAI/arcade-py/commit/6a3e11c209c831ae351feccda0d0f19970f1f7de))
22+
* **parsing:** correctly handle nested discriminated unions ([7291d4f](https://github.com/ArcadeAI/arcade-py/commit/7291d4f6005e1c4ec9732ec56085031ce4b6a822))
23+
* **parsing:** ignore empty metadata ([52e08bc](https://github.com/ArcadeAI/arcade-py/commit/52e08bcfd9aa364dbe1708799846a92ed2b3707d))
24+
* **parsing:** parse extra field types ([034b5dc](https://github.com/ArcadeAI/arcade-py/commit/034b5dc3b14a34c445a75bfda65615b3eec6f936))
25+
26+
27+
### Chores
28+
29+
* **ci:** change upload type ([6e96a87](https://github.com/ArcadeAI/arcade-py/commit/6e96a8738a5d6d7b4e805be9c0cbc430b6dacf90))
30+
* **ci:** only run for pushes and fork pull requests ([f741da1](https://github.com/ArcadeAI/arcade-py/commit/f741da11f0a604bc7cf5e434578adca7a8f5e7a1))
31+
* **internal:** bump pinned h11 dep ([d63ac0c](https://github.com/ArcadeAI/arcade-py/commit/d63ac0c1b7cfa29d44d6f69c94d28a8099f715bb))
32+
* **package:** mark python 3.13 as supported ([7bfb29b](https://github.com/ArcadeAI/arcade-py/commit/7bfb29be939adebe113d045b2b2baa53ac1be36f))
33+
* **readme:** fix version rendering on pypi ([c3d919a](https://github.com/ArcadeAI/arcade-py/commit/c3d919ae31ff06e4dd3f5f792dcf137c5133452d))
34+
* **tests:** skip some failing tests on the latest python versions ([0f7a7e0](https://github.com/ArcadeAI/arcade-py/commit/0f7a7e0150f819d24f6295f98bc7102b74a4892c))
35+
36+
37+
### Documentation
38+
39+
* **client:** fix httpx.Timeout documentation reference ([d6a30cc](https://github.com/ArcadeAI/arcade-py/commit/d6a30cc3d80d0521cc4456d016e7a726ad1247e1))
40+
341
## 1.6.0 (2025-06-18)
442

543
Full Changelog: [v1.5.0...v1.6.0](https://github.com/ArcadeAI/arcade-py/compare/v1.5.0...v1.6.0)

README.md

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Arcade Python API library
22

3-
[![PyPI version](<https://img.shields.io/pypi/v/arcadepy.svg?label=pypi%20(stable)>)](https://pypi.org/project/arcadepy/)
3+
<!-- prettier-ignore -->
4+
[![PyPI version](https://img.shields.io/pypi/v/arcadepy.svg?label=pypi%20(stable))](https://pypi.org/project/arcadepy/)
45

56
The Arcade Python library provides convenient access to the Arcade REST API from any Python 3.8+
67
application. The library includes type definitions for all request params and response fields,
@@ -72,6 +73,41 @@ asyncio.run(main())
7273

7374
Functionality between the synchronous and asynchronous clients is otherwise identical.
7475

76+
### With aiohttp
77+
78+
By default, the async client uses `httpx` for HTTP requests. However, for improved concurrency performance you may also use `aiohttp` as the HTTP backend.
79+
80+
You can enable this by installing `aiohttp`:
81+
82+
```sh
83+
# install from PyPI
84+
pip install arcadepy[aiohttp]
85+
```
86+
87+
Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`:
88+
89+
```python
90+
import asyncio
91+
from arcadepy import DefaultAioHttpClient
92+
from arcadepy import AsyncArcade
93+
94+
95+
async def main() -> None:
96+
async with AsyncArcade(
97+
api_key="My API Key",
98+
http_client=DefaultAioHttpClient(),
99+
) as client:
100+
execute_tool_response = await client.tools.execute(
101+
tool_name="Google.ListEmails",
102+
input={"n_emails": 10},
103+
user_id="[email protected]",
104+
)
105+
print(execute_tool_response.id)
106+
107+
108+
asyncio.run(main())
109+
```
110+
75111
## Using types
76112

77113
Nested request parameters are [TypedDicts](https://docs.python.org/3/library/typing.html#typing.TypedDict). Responses are [Pydantic models](https://docs.pydantic.dev) which also provide helper methods for things like:
@@ -175,7 +211,7 @@ client.with_options(max_retries=5).chat.completions.create(
175211
### Timeouts
176212

177213
By default requests time out after 1 minute. You can configure this with a `timeout` option,
178-
which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/#fine-tuning-the-configuration) object:
214+
which accepts a float or an [`httpx.Timeout`](https://www.python-httpx.org/advanced/timeouts/#fine-tuning-the-configuration) object:
179215

180216
```python
181217
from arcadepy import Arcade

api.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,13 @@ Methods:
5858
Types:
5959

6060
```python
61-
from arcadepy.types import AuthRequest
61+
from arcadepy.types import AuthRequest, ConfirmUserRequest, ConfirmUserResponse
6262
```
6363

6464
Methods:
6565

6666
- <code title="post /v1/auth/authorize">client.auth.<a href="./src/arcadepy/resources/auth.py">authorize</a>(\*\*<a href="src/arcadepy/types/auth_authorize_params.py">params</a>) -> <a href="./src/arcadepy/types/shared/auth_authorization_response.py">AuthorizationResponse</a></code>
67+
- <code title="post /v1/auth/confirm_user">client.auth.<a href="./src/arcadepy/resources/auth.py">confirm_user</a>(\*\*<a href="src/arcadepy/types/auth_confirm_user_params.py">params</a>) -> <a href="./src/arcadepy/types/confirm_user_response.py">ConfirmUserResponse</a></code>
6768
- <code title="get /v1/auth/status">client.auth.<a href="./src/arcadepy/resources/auth.py">status</a>(\*\*<a href="src/arcadepy/types/auth_status_params.py">params</a>) -> <a href="./src/arcadepy/types/shared/auth_authorization_response.py">AuthorizationResponse</a></code>
6869

6970
# Health

bin/check-release-environment

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
errors=()
44

55
if [ -z "${PYPI_TOKEN}" ]; then
6-
errors+=("The ARCADE_PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.")
6+
errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.")
77
fi
88

99
lenErrors=${#errors[@]}

pyproject.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "arcadepy"
3-
version = "1.6.0"
3+
version = "1.7.0"
44
description = "The official Python library for the Arcade API"
55
dynamic = ["readme"]
66
license = "MIT"
@@ -24,6 +24,7 @@ classifiers = [
2424
"Programming Language :: Python :: 3.10",
2525
"Programming Language :: Python :: 3.11",
2626
"Programming Language :: Python :: 3.12",
27+
"Programming Language :: Python :: 3.13",
2728
"Operating System :: OS Independent",
2829
"Operating System :: POSIX",
2930
"Operating System :: MacOS",
@@ -37,6 +38,8 @@ classifiers = [
3738
Homepage = "https://github.com/ArcadeAI/arcade-py"
3839
Repository = "https://github.com/ArcadeAI/arcade-py"
3940

41+
[project.optional-dependencies]
42+
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.8"]
4043

4144
[tool.rye]
4245
managed = true

requirements-dev.lock

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,24 @@
1010
# universal: false
1111

1212
-e file:.
13+
aiohappyeyeballs==2.6.1
14+
# via aiohttp
15+
aiohttp==3.12.8
16+
# via arcadepy
17+
# via httpx-aiohttp
18+
aiosignal==1.3.2
19+
# via aiohttp
1320
annotated-types==0.6.0
1421
# via pydantic
1522
anyio==4.4.0
1623
# via arcadepy
1724
# via httpx
1825
argcomplete==3.1.2
1926
# via nox
27+
async-timeout==5.0.1
28+
# via aiohttp
29+
attrs==25.3.0
30+
# via aiohttp
2031
certifi==2023.7.22
2132
# via httpcore
2233
# via httpx
@@ -34,23 +45,33 @@ execnet==2.1.1
3445
# via pytest-xdist
3546
filelock==3.12.4
3647
# via virtualenv
37-
h11==0.14.0
48+
frozenlist==1.6.2
49+
# via aiohttp
50+
# via aiosignal
51+
h11==0.16.0
3852
# via httpcore
39-
httpcore==1.0.2
53+
httpcore==1.0.9
4054
# via httpx
4155
httpx==0.28.1
4256
# via arcadepy
57+
# via httpx-aiohttp
4358
# via respx
59+
httpx-aiohttp==0.1.8
60+
# via arcadepy
4461
idna==3.4
4562
# via anyio
4663
# via httpx
64+
# via yarl
4765
importlib-metadata==7.0.0
4866
iniconfig==2.0.0
4967
# via pytest
5068
markdown-it-py==3.0.0
5169
# via rich
5270
mdurl==0.1.2
5371
# via markdown-it-py
72+
multidict==6.4.4
73+
# via aiohttp
74+
# via yarl
5475
mypy==1.14.1
5576
mypy-extensions==1.0.0
5677
# via mypy
@@ -65,6 +86,9 @@ platformdirs==3.11.0
6586
# via virtualenv
6687
pluggy==1.5.0
6788
# via pytest
89+
propcache==0.3.1
90+
# via aiohttp
91+
# via yarl
6892
pydantic==2.10.3
6993
# via arcadepy
7094
pydantic-core==2.27.1
@@ -98,11 +122,14 @@ tomli==2.0.2
98122
typing-extensions==4.12.2
99123
# via anyio
100124
# via arcadepy
125+
# via multidict
101126
# via mypy
102127
# via pydantic
103128
# via pydantic-core
104129
# via pyright
105130
virtualenv==20.24.5
106131
# via nox
132+
yarl==1.20.0
133+
# via aiohttp
107134
zipp==3.17.0
108135
# via importlib-metadata

requirements.lock

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,51 @@
1010
# universal: false
1111

1212
-e file:.
13+
aiohappyeyeballs==2.6.1
14+
# via aiohttp
15+
aiohttp==3.12.8
16+
# via arcadepy
17+
# via httpx-aiohttp
18+
aiosignal==1.3.2
19+
# via aiohttp
1320
annotated-types==0.6.0
1421
# via pydantic
1522
anyio==4.4.0
1623
# via arcadepy
1724
# via httpx
25+
async-timeout==5.0.1
26+
# via aiohttp
27+
attrs==25.3.0
28+
# via aiohttp
1829
certifi==2023.7.22
1930
# via httpcore
2031
# via httpx
2132
distro==1.8.0
2233
# via arcadepy
2334
exceptiongroup==1.2.2
2435
# via anyio
25-
h11==0.14.0
36+
frozenlist==1.6.2
37+
# via aiohttp
38+
# via aiosignal
39+
h11==0.16.0
2640
# via httpcore
27-
httpcore==1.0.2
41+
httpcore==1.0.9
2842
# via httpx
2943
httpx==0.28.1
3044
# via arcadepy
45+
# via httpx-aiohttp
46+
httpx-aiohttp==0.1.8
47+
# via arcadepy
3148
idna==3.4
3249
# via anyio
3350
# via httpx
51+
# via yarl
52+
multidict==6.4.4
53+
# via aiohttp
54+
# via yarl
55+
propcache==0.3.1
56+
# via aiohttp
57+
# via yarl
3458
pydantic==2.10.3
3559
# via arcadepy
3660
pydantic-core==2.27.1
@@ -41,5 +65,8 @@ sniffio==1.3.0
4165
typing-extensions==4.12.2
4266
# via anyio
4367
# via arcadepy
68+
# via multidict
4469
# via pydantic
4570
# via pydantic-core
71+
yarl==1.20.0
72+
# via aiohttp

0 commit comments

Comments
 (0)