Skip to content

Commit 4ff95b5

Browse files
committed
feat: add unregister method for Shield resources
1 parent 5284b4a commit 4ff95b5

File tree

4 files changed

+163
-1
lines changed

4 files changed

+163
-1
lines changed

api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,7 @@ Methods:
489489
- <code title="get /v1/shields/{identifier}">client.shields.<a href="./src/llama_stack_client/resources/shields.py">retrieve</a>(identifier) -> <a href="./src/llama_stack_client/types/shield.py">Shield</a></code>
490490
- <code title="get /v1/shields">client.shields.<a href="./src/llama_stack_client/resources/shields.py">list</a>() -> <a href="./src/llama_stack_client/types/shield_list_response.py">ShieldListResponse</a></code>
491491
- <code title="post /v1/shields">client.shields.<a href="./src/llama_stack_client/resources/shields.py">register</a>(\*\*<a href="src/llama_stack_client/types/shield_register_params.py">params</a>) -> <a href="./src/llama_stack_client/types/shield.py">Shield</a></code>
492+
- <code title="delete /v1/shields/{identifier}">client.shields.<a href="./src/llama_stack_client/resources/shields.py">unregister</a>(identifier) -> None</code>
492493

493494
# SyntheticDataGeneration
494495

src/llama_stack_client/lib/cli/shields/shields.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,19 @@ def register(
9393
click.echo(yaml.dump(response.dict()))
9494

9595

96+
@shields.command()
97+
@click.help_option("-h", "--help")
98+
@click.argument("shield-id", required=True)
99+
@click.pass_context
100+
@handle_client_errors("unregister shield")
101+
def unregister(ctx, shield_id: str):
102+
"""Unregister a shield"""
103+
client = ctx.obj["client"]
104+
client.shields.unregister(identifier=shield_id)
105+
click.echo(f"Successfully unregistered shield {shield_id}")
106+
107+
96108
# Register subcommands
97109
shields.add_command(list)
98110
shields.add_command(register)
111+
shields.add_command(unregister)

src/llama_stack_client/resources/shields.py

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import httpx
88

99
from ..types import shield_register_params
10-
from .._types import NOT_GIVEN, Body, Query, Headers, NotGiven
10+
from .._types import NOT_GIVEN, Body, Query, Headers, NoneType, NotGiven
1111
from .._utils import maybe_transform, async_maybe_transform
1212
from .._compat import cached_property
1313
from .._resource import SyncAPIResource, AsyncAPIResource
@@ -151,6 +151,42 @@ def register(
151151
),
152152
cast_to=Shield,
153153
)
154+
155+
def unregister(
156+
self,
157+
identifier: str,
158+
*,
159+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
160+
# The extra values given here take precedence over values defined on the client or passed to this method.
161+
extra_headers: Headers | None = None,
162+
extra_query: Query | None = None,
163+
extra_body: Body | None = None,
164+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
165+
) -> None:
166+
"""
167+
Unregister a shield.
168+
169+
Args:
170+
identifier: The identifier of the shield to unregister.
171+
172+
extra_headers: Send extra headers
173+
174+
extra_query: Add additional query parameters to the request
175+
176+
extra_body: Add additional JSON properties to the request
177+
178+
timeout: Override the client-level default timeout for this request, in seconds
179+
"""
180+
if not identifier:
181+
raise ValueError(f"Expected a non-empty value for `identifier` but received {identifier!r}")
182+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
183+
return self._delete(
184+
f"/v1/shields/{identifier}",
185+
options=make_request_options(
186+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
187+
),
188+
cast_to=NoneType,
189+
)
154190

155191

156192
class AsyncShieldsResource(AsyncAPIResource):
@@ -279,6 +315,42 @@ async def register(
279315
),
280316
cast_to=Shield,
281317
)
318+
319+
async def unregister(
320+
self,
321+
identifier: str,
322+
*,
323+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
324+
# The extra values given here take precedence over values defined on the client or passed to this method.
325+
extra_headers: Headers | None = None,
326+
extra_query: Query | None = None,
327+
extra_body: Body | None = None,
328+
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
329+
) -> None:
330+
"""
331+
Unregister a shield.
332+
333+
Args:
334+
identifier: The identifier of the shield to unregister.
335+
336+
extra_headers: Send extra headers
337+
338+
extra_query: Add additional query parameters to the request
339+
340+
extra_body: Add additional JSON properties to the request
341+
342+
timeout: Override the client-level default timeout for this request, in seconds
343+
"""
344+
if not identifier:
345+
raise ValueError(f"Expected a non-empty value for `identifier` but received {identifier!r}")
346+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
347+
return await self._delete(
348+
f"/v1/shields/{identifier}",
349+
options=make_request_options(
350+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
351+
),
352+
cast_to=NoneType,
353+
)
282354

283355

284356
class ShieldsResourceWithRawResponse:
@@ -295,6 +367,10 @@ def __init__(self, shields: ShieldsResource) -> None:
295367
shields.register,
296368
)
297369

370+
self.unregister = to_raw_response_wrapper(
371+
shields.unregister,
372+
)
373+
298374

299375
class AsyncShieldsResourceWithRawResponse:
300376
def __init__(self, shields: AsyncShieldsResource) -> None:
@@ -310,6 +386,10 @@ def __init__(self, shields: AsyncShieldsResource) -> None:
310386
shields.register,
311387
)
312388

389+
self.unregister = async_to_raw_response_wrapper(
390+
shields.unregister,
391+
)
392+
313393

314394
class ShieldsResourceWithStreamingResponse:
315395
def __init__(self, shields: ShieldsResource) -> None:
@@ -324,6 +404,9 @@ def __init__(self, shields: ShieldsResource) -> None:
324404
self.register = to_streamed_response_wrapper(
325405
shields.register,
326406
)
407+
self.unregister = to_streamed_response_wrapper(
408+
shields.unregister,
409+
)
327410

328411

329412
class AsyncShieldsResourceWithStreamingResponse:
@@ -339,3 +422,6 @@ def __init__(self, shields: AsyncShieldsResource) -> None:
339422
self.register = async_to_streamed_response_wrapper(
340423
shields.register,
341424
)
425+
self.unregister = async_to_streamed_response_wrapper(
426+
shields.unregister,
427+
)

tests/api_resources/test_shields.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,37 @@ def test_streaming_response_register(self, client: LlamaStackClient) -> None:
121121

122122
assert cast(Any, response.is_closed) is True
123123

124+
@parametrize
125+
def test_method_unregister(self, client: LlamaStackClient) -> None:
126+
shield = client.shields.unregister(
127+
identifier="identifier",
128+
)
129+
assert shield is None
130+
131+
@parametrize
132+
def test_raw_response_unregister(self, client: LlamaStackClient) -> None:
133+
response = client.shields.with_raw_response.unregister(
134+
identifier="identifier",
135+
)
136+
137+
assert response.is_closed is True
138+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
139+
shield = response.parse()
140+
assert shield is None
141+
142+
@parametrize
143+
def test_streaming_response_unregister(self, client: LlamaStackClient) -> None:
144+
with client.shields.with_streaming_response.unregister(
145+
identifier="identifier",
146+
) as response:
147+
assert not response.is_closed
148+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
149+
150+
shield = response.parse()
151+
assert shield is None
152+
153+
assert cast(Any, response.is_closed) is True
154+
124155

125156
class TestAsyncShields:
126157
parametrize = pytest.mark.parametrize(
@@ -230,3 +261,34 @@ async def test_streaming_response_register(self, async_client: AsyncLlamaStackCl
230261
assert_matches_type(Shield, shield, path=["response"])
231262

232263
assert cast(Any, response.is_closed) is True
264+
265+
@parametrize
266+
async def test_method_unregister(self, async_client: AsyncLlamaStackClient) -> None:
267+
shield = await async_client.shields.unregister(
268+
identifier="identifier",
269+
)
270+
assert shield is None
271+
272+
@parametrize
273+
async def test_raw_response_unregister(self, async_client: AsyncLlamaStackClient) -> None:
274+
response = await async_client.shields.with_raw_response.unregister(
275+
identifier="identifier",
276+
)
277+
278+
assert response.is_closed is True
279+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
280+
shield = await response.parse()
281+
assert shield is None
282+
283+
@parametrize
284+
async def test_streaming_response_unregister(self, async_client: AsyncLlamaStackClient) -> None:
285+
async with async_client.shields.with_streaming_response.unregister(
286+
identifier="identifier",
287+
) as response:
288+
assert not response.is_closed
289+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
290+
291+
shield = await response.parse()
292+
assert shield is None
293+
294+
assert cast(Any, response.is_closed) is True

0 commit comments

Comments
 (0)