Skip to content

Commit

Permalink
[PY-401][external] Restore Meta Item & ItemQuery functions (#718)
Browse files Browse the repository at this point in the history
* Meta functions & tests to restore items

* Test fixes
  • Loading branch information
JBWilkie authored Nov 16, 2023
1 parent 375ea7f commit edd9c76
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 0 deletions.
13 changes: 13 additions & 0 deletions darwin/future/meta/objects/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from darwin.future.core.items.delete_items import delete_list_of_items
from darwin.future.core.items.move_items_to_folder import move_list_of_items_to_folder
from darwin.future.core.items.restore_items import restore_list_of_items
from darwin.future.data_objects.item import ItemCore, ItemLayout, ItemSlot
from darwin.future.meta.objects.base import MetaBase

Expand Down Expand Up @@ -66,6 +67,18 @@ def move_to_folder(self, path: str) -> None:
filters = {"item_ids": [str(self.id)]}
move_list_of_items_to_folder(self.client, team_slug, dataset_id, path, filters)

def restore(self) -> None:
team_slug, dataset_id = (
self.meta_params["team_slug"],
self.meta_params["dataset_id"]
if "dataset_id" in self.meta_params
else self.meta_params["dataset_ids"],
)
assert isinstance(team_slug, str)
dataset_id = cast(Union[int, List[int]], dataset_id)
filters = {"item_ids": [str(self.id)]}
restore_list_of_items(self.client, team_slug, dataset_id, filters)

@property
def name(self) -> str:
return self._element.name
Expand Down
20 changes: 20 additions & 0 deletions darwin/future/meta/queries/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from darwin.future.core.items.delete_items import delete_list_of_items
from darwin.future.core.items.get import list_items
from darwin.future.core.items.move_items_to_folder import move_list_of_items_to_folder
from darwin.future.core.items.restore_items import restore_list_of_items
from darwin.future.core.types.common import QueryString
from darwin.future.core.types.query import PaginatedQuery
from darwin.future.meta.objects.item import Item
Expand Down Expand Up @@ -81,3 +82,22 @@ def move_to_folder(self, path) -> None:
ids = [item.id for item in self]
filters = {"item_ids": [str(item) for item in ids]}
move_list_of_items_to_folder(self.client, team_slug, dataset_ids, path, filters)

def restore(self) -> None:
if "team_slug" not in self.meta_params:
raise ValueError("Must specify team_slug to query items")
if (
"dataset_ids" not in self.meta_params
and "dataset_id" not in self.meta_params
):
raise ValueError("Must specify dataset_ids to query items")
dataset_ids = (
self.meta_params["dataset_ids"]
if "dataset_ids" in self.meta_params
else self.meta_params["dataset_id"]
)
team_slug = self.meta_params["team_slug"]
self.collect_all()
ids = [item.id for item in self]
filters = {"item_ids": [str(item) for item in ids]}
restore_list_of_items(self.client, team_slug, dataset_ids, filters)
23 changes: 23 additions & 0 deletions darwin/future/tests/meta/objects/test_itemmeta.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,26 @@ def test_move_to_folder_raises_on_incorrect_parameters(item: Item) -> None:
)
with pytest.raises(BadRequest):
item.move_to_folder(path)


def test_restore(item: Item) -> None:
with responses.RequestsMock() as rsps:
team_slug = item.meta_params["team_slug"]
dataset_id = item.meta_params["dataset_id"]
rsps.add(
rsps.POST,
item.client.config.api_endpoint + f"v2/teams/{team_slug}/items/restore",
status=200,
match=[
json_params_matcher(
{
"filters": {
"item_ids": [str(item.id)],
"dataset_ids": [dataset_id],
}
}
)
],
json={},
)
item.restore()
35 changes: 35 additions & 0 deletions darwin/future/tests/meta/queries/test_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,38 @@ def test_move_to_folder_raises_on_incorrect_parameters(
)
with pytest.raises(BadRequest):
item_query.move_to_folder(path)


def test_restore(
item_query: ItemQuery, items_json: List[dict], items: List[Item]
) -> None:
with responses.RequestsMock() as rsps:
rsps.add(
rsps.GET,
item_query.client.config.api_endpoint + "v2/teams/test/items",
match=[
query_param_matcher(
{"page[offset]": "0", "page[size]": "500", "dataset_ids": "1"}
)
],
json={"items": items_json, "errors": []},
)
team_slug = items[0].meta_params["team_slug"]
dataset_id = items[0].meta_params["dataset_id"]
rsps.add(
rsps.POST,
items[0].client.config.api_endpoint + f"v2/teams/{team_slug}/items/restore",
status=200,
match=[
json_params_matcher(
{
"filters": {
"item_ids": [str(item.id) for item in items],
"dataset_ids": [dataset_id],
}
}
)
],
json={},
)
item_query.restore()

0 comments on commit edd9c76

Please sign in to comment.