Skip to content

Commit 01897bc

Browse files
feat: api: paginate GET /org/credential_providers
1 parent 55c3324 commit 01897bc

7 files changed

Lines changed: 119 additions & 37 deletions

File tree

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 117
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-9a76e7a837ac9ffbe0e9557d618ce9b676e052249e364e516c28ddb33b912019.yml
3-
openapi_spec_hash: c0e5412cc95139f11a8b8635559bb985
4-
config_hash: 098a7f3fd134c8e4cbd3a44750892a18
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-e6c711f0d29a7d956cc8ca621440da966c1f1575b1205d01328b1099edf1c517.yml
3+
openapi_spec_hash: c06e7e36de1c6f9b29b54a6e3dc08ee5
4+
config_hash: 36159c262d293fbeacf513ab600a1729

api.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,6 @@ from kernel.types import (
441441
CredentialProviderItem,
442442
CredentialProviderTestResult,
443443
UpdateCredentialProviderRequest,
444-
CredentialProviderListResponse,
445444
CredentialProviderListItemsResponse,
446445
)
447446
```
@@ -451,7 +450,7 @@ Methods:
451450
- <code title="post /org/credential_providers">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">create</a>(\*\*<a href="src/kernel/types/credential_provider_create_params.py">params</a>) -> <a href="./src/kernel/types/credential_provider.py">CredentialProvider</a></code>
452451
- <code title="get /org/credential_providers/{id}">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">retrieve</a>(id) -> <a href="./src/kernel/types/credential_provider.py">CredentialProvider</a></code>
453452
- <code title="patch /org/credential_providers/{id}">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">update</a>(id, \*\*<a href="src/kernel/types/credential_provider_update_params.py">params</a>) -> <a href="./src/kernel/types/credential_provider.py">CredentialProvider</a></code>
454-
- <code title="get /org/credential_providers">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">list</a>() -> <a href="./src/kernel/types/credential_provider_list_response.py">CredentialProviderListResponse</a></code>
453+
- <code title="get /org/credential_providers">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">list</a>(\*\*<a href="src/kernel/types/credential_provider_list_params.py">params</a>) -> <a href="./src/kernel/types/credential_provider.py">SyncOffsetPagination[CredentialProvider]</a></code>
455454
- <code title="delete /org/credential_providers/{id}">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">delete</a>(id) -> None</code>
456455
- <code title="get /org/credential_providers/{id}/items">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">list_items</a>(id) -> <a href="./src/kernel/types/credential_provider_list_items_response.py">CredentialProviderListItemsResponse</a></code>
457456
- <code title="post /org/credential_providers/{id}/test">client.credential_providers.<a href="./src/kernel/resources/credential_providers.py">test</a>(id) -> <a href="./src/kernel/types/credential_provider_test_result.py">CredentialProviderTestResult</a></code>

src/kernel/resources/credential_providers.py

Lines changed: 74 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
import httpx
88

9-
from ..types import credential_provider_create_params, credential_provider_update_params
9+
from ..types import (
10+
credential_provider_list_params,
11+
credential_provider_create_params,
12+
credential_provider_update_params,
13+
)
1014
from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
1115
from .._utils import path_template, maybe_transform, async_maybe_transform
1216
from .._compat import cached_property
@@ -17,10 +21,10 @@
1721
async_to_raw_response_wrapper,
1822
async_to_streamed_response_wrapper,
1923
)
20-
from .._base_client import make_request_options
24+
from ..pagination import SyncOffsetPagination, AsyncOffsetPagination
25+
from .._base_client import AsyncPaginator, make_request_options
2126
from ..types.credential_provider import CredentialProvider
2227
from ..types.credential_provider_test_result import CredentialProviderTestResult
23-
from ..types.credential_provider_list_response import CredentialProviderListResponse
2428
from ..types.credential_provider_list_items_response import CredentialProviderListItemsResponse
2529

2630
__all__ = ["CredentialProvidersResource", "AsyncCredentialProvidersResource"]
@@ -194,20 +198,48 @@ def update(
194198
def list(
195199
self,
196200
*,
201+
limit: int | Omit = omit,
202+
offset: int | Omit = omit,
197203
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
198204
# The extra values given here take precedence over values defined on the client or passed to this method.
199205
extra_headers: Headers | None = None,
200206
extra_query: Query | None = None,
201207
extra_body: Body | None = None,
202208
timeout: float | httpx.Timeout | None | NotGiven = not_given,
203-
) -> CredentialProviderListResponse:
204-
"""List external credential providers configured for the organization."""
205-
return self._get(
209+
) -> SyncOffsetPagination[CredentialProvider]:
210+
"""
211+
List external credential providers configured for the organization.
212+
213+
Args:
214+
limit: Limit the number of credential providers to return.
215+
216+
offset: Offset the number of credential providers to return.
217+
218+
extra_headers: Send extra headers
219+
220+
extra_query: Add additional query parameters to the request
221+
222+
extra_body: Add additional JSON properties to the request
223+
224+
timeout: Override the client-level default timeout for this request, in seconds
225+
"""
226+
return self._get_api_list(
206227
"/org/credential_providers",
228+
page=SyncOffsetPagination[CredentialProvider],
207229
options=make_request_options(
208-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
230+
extra_headers=extra_headers,
231+
extra_query=extra_query,
232+
extra_body=extra_body,
233+
timeout=timeout,
234+
query=maybe_transform(
235+
{
236+
"limit": limit,
237+
"offset": offset,
238+
},
239+
credential_provider_list_params.CredentialProviderListParams,
240+
),
209241
),
210-
cast_to=CredentialProviderListResponse,
242+
model=CredentialProvider,
211243
)
212244

213245
def delete(
@@ -477,23 +509,51 @@ async def update(
477509
cast_to=CredentialProvider,
478510
)
479511

480-
async def list(
512+
def list(
481513
self,
482514
*,
515+
limit: int | Omit = omit,
516+
offset: int | Omit = omit,
483517
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
484518
# The extra values given here take precedence over values defined on the client or passed to this method.
485519
extra_headers: Headers | None = None,
486520
extra_query: Query | None = None,
487521
extra_body: Body | None = None,
488522
timeout: float | httpx.Timeout | None | NotGiven = not_given,
489-
) -> CredentialProviderListResponse:
490-
"""List external credential providers configured for the organization."""
491-
return await self._get(
523+
) -> AsyncPaginator[CredentialProvider, AsyncOffsetPagination[CredentialProvider]]:
524+
"""
525+
List external credential providers configured for the organization.
526+
527+
Args:
528+
limit: Limit the number of credential providers to return.
529+
530+
offset: Offset the number of credential providers to return.
531+
532+
extra_headers: Send extra headers
533+
534+
extra_query: Add additional query parameters to the request
535+
536+
extra_body: Add additional JSON properties to the request
537+
538+
timeout: Override the client-level default timeout for this request, in seconds
539+
"""
540+
return self._get_api_list(
492541
"/org/credential_providers",
542+
page=AsyncOffsetPagination[CredentialProvider],
493543
options=make_request_options(
494-
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
544+
extra_headers=extra_headers,
545+
extra_query=extra_query,
546+
extra_body=extra_body,
547+
timeout=timeout,
548+
query=maybe_transform(
549+
{
550+
"limit": limit,
551+
"offset": offset,
552+
},
553+
credential_provider_list_params.CredentialProviderListParams,
554+
),
495555
),
496-
cast_to=CredentialProviderListResponse,
556+
model=CredentialProvider,
497557
)
498558

499559
async def delete(

src/kernel/types/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@
8686
from .browser_pool_acquire_response import BrowserPoolAcquireResponse as BrowserPoolAcquireResponse
8787
from .credential_totp_code_response import CredentialTotpCodeResponse as CredentialTotpCodeResponse
8888
from .browser_load_extensions_params import BrowserLoadExtensionsParams as BrowserLoadExtensionsParams
89+
from .credential_provider_list_params import CredentialProviderListParams as CredentialProviderListParams
8990
from .credential_provider_test_result import CredentialProviderTestResult as CredentialProviderTestResult
9091
from .credential_provider_create_params import CredentialProviderCreateParams as CredentialProviderCreateParams
91-
from .credential_provider_list_response import CredentialProviderListResponse as CredentialProviderListResponse
9292
from .credential_provider_update_params import CredentialProviderUpdateParams as CredentialProviderUpdateParams
9393
from .invocation_list_browsers_response import InvocationListBrowsersResponse as InvocationListBrowsersResponse
9494
from .credential_provider_list_items_response import (
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing_extensions import TypedDict
6+
7+
__all__ = ["CredentialProviderListParams"]
8+
9+
10+
class CredentialProviderListParams(TypedDict, total=False):
11+
limit: int
12+
"""Limit the number of credential providers to return."""
13+
14+
offset: int
15+
"""Offset the number of credential providers to return."""

src/kernel/types/credential_provider_list_response.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

tests/api_resources/test_credential_providers.py

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
from kernel.types import (
1313
CredentialProvider,
1414
CredentialProviderTestResult,
15-
CredentialProviderListResponse,
1615
CredentialProviderListItemsResponse,
1716
)
17+
from kernel.pagination import SyncOffsetPagination, AsyncOffsetPagination
1818

1919
base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
2020

@@ -174,7 +174,16 @@ def test_path_params_update(self, client: Kernel) -> None:
174174
@parametrize
175175
def test_method_list(self, client: Kernel) -> None:
176176
credential_provider = client.credential_providers.list()
177-
assert_matches_type(CredentialProviderListResponse, credential_provider, path=["response"])
177+
assert_matches_type(SyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
178+
179+
@pytest.mark.skip(reason="Mock server tests are disabled")
180+
@parametrize
181+
def test_method_list_with_all_params(self, client: Kernel) -> None:
182+
credential_provider = client.credential_providers.list(
183+
limit=1,
184+
offset=0,
185+
)
186+
assert_matches_type(SyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
178187

179188
@pytest.mark.skip(reason="Mock server tests are disabled")
180189
@parametrize
@@ -184,7 +193,7 @@ def test_raw_response_list(self, client: Kernel) -> None:
184193
assert response.is_closed is True
185194
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
186195
credential_provider = response.parse()
187-
assert_matches_type(CredentialProviderListResponse, credential_provider, path=["response"])
196+
assert_matches_type(SyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
188197

189198
@pytest.mark.skip(reason="Mock server tests are disabled")
190199
@parametrize
@@ -194,7 +203,7 @@ def test_streaming_response_list(self, client: Kernel) -> None:
194203
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
195204

196205
credential_provider = response.parse()
197-
assert_matches_type(CredentialProviderListResponse, credential_provider, path=["response"])
206+
assert_matches_type(SyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
198207

199208
assert cast(Any, response.is_closed) is True
200209

@@ -482,7 +491,16 @@ async def test_path_params_update(self, async_client: AsyncKernel) -> None:
482491
@parametrize
483492
async def test_method_list(self, async_client: AsyncKernel) -> None:
484493
credential_provider = await async_client.credential_providers.list()
485-
assert_matches_type(CredentialProviderListResponse, credential_provider, path=["response"])
494+
assert_matches_type(AsyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
495+
496+
@pytest.mark.skip(reason="Mock server tests are disabled")
497+
@parametrize
498+
async def test_method_list_with_all_params(self, async_client: AsyncKernel) -> None:
499+
credential_provider = await async_client.credential_providers.list(
500+
limit=1,
501+
offset=0,
502+
)
503+
assert_matches_type(AsyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
486504

487505
@pytest.mark.skip(reason="Mock server tests are disabled")
488506
@parametrize
@@ -492,7 +510,7 @@ async def test_raw_response_list(self, async_client: AsyncKernel) -> None:
492510
assert response.is_closed is True
493511
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
494512
credential_provider = await response.parse()
495-
assert_matches_type(CredentialProviderListResponse, credential_provider, path=["response"])
513+
assert_matches_type(AsyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
496514

497515
@pytest.mark.skip(reason="Mock server tests are disabled")
498516
@parametrize
@@ -502,7 +520,7 @@ async def test_streaming_response_list(self, async_client: AsyncKernel) -> None:
502520
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
503521

504522
credential_provider = await response.parse()
505-
assert_matches_type(CredentialProviderListResponse, credential_provider, path=["response"])
523+
assert_matches_type(AsyncOffsetPagination[CredentialProvider], credential_provider, path=["response"])
506524

507525
assert cast(Any, response.is_closed) is True
508526

0 commit comments

Comments
 (0)