diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 3cb6257ce..4c56f2a48 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.63.0" + ".": "0.64.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index bd6f2f508..3999b4279 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 92 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-6b65a42b74406a77acb03ddb582288396d7af64df16eebf887c77246d3a54470.yml -openapi_spec_hash: aeb9f595d53412926ef507174f33a1a1 -config_hash: f008c82c6ae5099c9a4b8e1fce1e15f1 +configured_endpoints: 94 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai%2Frunloop-d1cc15eb5ef9125c6eef2855fc9ccc1129f68116e20ac0a72a9c77a445909033.yml +openapi_spec_hash: 925f218d18ed7f1faff9389b318a674f +config_hash: 82af97d4d6dde958eed9f5e4ae55f75a diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ba984a0b..9e01527ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## 0.64.0 (2025-10-06) + +Full Changelog: [v0.63.0...v0.64.0](https://github.com/runloopai/api-client-python/compare/v0.63.0...v0.64.0) + +### Features + +* **api:** api update ([b13e49f](https://github.com/runloopai/api-client-python/commit/b13e49f006c45d3e10c0383825fbe2054b31b351)) +* **api:** api update ([736c122](https://github.com/runloopai/api-client-python/commit/736c122c5a350ba081eb495786e94ad6b999b121)) +* **api:** api update ([c4dbcf3](https://github.com/runloopai/api-client-python/commit/c4dbcf33822da8045def9617948e7b30f617fe51)) + ## 0.63.0 (2025-10-02) Full Changelog: [v0.62.0...v0.63.0](https://github.com/runloopai/api-client-python/compare/v0.62.0...v0.63.0) diff --git a/api.md b/api.md index d0fe270b3..245907bbc 100644 --- a/api.md +++ b/api.md @@ -198,6 +198,7 @@ Methods: - client.devboxes.executions.execute_async(id, \*\*params) -> DevboxAsyncExecutionDetailView - client.devboxes.executions.execute_sync(id, \*\*params) -> DevboxExecutionDetailView - client.devboxes.executions.kill(execution_id, \*, devbox_id, \*\*params) -> DevboxAsyncExecutionDetailView +- client.devboxes.executions.send_std_in(execution_id, \*, devbox_id, \*\*params) -> DevboxAsyncExecutionDetailView - client.devboxes.executions.stream_stderr_updates(execution_id, \*, devbox_id, \*\*params) -> ExecutionUpdateChunk - client.devboxes.executions.stream_stdout_updates(execution_id, \*, devbox_id, \*\*params) -> ExecutionUpdateChunk @@ -312,6 +313,7 @@ Methods: - client.repositories.inspect(id, \*\*params) -> RepositoryInspectionDetails - client.repositories.list_inspections(id) -> RepositoryInspectionListView - client.repositories.refresh(id, \*\*params) -> object +- client.repositories.retrieve_inspection(id) -> RepositoryInspectionDetails # Secrets diff --git a/pyproject.toml b/pyproject.toml index 0aafc3020..d43a7d9e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "runloop_api_client" -version = "0.63.0" +version = "0.64.0" description = "The official Python library for the runloop API" dynamic = ["readme"] license = "MIT" diff --git a/src/runloop_api_client/_version.py b/src/runloop_api_client/_version.py index 5c8f372d6..86a8c7253 100644 --- a/src/runloop_api_client/_version.py +++ b/src/runloop_api_client/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "runloop_api_client" -__version__ = "0.63.0" # x-release-please-version +__version__ = "0.64.0" # x-release-please-version diff --git a/src/runloop_api_client/resources/devboxes/executions.py b/src/runloop_api_client/resources/devboxes/executions.py index d89018ca3..6f4189c96 100755 --- a/src/runloop_api_client/resources/devboxes/executions.py +++ b/src/runloop_api_client/resources/devboxes/executions.py @@ -4,6 +4,7 @@ import typing_extensions from typing import Optional, cast +from typing_extensions import Literal import httpx @@ -25,6 +26,7 @@ from ...types.devboxes import ( execution_kill_params, execution_retrieve_params, + execution_send_std_in_params, execution_execute_sync_params, execution_execute_async_params, execution_stream_stderr_updates_params, @@ -332,6 +334,62 @@ def kill( cast_to=DevboxAsyncExecutionDetailView, ) + def send_std_in( + self, + execution_id: str, + *, + devbox_id: str, + signal: Optional[Literal["EOF", "INTERRUPT"]] | Omit = omit, + text: Optional[str] | Omit = omit, + # 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, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> DevboxAsyncExecutionDetailView: + """ + Send content to the Std In of a running execution. + + Args: + signal: Signal to send to std in of the running execution. + + text: Text to send to std in of the running execution. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not devbox_id: + 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}") + return self._post( + f"/v1/devboxes/{devbox_id}/executions/{execution_id}/send_std_in", + body=maybe_transform( + { + "signal": signal, + "text": text, + }, + execution_send_std_in_params.ExecutionSendStdInParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=DevboxAsyncExecutionDetailView, + ) + def stream_stderr_updates( self, execution_id: str, @@ -785,6 +843,62 @@ async def kill( cast_to=DevboxAsyncExecutionDetailView, ) + async def send_std_in( + self, + execution_id: str, + *, + devbox_id: str, + signal: Optional[Literal["EOF", "INTERRUPT"]] | Omit = omit, + text: Optional[str] | Omit = omit, + # 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, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> DevboxAsyncExecutionDetailView: + """ + Send content to the Std In of a running execution. + + Args: + signal: Signal to send to std in of the running execution. + + text: Text to send to std in of the running execution. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not devbox_id: + 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}") + return await self._post( + f"/v1/devboxes/{devbox_id}/executions/{execution_id}/send_std_in", + body=await async_maybe_transform( + { + "signal": signal, + "text": text, + }, + execution_send_std_in_params.ExecutionSendStdInParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=DevboxAsyncExecutionDetailView, + ) + async def stream_stderr_updates( self, execution_id: str, @@ -973,6 +1087,9 @@ def __init__(self, executions: ExecutionsResource) -> None: self.kill = to_raw_response_wrapper( executions.kill, ) + self.send_std_in = to_raw_response_wrapper( + executions.send_std_in, + ) self.stream_stdout_updates = to_raw_response_wrapper( executions.stream_stdout_updates, ) @@ -999,6 +1116,9 @@ def __init__(self, executions: AsyncExecutionsResource) -> None: self.kill = async_to_raw_response_wrapper( executions.kill, ) + self.send_std_in = async_to_raw_response_wrapper( + executions.send_std_in, + ) self.stream_stdout_updates = async_to_raw_response_wrapper( executions.stream_stdout_updates, ) @@ -1025,6 +1145,9 @@ def __init__(self, executions: ExecutionsResource) -> None: self.kill = to_streamed_response_wrapper( executions.kill, ) + self.send_std_in = to_streamed_response_wrapper( + executions.send_std_in, + ) self.stream_stdout_updates = to_streamed_response_wrapper( executions.stream_stdout_updates, ) @@ -1051,6 +1174,9 @@ def __init__(self, executions: AsyncExecutionsResource) -> None: self.kill = async_to_streamed_response_wrapper( executions.kill, ) + self.send_std_in = async_to_streamed_response_wrapper( + executions.send_std_in, + ) self.stream_stdout_updates = async_to_streamed_response_wrapper( executions.stream_stdout_updates, ) diff --git a/src/runloop_api_client/resources/repositories.py b/src/runloop_api_client/resources/repositories.py index 49e3fb9a2..e2b238750 100644 --- a/src/runloop_api_client/resources/repositories.py +++ b/src/runloop_api_client/resources/repositories.py @@ -2,6 +2,7 @@ from __future__ import annotations +import typing_extensions from typing import Optional import httpx @@ -321,6 +322,7 @@ def list_inspections( cast_to=RepositoryInspectionListView, ) + @typing_extensions.deprecated("deprecated") def refresh( self, id: str, @@ -375,6 +377,39 @@ def refresh( cast_to=object, ) + def retrieve_inspection( + self, + id: str, + *, + # 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, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> RepositoryInspectionDetails: + """ + Get a repository inspection by id. + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not id: + raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") + return self._get( + f"/v1/repositories/inspections/{id}", + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=RepositoryInspectionDetails, + ) + class AsyncRepositoriesResource(AsyncAPIResource): @cached_property @@ -666,6 +701,7 @@ async def list_inspections( cast_to=RepositoryInspectionListView, ) + @typing_extensions.deprecated("deprecated") async def refresh( self, id: str, @@ -720,6 +756,39 @@ async def refresh( cast_to=object, ) + async def retrieve_inspection( + self, + id: str, + *, + # 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, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + ) -> RepositoryInspectionDetails: + """ + Get a repository inspection by id. + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + """ + if not id: + raise ValueError(f"Expected a non-empty value for `id` but received {id!r}") + return await self._get( + f"/v1/repositories/inspections/{id}", + options=make_request_options( + extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout + ), + cast_to=RepositoryInspectionDetails, + ) + class RepositoriesResourceWithRawResponse: def __init__(self, repositories: RepositoriesResource) -> None: @@ -743,8 +812,13 @@ def __init__(self, repositories: RepositoriesResource) -> None: self.list_inspections = to_raw_response_wrapper( repositories.list_inspections, ) - self.refresh = to_raw_response_wrapper( - repositories.refresh, + self.refresh = ( # pyright: ignore[reportDeprecated] + to_raw_response_wrapper( + repositories.refresh, # pyright: ignore[reportDeprecated], + ) + ) + self.retrieve_inspection = to_raw_response_wrapper( + repositories.retrieve_inspection, ) @@ -770,8 +844,13 @@ def __init__(self, repositories: AsyncRepositoriesResource) -> None: self.list_inspections = async_to_raw_response_wrapper( repositories.list_inspections, ) - self.refresh = async_to_raw_response_wrapper( - repositories.refresh, + self.refresh = ( # pyright: ignore[reportDeprecated] + async_to_raw_response_wrapper( + repositories.refresh, # pyright: ignore[reportDeprecated], + ) + ) + self.retrieve_inspection = async_to_raw_response_wrapper( + repositories.retrieve_inspection, ) @@ -797,8 +876,13 @@ def __init__(self, repositories: RepositoriesResource) -> None: self.list_inspections = to_streamed_response_wrapper( repositories.list_inspections, ) - self.refresh = to_streamed_response_wrapper( - repositories.refresh, + self.refresh = ( # pyright: ignore[reportDeprecated] + to_streamed_response_wrapper( + repositories.refresh, # pyright: ignore[reportDeprecated], + ) + ) + self.retrieve_inspection = to_streamed_response_wrapper( + repositories.retrieve_inspection, ) @@ -824,6 +908,11 @@ def __init__(self, repositories: AsyncRepositoriesResource) -> None: self.list_inspections = async_to_streamed_response_wrapper( repositories.list_inspections, ) - self.refresh = async_to_streamed_response_wrapper( - repositories.refresh, + self.refresh = ( # pyright: ignore[reportDeprecated] + async_to_streamed_response_wrapper( + repositories.refresh, # pyright: ignore[reportDeprecated], + ) + ) + self.retrieve_inspection = async_to_streamed_response_wrapper( + repositories.retrieve_inspection, ) diff --git a/src/runloop_api_client/types/devboxes/__init__.py b/src/runloop_api_client/types/devboxes/__init__.py index 9b7f0134d..0852b4c30 100644 --- a/src/runloop_api_client/types/devboxes/__init__.py +++ b/src/runloop_api_client/types/devboxes/__init__.py @@ -13,6 +13,7 @@ from .disk_snapshot_list_params import DiskSnapshotListParams as DiskSnapshotListParams from .execution_retrieve_params import ExecutionRetrieveParams as ExecutionRetrieveParams from .disk_snapshot_update_params import DiskSnapshotUpdateParams as DiskSnapshotUpdateParams +from .execution_send_std_in_params import ExecutionSendStdInParams as ExecutionSendStdInParams from .execution_execute_sync_params import ExecutionExecuteSyncParams as ExecutionExecuteSyncParams from .execution_execute_async_params import ExecutionExecuteAsyncParams as ExecutionExecuteAsyncParams from .computer_mouse_interaction_params import ComputerMouseInteractionParams as ComputerMouseInteractionParams diff --git a/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py b/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py new file mode 100644 index 000000000..0d8358958 --- /dev/null +++ b/src/runloop_api_client/types/devboxes/execution_send_std_in_params.py @@ -0,0 +1,18 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing import Optional +from typing_extensions import Literal, Required, TypedDict + +__all__ = ["ExecutionSendStdInParams"] + + +class ExecutionSendStdInParams(TypedDict, total=False): + devbox_id: Required[str] + + signal: Optional[Literal["EOF", "INTERRUPT"]] + """Signal to send to std in of the running execution.""" + + text: Optional[str] + """Text to send to std in of the running execution.""" diff --git a/tests/api_resources/devboxes/test_executions.py b/tests/api_resources/devboxes/test_executions.py index e91eae41d..a3bcaaa1e 100755 --- a/tests/api_resources/devboxes/test_executions.py +++ b/tests/api_resources/devboxes/test_executions.py @@ -247,6 +247,64 @@ def test_path_params_kill(self, client: Runloop) -> None: devbox_id="devbox_id", ) + @parametrize + def test_method_send_std_in(self, client: Runloop) -> None: + execution = client.devboxes.executions.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + ) + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + @parametrize + def test_method_send_std_in_with_all_params(self, client: Runloop) -> None: + execution = client.devboxes.executions.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + signal="EOF", + text="text", + ) + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + @parametrize + def test_raw_response_send_std_in(self, client: Runloop) -> None: + response = client.devboxes.executions.with_raw_response.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + execution = response.parse() + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + @parametrize + def test_streaming_response_send_std_in(self, client: Runloop) -> None: + with client.devboxes.executions.with_streaming_response.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + execution = response.parse() + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_send_std_in(self, client: Runloop) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `devbox_id` but received ''"): + client.devboxes.executions.with_raw_response.send_std_in( + execution_id="execution_id", + devbox_id="", + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `execution_id` but received ''"): + client.devboxes.executions.with_raw_response.send_std_in( + execution_id="", + devbox_id="devbox_id", + ) + @parametrize def test_method_stream_stdout_updates(self, client: Runloop, respx_mock: MockRouter) -> None: respx_mock.get("/v1/devboxes/devbox_id/executions/execution_id/stream_stdout_updates").mock( @@ -770,6 +828,64 @@ async def test_path_params_kill(self, async_client: AsyncRunloop) -> None: devbox_id="devbox_id", ) + @parametrize + async def test_method_send_std_in(self, async_client: AsyncRunloop) -> None: + execution = await async_client.devboxes.executions.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + ) + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + @parametrize + async def test_method_send_std_in_with_all_params(self, async_client: AsyncRunloop) -> None: + execution = await async_client.devboxes.executions.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + signal="EOF", + text="text", + ) + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + @parametrize + async def test_raw_response_send_std_in(self, async_client: AsyncRunloop) -> None: + response = await async_client.devboxes.executions.with_raw_response.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + execution = await response.parse() + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + @parametrize + async def test_streaming_response_send_std_in(self, async_client: AsyncRunloop) -> None: + async with async_client.devboxes.executions.with_streaming_response.send_std_in( + execution_id="execution_id", + devbox_id="devbox_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + execution = await response.parse() + assert_matches_type(DevboxAsyncExecutionDetailView, execution, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_send_std_in(self, async_client: AsyncRunloop) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `devbox_id` but received ''"): + await async_client.devboxes.executions.with_raw_response.send_std_in( + execution_id="execution_id", + devbox_id="", + ) + + with pytest.raises(ValueError, match=r"Expected a non-empty value for `execution_id` but received ''"): + await async_client.devboxes.executions.with_raw_response.send_std_in( + execution_id="", + devbox_id="devbox_id", + ) + @parametrize async def test_method_stream_stdout_updates(self, async_client: AsyncRunloop, respx_mock: MockRouter) -> None: respx_mock.get("/v1/devboxes/devbox_id/executions/execution_id/stream_stdout_updates").mock( diff --git a/tests/api_resources/test_repositories.py b/tests/api_resources/test_repositories.py index c07d16b35..282688d80 100644 --- a/tests/api_resources/test_repositories.py +++ b/tests/api_resources/test_repositories.py @@ -16,6 +16,8 @@ ) from runloop_api_client.pagination import SyncRepositoriesCursorIDPage, AsyncRepositoriesCursorIDPage +# pyright: reportDeprecated=false + base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010") @@ -263,25 +265,30 @@ def test_path_params_list_inspections(self, client: Runloop) -> None: @parametrize def test_method_refresh(self, client: Runloop) -> None: - repository = client.repositories.refresh( - id="id", - ) + with pytest.warns(DeprecationWarning): + repository = client.repositories.refresh( + id="id", + ) + assert_matches_type(object, repository, path=["response"]) @parametrize def test_method_refresh_with_all_params(self, client: Runloop) -> None: - repository = client.repositories.refresh( - id="id", - blueprint_id="blueprint_id", - github_auth_token="github_auth_token", - ) + with pytest.warns(DeprecationWarning): + repository = client.repositories.refresh( + id="id", + blueprint_id="blueprint_id", + github_auth_token="github_auth_token", + ) + assert_matches_type(object, repository, path=["response"]) @parametrize def test_raw_response_refresh(self, client: Runloop) -> None: - response = client.repositories.with_raw_response.refresh( - id="id", - ) + with pytest.warns(DeprecationWarning): + response = client.repositories.with_raw_response.refresh( + id="id", + ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -290,22 +297,62 @@ def test_raw_response_refresh(self, client: Runloop) -> None: @parametrize def test_streaming_response_refresh(self, client: Runloop) -> None: - with client.repositories.with_streaming_response.refresh( - id="id", + with pytest.warns(DeprecationWarning): + with client.repositories.with_streaming_response.refresh( + id="id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + repository = response.parse() + assert_matches_type(object, repository, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_refresh(self, client: Runloop) -> None: + with pytest.warns(DeprecationWarning): + with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): + client.repositories.with_raw_response.refresh( + id="", + ) + + @parametrize + def test_method_retrieve_inspection(self, client: Runloop) -> None: + repository = client.repositories.retrieve_inspection( + "id", + ) + assert_matches_type(RepositoryInspectionDetails, repository, path=["response"]) + + @parametrize + def test_raw_response_retrieve_inspection(self, client: Runloop) -> None: + response = client.repositories.with_raw_response.retrieve_inspection( + "id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + repository = response.parse() + assert_matches_type(RepositoryInspectionDetails, repository, path=["response"]) + + @parametrize + def test_streaming_response_retrieve_inspection(self, client: Runloop) -> None: + with client.repositories.with_streaming_response.retrieve_inspection( + "id", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" repository = response.parse() - assert_matches_type(object, repository, path=["response"]) + assert_matches_type(RepositoryInspectionDetails, repository, path=["response"]) assert cast(Any, response.is_closed) is True @parametrize - def test_path_params_refresh(self, client: Runloop) -> None: + def test_path_params_retrieve_inspection(self, client: Runloop) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): - client.repositories.with_raw_response.refresh( - id="", + client.repositories.with_raw_response.retrieve_inspection( + "", ) @@ -555,25 +602,30 @@ async def test_path_params_list_inspections(self, async_client: AsyncRunloop) -> @parametrize async def test_method_refresh(self, async_client: AsyncRunloop) -> None: - repository = await async_client.repositories.refresh( - id="id", - ) + with pytest.warns(DeprecationWarning): + repository = await async_client.repositories.refresh( + id="id", + ) + assert_matches_type(object, repository, path=["response"]) @parametrize async def test_method_refresh_with_all_params(self, async_client: AsyncRunloop) -> None: - repository = await async_client.repositories.refresh( - id="id", - blueprint_id="blueprint_id", - github_auth_token="github_auth_token", - ) + with pytest.warns(DeprecationWarning): + repository = await async_client.repositories.refresh( + id="id", + blueprint_id="blueprint_id", + github_auth_token="github_auth_token", + ) + assert_matches_type(object, repository, path=["response"]) @parametrize async def test_raw_response_refresh(self, async_client: AsyncRunloop) -> None: - response = await async_client.repositories.with_raw_response.refresh( - id="id", - ) + with pytest.warns(DeprecationWarning): + response = await async_client.repositories.with_raw_response.refresh( + id="id", + ) assert response.is_closed is True assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -582,20 +634,60 @@ async def test_raw_response_refresh(self, async_client: AsyncRunloop) -> None: @parametrize async def test_streaming_response_refresh(self, async_client: AsyncRunloop) -> None: - async with async_client.repositories.with_streaming_response.refresh( - id="id", + with pytest.warns(DeprecationWarning): + async with async_client.repositories.with_streaming_response.refresh( + id="id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + repository = await response.parse() + assert_matches_type(object, repository, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_refresh(self, async_client: AsyncRunloop) -> None: + with pytest.warns(DeprecationWarning): + with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): + await async_client.repositories.with_raw_response.refresh( + id="", + ) + + @parametrize + async def test_method_retrieve_inspection(self, async_client: AsyncRunloop) -> None: + repository = await async_client.repositories.retrieve_inspection( + "id", + ) + assert_matches_type(RepositoryInspectionDetails, repository, path=["response"]) + + @parametrize + async def test_raw_response_retrieve_inspection(self, async_client: AsyncRunloop) -> None: + response = await async_client.repositories.with_raw_response.retrieve_inspection( + "id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + repository = await response.parse() + assert_matches_type(RepositoryInspectionDetails, repository, path=["response"]) + + @parametrize + async def test_streaming_response_retrieve_inspection(self, async_client: AsyncRunloop) -> None: + async with async_client.repositories.with_streaming_response.retrieve_inspection( + "id", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" repository = await response.parse() - assert_matches_type(object, repository, path=["response"]) + assert_matches_type(RepositoryInspectionDetails, repository, path=["response"]) assert cast(Any, response.is_closed) is True @parametrize - async def test_path_params_refresh(self, async_client: AsyncRunloop) -> None: + async def test_path_params_retrieve_inspection(self, async_client: AsyncRunloop) -> None: with pytest.raises(ValueError, match=r"Expected a non-empty value for `id` but received ''"): - await async_client.repositories.with_raw_response.refresh( - id="", + await async_client.repositories.with_raw_response.retrieve_inspection( + "", )