Skip to content

Commit c06841b

Browse files
authored
Merge pull request #605 from runloopai/release-please--branches--main--changes--next
release: 0.46.0
2 parents 105c4ca + b07e239 commit c06841b

14 files changed

Lines changed: 68 additions & 20 deletions

File tree

.github/workflows/ci.yml

Lines changed: 3 additions & 1 deletion
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/runloop-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

@@ -35,7 +36,7 @@ jobs:
3536
run: ./scripts/lint
3637

3738
upload:
38-
if: github.repository == 'stainless-sdks/runloop-python'
39+
if: github.repository == 'stainless-sdks/runloop-python' && (github.event_name == 'push' || github.event.pull_request.head.repo.fork)
3940
timeout-minutes: 10
4041
name: upload
4142
permissions:
@@ -62,6 +63,7 @@ jobs:
6263
timeout-minutes: 10
6364
name: test
6465
runs-on: ${{ github.repository == 'stainless-sdks/runloop-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
66+
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
6567
steps:
6668
- uses: actions/checkout@v4
6769

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.45.0"
2+
".": "0.46.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: 92
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-1d4b018cbfb409baf83725737f00789a9ddbbdbdbe12db1ac7a1fd2cf9c453f0.yml
3-
openapi_spec_hash: 1c533f386f6d3d3802d353cc6f1df547
4-
config_hash: 33b544375e4a932cbb2890f79a9aa040
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-75c0dc94dd629772c98b3e6f763d8b3a1bdb732aa3eb92d49a59fb446fb2410d.yml
3+
openapi_spec_hash: 12286e648ea1156bfa23020ed0c7598b
4+
config_hash: 5a04741d17a98f68dc474a29c516d3f8

CHANGELOG.md

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

3+
## 0.46.0 (2025-07-01)
4+
5+
Full Changelog: [v0.45.0...v0.46.0](https://github.com/runloopai/api-client-python/compare/v0.45.0...v0.46.0)
6+
7+
### Features
8+
9+
* **api:** api update ([f8b3493](https://github.com/runloopai/api-client-python/commit/f8b3493a584b10a91fe1e7d543fe4c0de406cf7d))
10+
11+
12+
### Bug Fixes
13+
14+
* **ci:** correct conditional ([2005e4f](https://github.com/runloopai/api-client-python/commit/2005e4ff9ca9bcb569ef4798bd490e036ad1afd5))
15+
* **ci:** release-doctor — report correct token name ([41a600a](https://github.com/runloopai/api-client-python/commit/41a600aeceb84b5c32a7d771acc6acd1cca97b8e))
16+
17+
18+
### Chores
19+
20+
* **ci:** only run for pushes and fork pull requests ([c914e94](https://github.com/runloopai/api-client-python/commit/c914e94ea65e9d4180810cc3b816f4ab4a2a8e22))
21+
322
## 0.45.0 (2025-06-24)
423

524
Full Changelog: [v0.44.0...v0.45.0](https://github.com/runloopai/api-client-python/compare/v0.44.0...v0.45.0)

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ Error codes are as follows:
245245

246246
### Retries
247247

248-
Certain errors are automatically retried 0 times by default, with a short exponential backoff.
248+
Certain errors are automatically retried 3 times by default, with a short exponential backoff.
249249
Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
250250
429 Rate Limit, and >=500 Internal errors are all retried by default.
251251

@@ -266,15 +266,15 @@ client.with_options(max_retries=5).devboxes.create()
266266

267267
### Timeouts
268268

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

272272
```python
273273
from runloop_api_client import Runloop
274274

275275
# Configure the default for all requests:
276276
client = Runloop(
277-
# 20 seconds (default is 1 minute)
277+
# 20 seconds (default is 30 seconds)
278278
timeout=20.0,
279279
)
280280

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 RUNLOOP_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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "runloop_api_client"
3-
version = "0.45.0"
3+
version = "0.46.0"
44
description = "The official Python library for the runloop API"
55
dynamic = ["readme"]
66
license = "MIT"

src/runloop_api_client/_constants.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
RAW_RESPONSE_HEADER = "X-Stainless-Raw-Response"
66
OVERRIDE_CAST_TO_HEADER = "____stainless_override_cast_to"
77

8-
# default timeout is 1 minute
9-
DEFAULT_TIMEOUT = httpx.Timeout(timeout=60, connect=5.0)
10-
DEFAULT_MAX_RETRIES = 0
8+
# default timeout is 30 seconds
9+
DEFAULT_TIMEOUT = httpx.Timeout(timeout=30, connect=5.0)
10+
DEFAULT_MAX_RETRIES = 3
1111
DEFAULT_CONNECTION_LIMITS = httpx.Limits(max_connections=100, max_keepalive_connections=20)
1212

1313
INITIAL_RETRY_DELAY = 1.0
14-
MAX_RETRY_DELAY = 10.0
14+
MAX_RETRY_DELAY = 15.0

src/runloop_api_client/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "runloop_api_client"
4-
__version__ = "0.45.0" # x-release-please-version
4+
__version__ = "0.46.0" # x-release-please-version

src/runloop_api_client/resources/devboxes/devboxes.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,6 +691,8 @@ def download_file(
691691
"""
692692
if not id:
693693
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
694+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
695+
timeout = 600
694696
extra_headers = {"Accept": "application/octet-stream", **(extra_headers or {})}
695697
return self._post(
696698
f"/v1/devboxes/{id}/download_file",
@@ -962,6 +964,8 @@ def read_file_contents(
962964
"""
963965
if not id:
964966
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
967+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
968+
timeout = 600
965969
extra_headers = {"Accept": "text/plain", **(extra_headers or {})}
966970
return self._post(
967971
f"/v1/devboxes/{id}/read_file_contents",
@@ -1297,6 +1301,8 @@ def upload_file(
12971301
"""
12981302
if not id:
12991303
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
1304+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
1305+
timeout = 600
13001306
body = deepcopy_minimal(
13011307
{
13021308
"path": path,
@@ -1359,6 +1365,8 @@ def write_file_contents(
13591365
"""
13601366
if not id:
13611367
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
1368+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
1369+
timeout = 600
13621370
return self._post(
13631371
f"/v1/devboxes/{id}/write_file_contents",
13641372
body=maybe_transform(
@@ -1954,6 +1962,8 @@ async def download_file(
19541962
"""
19551963
if not id:
19561964
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
1965+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
1966+
timeout = 600
19571967
extra_headers = {"Accept": "application/octet-stream", **(extra_headers or {})}
19581968
return await self._post(
19591969
f"/v1/devboxes/{id}/download_file",
@@ -2225,6 +2235,8 @@ async def read_file_contents(
22252235
"""
22262236
if not id:
22272237
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
2238+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
2239+
timeout = 600
22282240
extra_headers = {"Accept": "text/plain", **(extra_headers or {})}
22292241
return await self._post(
22302242
f"/v1/devboxes/{id}/read_file_contents",
@@ -2560,6 +2572,8 @@ async def upload_file(
25602572
"""
25612573
if not id:
25622574
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
2575+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
2576+
timeout = 600
25632577
body = deepcopy_minimal(
25642578
{
25652579
"path": path,
@@ -2622,6 +2636,8 @@ async def write_file_contents(
26222636
"""
26232637
if not id:
26242638
raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
2639+
if not is_given(timeout) and self._client.timeout == DEFAULT_TIMEOUT:
2640+
timeout = 600
26252641
return await self._post(
26262642
f"/v1/devboxes/{id}/write_file_contents",
26272643
body=await async_maybe_transform(

0 commit comments

Comments
 (0)