From 03ea4d49d24f4eaa3d8a199bf18ca551f2c1ac54 Mon Sep 17 00:00:00 2001 From: Tony Deng Date: Tue, 9 Sep 2025 17:40:35 -0700 Subject: [PATCH 1/3] default offset='0', request_headers for output --- .../resources/devboxes/executions.py | 60 ++++++++++++++----- 1 file changed, 44 insertions(+), 16 deletions(-) diff --git a/src/runloop_api_client/resources/devboxes/executions.py b/src/runloop_api_client/resources/devboxes/executions.py index 27cd21c79..0b97a3b19 100755 --- a/src/runloop_api_client/resources/devboxes/executions.py +++ b/src/runloop_api_client/resources/devboxes/executions.py @@ -335,7 +335,7 @@ def stream_stderr_updates( execution_id: str, *, devbox_id: str, - offset: str | NotGiven = NOT_GIVEN, + offset: str | NotGiven = '0', # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -361,11 +361,18 @@ def stream_stderr_updates( raise ValueError(f"Expected a non-empty value for `devbox_id` but received {devbox_id!r}") if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") - if extra_headers and extra_headers.get(RAW_RESPONSE_HEADER): + + default_headers = {'Accept': 'text/event-stream'} + if extra_headers: + merged_headers = {**default_headers, **extra_headers} + else: + merged_headers = default_headers + + if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): return self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stderr_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, @@ -383,7 +390,7 @@ def create_stream(last_offset: str | None) -> Stream[ExecutionUpdateChunk]: return self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stderr_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, @@ -415,7 +422,7 @@ def stream_stdout_updates( execution_id: str, *, devbox_id: str, - offset: str | NotGiven = NOT_GIVEN, + offset: str | NotGiven = '0', # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -441,11 +448,18 @@ def stream_stdout_updates( raise ValueError(f"Expected a non-empty value for `devbox_id` but received {devbox_id!r}") if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") - if extra_headers and extra_headers.get(RAW_RESPONSE_HEADER): + + default_headers = {'Accept': 'text/event-stream'} + if extra_headers: + merged_headers = {**default_headers, **extra_headers} + else: + merged_headers = default_headers + + if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): return self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stdout_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, @@ -463,7 +477,7 @@ def create_stream(last_offset: str | None) -> Stream[ExecutionUpdateChunk]: return self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stdout_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, @@ -779,7 +793,7 @@ async def stream_stderr_updates( execution_id: str, *, devbox_id: str, - offset: str | NotGiven = NOT_GIVEN, + offset: str | NotGiven = '0', # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -805,11 +819,18 @@ async def stream_stderr_updates( raise ValueError(f"Expected a non-empty value for `devbox_id` but received {devbox_id!r}") if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") - if extra_headers and extra_headers.get(RAW_RESPONSE_HEADER): + + default_headers = {'Accept': 'text/event-stream'} + if extra_headers: + merged_headers = {**default_headers, **extra_headers} + else: + merged_headers = default_headers + + if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): return await self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stderr_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, @@ -827,7 +848,7 @@ async def create_stream(last_offset: str | None) -> AsyncStream[ExecutionUpdateC return await self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stderr_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, @@ -859,7 +880,7 @@ async def stream_stdout_updates( execution_id: str, *, devbox_id: str, - offset: str | NotGiven = NOT_GIVEN, + offset: str | NotGiven = '0', # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -885,12 +906,19 @@ async def stream_stdout_updates( raise ValueError(f"Expected a non-empty value for `devbox_id` but received {devbox_id!r}") if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") + + default_headers = {'Accept': 'text/event-stream'} + if extra_headers: + merged_headers = {**default_headers, **extra_headers} + else: + merged_headers = default_headers + # If caller requested a raw or streaming response wrapper, return the underlying stream as-is - if extra_headers and extra_headers.get(RAW_RESPONSE_HEADER): + if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): return await self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stdout_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, @@ -908,7 +936,7 @@ async def create_stream(last_offset: str | None) -> AsyncStream[ExecutionUpdateC return await self._get( f"/v1/devboxes/{devbox_id}/executions/{execution_id}/stream_stdout_updates", options=make_request_options( - extra_headers=extra_headers, + extra_headers=merged_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout, From 69e7a683f877c9a0330f5382560813dd679f6f86 Mon Sep 17 00:00:00 2001 From: Tony Deng Date: Tue, 9 Sep 2025 17:43:16 -0700 Subject: [PATCH 2/3] cleaner ternary --- .../resources/devboxes/executions.py | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/runloop_api_client/resources/devboxes/executions.py b/src/runloop_api_client/resources/devboxes/executions.py index 0b97a3b19..80fdaf885 100755 --- a/src/runloop_api_client/resources/devboxes/executions.py +++ b/src/runloop_api_client/resources/devboxes/executions.py @@ -363,10 +363,7 @@ def stream_stderr_updates( raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") default_headers = {'Accept': 'text/event-stream'} - if extra_headers: - merged_headers = {**default_headers, **extra_headers} - else: - merged_headers = default_headers + merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): return self._get( @@ -450,10 +447,7 @@ def stream_stdout_updates( raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") default_headers = {'Accept': 'text/event-stream'} - if extra_headers: - merged_headers = {**default_headers, **extra_headers} - else: - merged_headers = default_headers + merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): return self._get( @@ -821,10 +815,7 @@ async def stream_stderr_updates( raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") default_headers = {'Accept': 'text/event-stream'} - if extra_headers: - merged_headers = {**default_headers, **extra_headers} - else: - merged_headers = default_headers + merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): return await self._get( @@ -908,10 +899,8 @@ async def stream_stdout_updates( raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") default_headers = {'Accept': 'text/event-stream'} - if extra_headers: - merged_headers = {**default_headers, **extra_headers} - else: - merged_headers = default_headers + merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} + # If caller requested a raw or streaming response wrapper, return the underlying stream as-is if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): From a48a40009b3a97ac9fca4b7d013ca1737633d872 Mon Sep 17 00:00:00 2001 From: Tony Deng Date: Tue, 9 Sep 2025 18:22:07 -0700 Subject: [PATCH 3/3] typecheck --- src/runloop_api_client/resources/devboxes/executions.py | 8 ++++---- uv.lock | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/runloop_api_client/resources/devboxes/executions.py b/src/runloop_api_client/resources/devboxes/executions.py index 80fdaf885..eba4a308e 100755 --- a/src/runloop_api_client/resources/devboxes/executions.py +++ b/src/runloop_api_client/resources/devboxes/executions.py @@ -362,7 +362,7 @@ def stream_stderr_updates( if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") - default_headers = {'Accept': 'text/event-stream'} + default_headers: Headers = {'Accept': 'text/event-stream'} merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): @@ -446,7 +446,7 @@ def stream_stdout_updates( if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") - default_headers = {'Accept': 'text/event-stream'} + default_headers: Headers = {'Accept': 'text/event-stream'} merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): @@ -814,7 +814,7 @@ async def stream_stderr_updates( if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") - default_headers = {'Accept': 'text/event-stream'} + default_headers: Headers = {'Accept': 'text/event-stream'} merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} if merged_headers and merged_headers.get(RAW_RESPONSE_HEADER): @@ -898,7 +898,7 @@ async def stream_stdout_updates( if not execution_id: raise ValueError(f"Expected a non-empty value for `execution_id` but received {execution_id!r}") - default_headers = {'Accept': 'text/event-stream'} + default_headers: Headers = {'Accept': 'text/event-stream'} merged_headers = default_headers if extra_headers is None else {**default_headers, **extra_headers} diff --git a/uv.lock b/uv.lock index 6a4831cd2..cc66e9065 100644 --- a/uv.lock +++ b/uv.lock @@ -1242,7 +1242,7 @@ wheels = [ [[package]] name = "runloop-api-client" -version = "0.55.1" +version = "0.59.0" source = { editable = "." } dependencies = [ { name = "anyio", version = "4.5.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.9'" },