Skip to content

Commit c0074c2

Browse files
committed
feat(restapi): show_deleted artifacts/entrypoints
1 parent 3b4745e commit c0074c2

File tree

8 files changed

+104
-37
lines changed

8 files changed

+104
-37
lines changed

src/dioptra/client/artifacts.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ def get(
7878
sort_by: str | None = None,
7979
descending: bool | None = None,
8080
search: str | None = None,
81+
show_deleted: bool | None = False,
8182
) -> T:
8283
"""Get a list of artifacts.
8384
@@ -115,6 +116,9 @@ def get(
115116
if group_id is not None:
116117
params["groupId"] = group_id
117118

119+
if show_deleted is not None:
120+
params["showDeleted"] = show_deleted
121+
118122
return self._session.get(
119123
self.url,
120124
params=params,

src/dioptra/client/entrypoints.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -713,6 +713,7 @@ def get(
713713
sort_by: str | None = None,
714714
descending: bool | None = None,
715715
search: str | None = None,
716+
show_deleted: bool | None = None,
716717
) -> T:
717718
"""Get a list of entrypoints.
718719
@@ -750,6 +751,9 @@ def get(
750751
if group_id is not None:
751752
params["groupId"] = group_id
752753

754+
if show_deleted is not None:
755+
params["showDeleted"] = show_deleted
756+
753757
return self._session.get(
754758
self.url,
755759
params=params,

src/dioptra/client/experiments.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,7 @@ def get(
598598
sort_by: str | None = None,
599599
descending: bool | None = None,
600600
search: str | None = None,
601+
show_deleted: bool | None = False,
601602
) -> T:
602603
"""Get a list of experiments.
603604
@@ -635,6 +636,9 @@ def get(
635636
if group_id is not None:
636637
params["groupId"] = group_id
637638

639+
if show_deleted is not None:
640+
params["showDeleted"] = show_deleted
641+
638642
return self._session.get(
639643
self.url,
640644
params=params,

src/dioptra/restapi/v1/artifacts/schema.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
GroupIdQueryParametersSchema,
3232
PagingQueryParametersSchema,
3333
SearchQueryParametersSchema,
34+
ShowDeletedQueryParametersSchema,
3435
SortByGetQueryParametersSchema,
3536
generate_base_resource_ref_schema,
3637
generate_base_resource_schema,
@@ -240,6 +241,7 @@ class ArtifactGetQueryParameters(
240241
GroupIdQueryParametersSchema,
241242
SearchQueryParametersSchema,
242243
SortByGetQueryParametersSchema,
244+
ShowDeletedQueryParametersSchema,
243245
):
244246
"""The query parameters for the GET method of the /artifacts endpoint."""
245247

src/dioptra/restapi/v1/artifacts/service.py

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -269,18 +269,29 @@ def get(
269269
construct_sql_query_filters(search_string, SEARCHABLE_FIELDS)
270270
)
271271

272-
allowed_deleted_values = [False, True] if show_deleted else [False]
273272

274-
stmt = (
273+
if not show_deleted:
274+
stmt = (
275275
select(func.count(models.Artifact.resource_id))
276276
.join(models.Resource)
277277
.where(
278278
*filters,
279-
models.Resource.is_deleted in allowed_deleted_values, # noqa: E712
279+
models.Resource.is_deleted == False, # noqa: E712
280280
models.Resource.latest_snapshot_id
281281
== models.Artifact.resource_snapshot_id,
282282
)
283283
)
284+
else:
285+
stmt = (
286+
select(func.count(models.Artifact.resource_id))
287+
.join(models.Resource)
288+
.where(
289+
*filters,
290+
models.Resource.latest_snapshot_id
291+
== models.Artifact.resource_snapshot_id,
292+
)
293+
)
294+
284295

285296
if output_params:
286297
stmt = self._apply_ouput_params_filter(stmt, output_params)
@@ -298,19 +309,32 @@ def get(
298309
if total_num_artifacts == 0:
299310
return [], total_num_artifacts
300311

301-
# get latest artifact snapshots
302-
latest_artifacts_stmt = (
303-
select(models.Artifact)
304-
.join(models.Resource)
305-
.where(
306-
*filters,
307-
models.Resource.is_deleted in allowed_deleted_values, # noqa: E712
308-
models.Resource.latest_snapshot_id
309-
== models.Artifact.resource_snapshot_id,
312+
if not show_deleted:
313+
# get latest artifact snapshots
314+
latest_artifacts_stmt = (
315+
select(models.Artifact)
316+
.join(models.Resource)
317+
.where(
318+
*filters,
319+
models.Resource.is_deleted == False, # noqa: E712
320+
models.Resource.latest_snapshot_id
321+
== models.Artifact.resource_snapshot_id,
322+
)
323+
.offset(page_index)
324+
.limit(page_length)
325+
)
326+
else:
327+
latest_artifacts_stmt = (
328+
select(models.Artifact)
329+
.join(models.Resource)
330+
.where(
331+
*filters,
332+
models.Resource.latest_snapshot_id
333+
== models.Artifact.resource_snapshot_id,
334+
)
335+
.offset(page_index)
336+
.limit(page_length)
310337
)
311-
.offset(page_index)
312-
.limit(page_length)
313-
)
314338

315339
if output_params:
316340
latest_artifacts_stmt = self._apply_ouput_params_filter(

src/dioptra/restapi/v1/entrypoints/schema.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
GroupIdQueryParametersSchema,
3030
PagingQueryParametersSchema,
3131
SearchQueryParametersSchema,
32+
ShowDeletedQueryParametersSchema,
3233
SortByGetQueryParametersSchema,
3334
generate_base_resource_ref_schema,
3435
generate_base_resource_schema,
@@ -320,5 +321,6 @@ class EntrypointGetQueryParameters(
320321
GroupIdQueryParametersSchema,
321322
SearchQueryParametersSchema,
322323
SortByGetQueryParametersSchema,
324+
ShowDeletedQueryParametersSchema,
323325
):
324326
"""The query parameters for the GET method of the /entrypoints endpoint."""

src/dioptra/restapi/v1/entrypoints/service.py

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -252,18 +252,28 @@ def get(
252252
construct_sql_query_filters(search_string, SEARCHABLE_FIELDS)
253253
)
254254

255-
allowed_deleted_values = [False, True] if show_deleted else [False]
256-
257-
stmt = (
258-
select(func.count(models.EntryPoint.resource_id))
259-
.join(models.Resource)
260-
.where(
261-
*filters,
262-
models.Resource.is_deleted in allowed_deleted_values, # noqa: E712
263-
models.Resource.latest_snapshot_id
264-
== models.EntryPoint.resource_snapshot_id,
255+
if not show_deleted:
256+
stmt = (
257+
select(func.count(models.EntryPoint.resource_id))
258+
.join(models.Resource)
259+
.where(
260+
*filters,
261+
models.Resource.is_deleted == False, # noqa: E712
262+
models.Resource.latest_snapshot_id
263+
== models.EntryPoint.resource_snapshot_id,
264+
)
265265
)
266-
)
266+
else:
267+
stmt = (
268+
select(func.count(models.EntryPoint.resource_id))
269+
.join(models.Resource)
270+
.where(
271+
*filters,
272+
models.Resource.latest_snapshot_id
273+
== models.EntryPoint.resource_snapshot_id,
274+
)
275+
)
276+
267277
total_num_entrypoints = db.session.scalars(stmt).first()
268278

269279
if total_num_entrypoints is None:
@@ -277,18 +287,31 @@ def get(
277287
if total_num_entrypoints == 0:
278288
return [], total_num_entrypoints
279289

280-
entrypoints_stmt = (
281-
select(models.EntryPoint)
282-
.join(models.Resource)
283-
.where(
284-
*filters,
285-
models.Resource.is_deleted in allowed_deleted_values, # noqa: E712
286-
models.Resource.latest_snapshot_id
287-
== models.EntryPoint.resource_snapshot_id,
290+
if not show_deleted:
291+
entrypoints_stmt = (
292+
select(models.EntryPoint)
293+
.join(models.Resource)
294+
.where(
295+
*filters,
296+
models.Resource.is_deleted == False, # noqa: E712
297+
models.Resource.latest_snapshot_id
298+
== models.EntryPoint.resource_snapshot_id,
299+
)
300+
.offset(page_index)
301+
.limit(page_length)
302+
)
303+
else:
304+
entrypoints_stmt = (
305+
select(models.EntryPoint)
306+
.join(models.Resource)
307+
.where(
308+
*filters,
309+
models.Resource.latest_snapshot_id
310+
== models.EntryPoint.resource_snapshot_id,
311+
)
312+
.offset(page_index)
313+
.limit(page_length)
288314
)
289-
.offset(page_index)
290-
.limit(page_length)
291-
)
292315

293316
if sort_by_string and sort_by_string in SORTABLE_FIELDS:
294317
sort_column = SORTABLE_FIELDS[sort_by_string]

tests/unit/restapi/test_utils.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def assert_retrieving_resource_works(
5050
descending: bool | None = None,
5151
search: str | None = None,
5252
paging_info: dict[str, Any] | None = None,
53+
show_deleted: bool | None = None
5354
) -> None:
5455
"""Build the query string from the provided parameters"""
5556
query_string: dict[str, Any] = {}
@@ -70,6 +71,9 @@ def assert_retrieving_resource_works(
7071
query_string["index"] = paging_info["index"]
7172
query_string["page_length"] = paging_info["page_length"]
7273

74+
if show_deleted is not None:
75+
query_string["show_deleted"] = show_deleted
76+
7377
response = dioptra_client.get(**query_string)
7478

7579
assert_http_response_matches_expected(

0 commit comments

Comments
 (0)