Skip to content

Commit fcda230

Browse files
release: 1.3.0 (#115)
* chore(internal): properly set __pydantic_private__ (#114) * feat(api): api update (#116) * feat(api): api update (#117) * feat(api): api update (#118) * codegen metadata * feat(api): api update (#119) * docs: update URLs from stainlessapi.com to stainless.com (#120) More details at https://www.stainless.com/changelog/stainless-com * chore(docs): update client docstring (#121) * codegen metadata * chore(internal): remove unused http client options forwarding (#122) * codegen metadata * codegen metadata * feat(api): api update (#123) * release: 1.3.0 --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com>
1 parent 99771d0 commit fcda230

21 files changed

+1541
-107
lines changed

.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.2.1"
2+
".": "1.3.0"
33
}

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
configured_endpoints: 12
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-32b8e3b9f33faf15b95ab7ece843b8d2b42af9f11b7afcccb244ef4600f72b2b.yml
1+
configured_endpoints: 19
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/arcade-ai%2Farcade-engine-633d84454335d704b205b7d730bcda184c858f96c36cf27b5ecf786a5bff7f42.yml

CHANGELOG.md

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

3+
## 1.3.0 (2025-03-10)
4+
5+
Full Changelog: [v1.2.1...v1.3.0](https://github.com/ArcadeAI/arcade-py/compare/v1.2.1...v1.3.0)
6+
7+
### Features
8+
9+
* **api:** api update ([#116](https://github.com/ArcadeAI/arcade-py/issues/116)) ([398641f](https://github.com/ArcadeAI/arcade-py/commit/398641f2805b34f760ede51ac16e9eb3bebf7a23))
10+
* **api:** api update ([#117](https://github.com/ArcadeAI/arcade-py/issues/117)) ([6e333f1](https://github.com/ArcadeAI/arcade-py/commit/6e333f122a4718ac9e909258774b509ef2eea1f3))
11+
* **api:** api update ([#118](https://github.com/ArcadeAI/arcade-py/issues/118)) ([83cf396](https://github.com/ArcadeAI/arcade-py/commit/83cf3964ed5f25447e63a2e3d02e48bf5cb6ff9f))
12+
* **api:** api update ([#119](https://github.com/ArcadeAI/arcade-py/issues/119)) ([e618af4](https://github.com/ArcadeAI/arcade-py/commit/e618af4a69d6a05dcf7622d722b9440e839b86f4))
13+
* **api:** api update ([#123](https://github.com/ArcadeAI/arcade-py/issues/123)) ([c145e1e](https://github.com/ArcadeAI/arcade-py/commit/c145e1e78a32f83a6a5bc4bb849cc7c716632972))
14+
15+
16+
### Chores
17+
18+
* **docs:** update client docstring ([#121](https://github.com/ArcadeAI/arcade-py/issues/121)) ([a30a866](https://github.com/ArcadeAI/arcade-py/commit/a30a866d1bd1148670cba44558abf07c7a2ac70b))
19+
* **internal:** properly set __pydantic_private__ ([#114](https://github.com/ArcadeAI/arcade-py/issues/114)) ([558c1bb](https://github.com/ArcadeAI/arcade-py/commit/558c1bb39b9d0aa30f267217642f1a2da6a6d092))
20+
* **internal:** remove unused http client options forwarding ([#122](https://github.com/ArcadeAI/arcade-py/issues/122)) ([6f0d183](https://github.com/ArcadeAI/arcade-py/commit/6f0d183deaf26b9176ba125342c40eb19a7783ae))
21+
22+
23+
### Documentation
24+
25+
* update URLs from stainlessapi.com to stainless.com ([#120](https://github.com/ArcadeAI/arcade-py/issues/120)) ([df64b6f](https://github.com/ArcadeAI/arcade-py/commit/df64b6f7d7c6c4c76484dec5890f997701bd6056))
26+
327
## 1.2.1 (2025-02-22)
428

529
Full Changelog: [v1.2.0...v1.2.1](https://github.com/ArcadeAI/arcade-py/compare/v1.2.0...v1.2.1)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ The Arcade Python library provides convenient access to the Arcade REST API from
66
application. The library includes type definitions for all request params and response fields,
77
and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).
88

9-
It is generated with [Stainless](https://www.stainlessapi.com/).
9+
It is generated with [Stainless](https://www.stainless.com/).
1010

1111
## Documentation
1212

SECURITY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
## Reporting Security Issues
44

5-
This SDK is generated by [Stainless Software Inc](http://stainlessapi.com). Stainless takes security seriously, and encourages you to report any security vulnerability promptly so that appropriate action can be taken.
5+
This SDK is generated by [Stainless Software Inc](http://stainless.com). Stainless takes security seriously, and encourages you to report any security vulnerability promptly so that appropriate action can be taken.
66

7-
To report a security issue, please contact the Stainless team at security@stainlessapi.com.
7+
To report a security issue, please contact the Stainless team at security@stainless.com.
88

99
## Responsible Disclosure
1010

api.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,27 @@ Methods:
9191

9292
- <code title="get /v1/formatted_tools">client.tools.formatted.<a href="./src/arcadepy/resources/tools/formatted.py">list</a>(\*\*<a href="src/arcadepy/types/tools/formatted_list_params.py">params</a>) -> <a href="./src/arcadepy/types/tools/formatted_list_response.py">SyncOffsetPage[object]</a></code>
9393
- <code title="get /v1/formatted_tools/{name}">client.tools.formatted.<a href="./src/arcadepy/resources/tools/formatted.py">get</a>(name, \*\*<a href="src/arcadepy/types/tools/formatted_get_params.py">params</a>) -> <a href="./src/arcadepy/types/tools/formatted_get_response.py">object</a></code>
94+
95+
# Workers
96+
97+
Types:
98+
99+
```python
100+
from arcadepy.types import (
101+
CreateWorkerRequest,
102+
UpdateWorkerRequest,
103+
WorkerHealthResponse,
104+
WorkerResponse,
105+
WorkerToolsResponse,
106+
)
107+
```
108+
109+
Methods:
110+
111+
- <code title="post /v1/workers">client.workers.<a href="./src/arcadepy/resources/workers.py">create</a>(\*\*<a href="src/arcadepy/types/worker_create_params.py">params</a>) -> <a href="./src/arcadepy/types/worker_response.py">WorkerResponse</a></code>
112+
- <code title="patch /v1/workers/{id}">client.workers.<a href="./src/arcadepy/resources/workers.py">update</a>(id, \*\*<a href="src/arcadepy/types/worker_update_params.py">params</a>) -> <a href="./src/arcadepy/types/worker_response.py">WorkerResponse</a></code>
113+
- <code title="get /v1/workers">client.workers.<a href="./src/arcadepy/resources/workers.py">list</a>(\*\*<a href="src/arcadepy/types/worker_list_params.py">params</a>) -> <a href="./src/arcadepy/types/worker_response.py">SyncOffsetPage[WorkerResponse]</a></code>
114+
- <code title="delete /v1/workers/{id}">client.workers.<a href="./src/arcadepy/resources/workers.py">delete</a>(id) -> None</code>
115+
- <code title="get /v1/workers/{id}">client.workers.<a href="./src/arcadepy/resources/workers.py">get</a>(id) -> <a href="./src/arcadepy/types/worker_response.py">WorkerResponse</a></code>
116+
- <code title="get /v1/workers/{id}/health">client.workers.<a href="./src/arcadepy/resources/workers.py">health</a>(id) -> <a href="./src/arcadepy/types/worker_health_response.py">WorkerHealthResponse</a></code>
117+
- <code title="get /v1/workers/{id}/tools">client.workers.<a href="./src/arcadepy/resources/workers.py">tools</a>(id) -> <a href="./src/arcadepy/types/worker_tools_response.py">WorkerToolsResponse</a></code>

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "arcadepy"
3-
version = "1.2.1"
3+
version = "1.3.0"
44
description = "The official Python library for the Arcade API"
55
dynamic = ["readme"]
66
license = "MIT"

src/arcadepy/_base_client.py

Lines changed: 8 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import inspect
1010
import logging
1111
import platform
12-
import warnings
1312
import email.utils
1413
from types import TracebackType
1514
from random import random
@@ -36,7 +35,7 @@
3635
import httpx
3736
import distro
3837
import pydantic
39-
from httpx import URL, Limits
38+
from httpx import URL
4039
from pydantic import PrivateAttr
4140

4241
from . import _exceptions
@@ -51,19 +50,16 @@
5150
Timeout,
5251
NotGiven,
5352
ResponseT,
54-
Transport,
5553
AnyMapping,
5654
PostParser,
57-
ProxiesTypes,
5855
RequestFiles,
5956
HttpxSendArgs,
60-
AsyncTransport,
6157
RequestOptions,
6258
HttpxRequestFiles,
6359
ModelBuilderProtocol,
6460
)
6561
from ._utils import is_dict, is_list, asyncify, is_given, lru_cache, is_mapping
66-
from ._compat import model_copy, model_dump
62+
from ._compat import PYDANTIC_V2, model_copy, model_dump
6763
from ._models import GenericModel, FinalRequestOptions, validate_type, construct_type
6864
from ._response import (
6965
APIResponse,
@@ -207,6 +203,9 @@ def _set_private_attributes(
207203
model: Type[_T],
208204
options: FinalRequestOptions,
209205
) -> None:
206+
if PYDANTIC_V2 and getattr(self, "__pydantic_private__", None) is None:
207+
self.__pydantic_private__ = {}
208+
210209
self._model = model
211210
self._client = client
212211
self._options = options
@@ -292,6 +291,9 @@ def _set_private_attributes(
292291
client: AsyncAPIClient,
293292
options: FinalRequestOptions,
294293
) -> None:
294+
if PYDANTIC_V2 and getattr(self, "__pydantic_private__", None) is None:
295+
self.__pydantic_private__ = {}
296+
295297
self._model = model
296298
self._client = client
297299
self._options = options
@@ -331,9 +333,6 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
331333
_base_url: URL
332334
max_retries: int
333335
timeout: Union[float, Timeout, None]
334-
_limits: httpx.Limits
335-
_proxies: ProxiesTypes | None
336-
_transport: Transport | AsyncTransport | None
337336
_strict_response_validation: bool
338337
_idempotency_header: str | None
339338
_default_stream_cls: type[_DefaultStreamT] | None = None
@@ -346,19 +345,13 @@ def __init__(
346345
_strict_response_validation: bool,
347346
max_retries: int = DEFAULT_MAX_RETRIES,
348347
timeout: float | Timeout | None = DEFAULT_TIMEOUT,
349-
limits: httpx.Limits,
350-
transport: Transport | AsyncTransport | None,
351-
proxies: ProxiesTypes | None,
352348
custom_headers: Mapping[str, str] | None = None,
353349
custom_query: Mapping[str, object] | None = None,
354350
) -> None:
355351
self._version = version
356352
self._base_url = self._enforce_trailing_slash(URL(base_url))
357353
self.max_retries = max_retries
358354
self.timeout = timeout
359-
self._limits = limits
360-
self._proxies = proxies
361-
self._transport = transport
362355
self._custom_headers = custom_headers or {}
363356
self._custom_query = custom_query or {}
364357
self._strict_response_validation = _strict_response_validation
@@ -794,46 +787,11 @@ def __init__(
794787
base_url: str | URL,
795788
max_retries: int = DEFAULT_MAX_RETRIES,
796789
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
797-
transport: Transport | None = None,
798-
proxies: ProxiesTypes | None = None,
799-
limits: Limits | None = None,
800790
http_client: httpx.Client | None = None,
801791
custom_headers: Mapping[str, str] | None = None,
802792
custom_query: Mapping[str, object] | None = None,
803793
_strict_response_validation: bool,
804794
) -> None:
805-
kwargs: dict[str, Any] = {}
806-
if limits is not None:
807-
warnings.warn(
808-
"The `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead",
809-
category=DeprecationWarning,
810-
stacklevel=3,
811-
)
812-
if http_client is not None:
813-
raise ValueError("The `http_client` argument is mutually exclusive with `connection_pool_limits`")
814-
else:
815-
limits = DEFAULT_CONNECTION_LIMITS
816-
817-
if transport is not None:
818-
kwargs["transport"] = transport
819-
warnings.warn(
820-
"The `transport` argument is deprecated. The `http_client` argument should be passed instead",
821-
category=DeprecationWarning,
822-
stacklevel=3,
823-
)
824-
if http_client is not None:
825-
raise ValueError("The `http_client` argument is mutually exclusive with `transport`")
826-
827-
if proxies is not None:
828-
kwargs["proxies"] = proxies
829-
warnings.warn(
830-
"The `proxies` argument is deprecated. The `http_client` argument should be passed instead",
831-
category=DeprecationWarning,
832-
stacklevel=3,
833-
)
834-
if http_client is not None:
835-
raise ValueError("The `http_client` argument is mutually exclusive with `proxies`")
836-
837795
if not is_given(timeout):
838796
# if the user passed in a custom http client with a non-default
839797
# timeout set then we use that timeout.
@@ -854,12 +812,9 @@ def __init__(
854812

855813
super().__init__(
856814
version=version,
857-
limits=limits,
858815
# cast to a valid type because mypy doesn't understand our type narrowing
859816
timeout=cast(Timeout, timeout),
860-
proxies=proxies,
861817
base_url=base_url,
862-
transport=transport,
863818
max_retries=max_retries,
864819
custom_query=custom_query,
865820
custom_headers=custom_headers,
@@ -869,9 +824,6 @@ def __init__(
869824
base_url=base_url,
870825
# cast to a valid type because mypy doesn't understand our type narrowing
871826
timeout=cast(Timeout, timeout),
872-
limits=limits,
873-
follow_redirects=True,
874-
**kwargs, # type: ignore
875827
)
876828

877829
def is_closed(self) -> bool:
@@ -1366,45 +1318,10 @@ def __init__(
13661318
_strict_response_validation: bool,
13671319
max_retries: int = DEFAULT_MAX_RETRIES,
13681320
timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
1369-
transport: AsyncTransport | None = None,
1370-
proxies: ProxiesTypes | None = None,
1371-
limits: Limits | None = None,
13721321
http_client: httpx.AsyncClient | None = None,
13731322
custom_headers: Mapping[str, str] | None = None,
13741323
custom_query: Mapping[str, object] | None = None,
13751324
) -> None:
1376-
kwargs: dict[str, Any] = {}
1377-
if limits is not None:
1378-
warnings.warn(
1379-
"The `connection_pool_limits` argument is deprecated. The `http_client` argument should be passed instead",
1380-
category=DeprecationWarning,
1381-
stacklevel=3,
1382-
)
1383-
if http_client is not None:
1384-
raise ValueError("The `http_client` argument is mutually exclusive with `connection_pool_limits`")
1385-
else:
1386-
limits = DEFAULT_CONNECTION_LIMITS
1387-
1388-
if transport is not None:
1389-
kwargs["transport"] = transport
1390-
warnings.warn(
1391-
"The `transport` argument is deprecated. The `http_client` argument should be passed instead",
1392-
category=DeprecationWarning,
1393-
stacklevel=3,
1394-
)
1395-
if http_client is not None:
1396-
raise ValueError("The `http_client` argument is mutually exclusive with `transport`")
1397-
1398-
if proxies is not None:
1399-
kwargs["proxies"] = proxies
1400-
warnings.warn(
1401-
"The `proxies` argument is deprecated. The `http_client` argument should be passed instead",
1402-
category=DeprecationWarning,
1403-
stacklevel=3,
1404-
)
1405-
if http_client is not None:
1406-
raise ValueError("The `http_client` argument is mutually exclusive with `proxies`")
1407-
14081325
if not is_given(timeout):
14091326
# if the user passed in a custom http client with a non-default
14101327
# timeout set then we use that timeout.
@@ -1426,11 +1343,8 @@ def __init__(
14261343
super().__init__(
14271344
version=version,
14281345
base_url=base_url,
1429-
limits=limits,
14301346
# cast to a valid type because mypy doesn't understand our type narrowing
14311347
timeout=cast(Timeout, timeout),
1432-
proxies=proxies,
1433-
transport=transport,
14341348
max_retries=max_retries,
14351349
custom_query=custom_query,
14361350
custom_headers=custom_headers,
@@ -1440,9 +1354,6 @@ def __init__(
14401354
base_url=base_url,
14411355
# cast to a valid type because mypy doesn't understand our type narrowing
14421356
timeout=cast(Timeout, timeout),
1443-
limits=limits,
1444-
follow_redirects=True,
1445-
**kwargs, # type: ignore
14461357
)
14471358

14481359
def is_closed(self) -> bool:

0 commit comments

Comments
 (0)