Skip to content

Commit be1251f

Browse files
chore(closes OPEN-8576): expose delete project endpoint
1 parent 23f6d23 commit be1251f

File tree

4 files changed

+161
-4
lines changed

4 files changed

+161
-4
lines changed

.stats.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
configured_endpoints: 25
2-
openapi_spec_hash: 4eff18b3478c98a9b257ac27fdeb6b49
3-
config_hash: b415187e3925c414fb2597cdd0a11859
1+
configured_endpoints: 26
2+
openapi_spec_hash: 6f6cb98b7755d18274dd51e857508336
3+
config_hash: cc9a32249c08143687799eb8de187d6a

api.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Methods:
1010

1111
- <code title="post /projects">client.projects.<a href="./src/openlayer/resources/projects/projects.py">create</a>(\*\*<a href="src/openlayer/types/project_create_params.py">params</a>) -> <a href="./src/openlayer/types/project_create_response.py">ProjectCreateResponse</a></code>
1212
- <code title="get /projects">client.projects.<a href="./src/openlayer/resources/projects/projects.py">list</a>(\*\*<a href="src/openlayer/types/project_list_params.py">params</a>) -> <a href="./src/openlayer/types/project_list_response.py">ProjectListResponse</a></code>
13+
- <code title="delete /projects/{projectId}">client.projects.<a href="./src/openlayer/resources/projects/projects.py">delete</a>(project_id) -> None</code>
1314

1415
## Commits
1516

src/openlayer/resources/projects/projects.py

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
CommitsResourceWithStreamingResponse,
2525
AsyncCommitsResourceWithStreamingResponse,
2626
)
27-
from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
27+
from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, omit, not_given
2828
from ..._utils import maybe_transform, async_maybe_transform
2929
from ..._compat import cached_property
3030
from ..._resource import SyncAPIResource, AsyncAPIResource
@@ -183,6 +183,40 @@ def list(
183183
cast_to=ProjectListResponse,
184184
)
185185

186+
def delete(
187+
self,
188+
project_id: str,
189+
*,
190+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
191+
# The extra values given here take precedence over values defined on the client or passed to this method.
192+
extra_headers: Headers | None = None,
193+
extra_query: Query | None = None,
194+
extra_body: Body | None = None,
195+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
196+
) -> None:
197+
"""
198+
Delete a project by its ID.
199+
200+
Args:
201+
extra_headers: Send extra headers
202+
203+
extra_query: Add additional query parameters to the request
204+
205+
extra_body: Add additional JSON properties to the request
206+
207+
timeout: Override the client-level default timeout for this request, in seconds
208+
"""
209+
if not project_id:
210+
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
211+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
212+
return self._delete(
213+
f"/projects/{project_id}",
214+
options=make_request_options(
215+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
216+
),
217+
cast_to=NoneType,
218+
)
219+
186220

187221
class AsyncProjectsResource(AsyncAPIResource):
188222
@cached_property
@@ -318,6 +352,40 @@ async def list(
318352
cast_to=ProjectListResponse,
319353
)
320354

355+
async def delete(
356+
self,
357+
project_id: str,
358+
*,
359+
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
360+
# The extra values given here take precedence over values defined on the client or passed to this method.
361+
extra_headers: Headers | None = None,
362+
extra_query: Query | None = None,
363+
extra_body: Body | None = None,
364+
timeout: float | httpx.Timeout | None | NotGiven = not_given,
365+
) -> None:
366+
"""
367+
Delete a project by its ID.
368+
369+
Args:
370+
extra_headers: Send extra headers
371+
372+
extra_query: Add additional query parameters to the request
373+
374+
extra_body: Add additional JSON properties to the request
375+
376+
timeout: Override the client-level default timeout for this request, in seconds
377+
"""
378+
if not project_id:
379+
raise ValueError(f"Expected a non-empty value for `project_id` but received {project_id!r}")
380+
extra_headers = {"Accept": "*/*", **(extra_headers or {})}
381+
return await self._delete(
382+
f"/projects/{project_id}",
383+
options=make_request_options(
384+
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
385+
),
386+
cast_to=NoneType,
387+
)
388+
321389

322390
class ProjectsResourceWithRawResponse:
323391
def __init__(self, projects: ProjectsResource) -> None:
@@ -329,6 +397,9 @@ def __init__(self, projects: ProjectsResource) -> None:
329397
self.list = to_raw_response_wrapper(
330398
projects.list,
331399
)
400+
self.delete = to_raw_response_wrapper(
401+
projects.delete,
402+
)
332403

333404
@cached_property
334405
def commits(self) -> CommitsResourceWithRawResponse:
@@ -353,6 +424,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
353424
self.list = async_to_raw_response_wrapper(
354425
projects.list,
355426
)
427+
self.delete = async_to_raw_response_wrapper(
428+
projects.delete,
429+
)
356430

357431
@cached_property
358432
def commits(self) -> AsyncCommitsResourceWithRawResponse:
@@ -377,6 +451,9 @@ def __init__(self, projects: ProjectsResource) -> None:
377451
self.list = to_streamed_response_wrapper(
378452
projects.list,
379453
)
454+
self.delete = to_streamed_response_wrapper(
455+
projects.delete,
456+
)
380457

381458
@cached_property
382459
def commits(self) -> CommitsResourceWithStreamingResponse:
@@ -401,6 +478,9 @@ def __init__(self, projects: AsyncProjectsResource) -> None:
401478
self.list = async_to_streamed_response_wrapper(
402479
projects.list,
403480
)
481+
self.delete = async_to_streamed_response_wrapper(
482+
projects.delete,
483+
)
404484

405485
@cached_property
406486
def commits(self) -> AsyncCommitsResourceWithStreamingResponse:

tests/api_resources/test_projects.py

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,44 @@ def test_streaming_response_list(self, client: Openlayer) -> None:
9595

9696
assert cast(Any, response.is_closed) is True
9797

98+
@parametrize
99+
def test_method_delete(self, client: Openlayer) -> None:
100+
project = client.projects.delete(
101+
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
102+
)
103+
assert project is None
104+
105+
@parametrize
106+
def test_raw_response_delete(self, client: Openlayer) -> None:
107+
response = client.projects.with_raw_response.delete(
108+
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
109+
)
110+
111+
assert response.is_closed is True
112+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
113+
project = response.parse()
114+
assert project is None
115+
116+
@parametrize
117+
def test_streaming_response_delete(self, client: Openlayer) -> None:
118+
with client.projects.with_streaming_response.delete(
119+
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
120+
) as response:
121+
assert not response.is_closed
122+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
123+
124+
project = response.parse()
125+
assert project is None
126+
127+
assert cast(Any, response.is_closed) is True
128+
129+
@parametrize
130+
def test_path_params_delete(self, client: Openlayer) -> None:
131+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"):
132+
client.projects.with_raw_response.delete(
133+
"",
134+
)
135+
98136

99137
class TestAsyncProjects:
100138
parametrize = pytest.mark.parametrize(
@@ -178,3 +216,41 @@ async def test_streaming_response_list(self, async_client: AsyncOpenlayer) -> No
178216
assert_matches_type(ProjectListResponse, project, path=["response"])
179217

180218
assert cast(Any, response.is_closed) is True
219+
220+
@parametrize
221+
async def test_method_delete(self, async_client: AsyncOpenlayer) -> None:
222+
project = await async_client.projects.delete(
223+
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
224+
)
225+
assert project is None
226+
227+
@parametrize
228+
async def test_raw_response_delete(self, async_client: AsyncOpenlayer) -> None:
229+
response = await async_client.projects.with_raw_response.delete(
230+
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
231+
)
232+
233+
assert response.is_closed is True
234+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
235+
project = await response.parse()
236+
assert project is None
237+
238+
@parametrize
239+
async def test_streaming_response_delete(self, async_client: AsyncOpenlayer) -> None:
240+
async with async_client.projects.with_streaming_response.delete(
241+
"182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
242+
) as response:
243+
assert not response.is_closed
244+
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
245+
246+
project = await response.parse()
247+
assert project is None
248+
249+
assert cast(Any, response.is_closed) is True
250+
251+
@parametrize
252+
async def test_path_params_delete(self, async_client: AsyncOpenlayer) -> None:
253+
with pytest.raises(ValueError, match=r"Expected a non-empty value for `project_id` but received ''"):
254+
await async_client.projects.with_raw_response.delete(
255+
"",
256+
)

0 commit comments

Comments
 (0)