From 4c893f3ec3cd9453b6243d0c756aa8916821117b Mon Sep 17 00:00:00 2001 From: John Wilkie Date: Mon, 13 Nov 2023 21:56:03 +0000 Subject: [PATCH 1/3] Meta functions & tests to archive items --- darwin/future/meta/objects/item.py | 13 +++++++ darwin/future/meta/queries/item.py | 20 +++++++++++ .../tests/meta/objects/test_itemmeta.py | 23 ++++++++++++ darwin/future/tests/meta/queries/test_item.py | 35 +++++++++++++++++++ 4 files changed, 91 insertions(+) diff --git a/darwin/future/meta/objects/item.py b/darwin/future/meta/objects/item.py index 7b438f721..c8c6ded70 100644 --- a/darwin/future/meta/objects/item.py +++ b/darwin/future/meta/objects/item.py @@ -3,6 +3,7 @@ from typing import Dict, List, Optional, Union, cast from uuid import UUID +from darwin.future.core.items.archive_items import archive_list_of_items from darwin.future.core.items.delete_items import delete_list_of_items from darwin.future.data_objects.item import ItemCore, ItemLayout, ItemSlot from darwin.future.meta.objects.base import MetaBase @@ -53,6 +54,18 @@ def delete(self) -> None: filters = {"item_ids": [str(self.id)]} delete_list_of_items(self.client, team_slug, dataset_id, filters) + def archive(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)]} + archive_list_of_items(self.client, team_slug, dataset_id, filters) + @property def name(self) -> str: return self._element.name diff --git a/darwin/future/meta/queries/item.py b/darwin/future/meta/queries/item.py index 5fd13e0e1..e8fd3916a 100644 --- a/darwin/future/meta/queries/item.py +++ b/darwin/future/meta/queries/item.py @@ -1,6 +1,7 @@ from functools import reduce from typing import Dict +from darwin.future.core.items.archive_items import archive_list_of_items 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.types.common import QueryString @@ -59,3 +60,22 @@ def delete(self) -> None: ids = [item.id for item in self] filters = {"item_ids": [str(item) for item in ids]} delete_list_of_items(self.client, team_slug, dataset_ids, filters) + + def archive(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]} + archive_list_of_items(self.client, team_slug, dataset_ids, filters) diff --git a/darwin/future/tests/meta/objects/test_itemmeta.py b/darwin/future/tests/meta/objects/test_itemmeta.py index ada047eb2..a28d44b72 100644 --- a/darwin/future/tests/meta/objects/test_itemmeta.py +++ b/darwin/future/tests/meta/objects/test_itemmeta.py @@ -44,3 +44,26 @@ def test_delete(item: Item) -> None: json={}, ) item.delete() + + +def test_archive(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/archive", + status=200, + match=[ + json_params_matcher( + { + "filters": { + "item_ids": [str(item.id)], + "dataset_ids": [dataset_id], + } + } + ) + ], + json={}, + ) + item.archive() diff --git a/darwin/future/tests/meta/queries/test_item.py b/darwin/future/tests/meta/queries/test_item.py index 3824a8788..ab878a974 100644 --- a/darwin/future/tests/meta/queries/test_item.py +++ b/darwin/future/tests/meta/queries/test_item.py @@ -70,3 +70,38 @@ def test_delete( json={}, ) item_query.delete() + + +def test_archive( + 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/archive", + status=200, + match=[ + json_params_matcher( + { + "filters": { + "item_ids": [str(item.id) for item in items], + "dataset_ids": [dataset_id], + } + } + ) + ], + json={}, + ) + item_query.archive() From d8f002d577a5ba50eddbc729761e8272fea94146 Mon Sep 17 00:00:00 2001 From: John Wilkie Date: Thu, 16 Nov 2023 13:08:33 +0000 Subject: [PATCH 2/3] Test improvements --- darwin/future/tests/meta/objects/test_itemmeta.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/darwin/future/tests/meta/objects/test_itemmeta.py b/darwin/future/tests/meta/objects/test_itemmeta.py index a28d44b72..9f666a292 100644 --- a/darwin/future/tests/meta/objects/test_itemmeta.py +++ b/darwin/future/tests/meta/objects/test_itemmeta.py @@ -46,6 +46,12 @@ def test_delete(item: Item) -> None: item.delete() +def test_delete_with_bad_team_slug(item: Item) -> None: + with pytest.raises(AssertionError): + item.meta_params["team_slug"] = 123 + item.delete() + + def test_archive(item: Item) -> None: with responses.RequestsMock() as rsps: team_slug = item.meta_params["team_slug"] @@ -67,3 +73,9 @@ def test_archive(item: Item) -> None: json={}, ) item.archive() + + +def test_archive_with_bad_team_slug(item: Item) -> None: + with pytest.raises(AssertionError): + item.meta_params["team_slug"] = 123 + item.archive() From 18dcffd31b8e5a0d1cafa103cd4d8de3d984bb2d Mon Sep 17 00:00:00 2001 From: John Wilkie Date: Thu, 16 Nov 2023 13:26:44 +0000 Subject: [PATCH 3/3] Linting --- darwin/future/meta/objects/item.py | 2 +- darwin/future/meta/queries/item.py | 5 ++--- darwin/future/tests/meta/objects/test_itemmeta.py | 14 +++++++------- darwin/future/tests/meta/queries/test_item.py | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/darwin/future/meta/objects/item.py b/darwin/future/meta/objects/item.py index 24ef33cca..d531ee8a2 100644 --- a/darwin/future/meta/objects/item.py +++ b/darwin/future/meta/objects/item.py @@ -79,7 +79,7 @@ def restore(self) -> None: 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) - + def archive(self) -> None: team_slug, dataset_id = ( self.meta_params["team_slug"], diff --git a/darwin/future/meta/queries/item.py b/darwin/future/meta/queries/item.py index ef286f0e8..e868e8228 100644 --- a/darwin/future/meta/queries/item.py +++ b/darwin/future/meta/queries/item.py @@ -43,7 +43,7 @@ def _collect(self) -> Dict[int, Item]: for i, item in enumerate(items_core) } return items - + def delete(self) -> None: if "team_slug" not in self.meta_params: raise ValueError("Must specify team_slug to query items") @@ -102,7 +102,7 @@ def restore(self) -> None: 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) - + def archive(self) -> None: if "team_slug" not in self.meta_params: raise ValueError("Must specify team_slug to query items") @@ -121,4 +121,3 @@ def archive(self) -> None: ids = [item.id for item in self] filters = {"item_ids": [str(item) for item in ids]} archive_list_of_items(self.client, team_slug, dataset_ids, filters) - diff --git a/darwin/future/tests/meta/objects/test_itemmeta.py b/darwin/future/tests/meta/objects/test_itemmeta.py index f7daa5acc..d9134bd5c 100644 --- a/darwin/future/tests/meta/objects/test_itemmeta.py +++ b/darwin/future/tests/meta/objects/test_itemmeta.py @@ -46,8 +46,8 @@ def test_delete(item: Item) -> None: json={}, ) item.delete() - - + + def test_delete_with_bad_team_slug(item: Item) -> None: with pytest.raises(AssertionError): item.meta_params["team_slug"] = 123 @@ -103,8 +103,8 @@ def test_move_to_folder_raises_on_incorrect_parameters(item: Item) -> None: ) with pytest.raises(BadRequest): item.move_to_folder(path) - - + + def test_move_to_folder_with_bad_team_slug(item: Item) -> None: with pytest.raises(AssertionError): path = "/new_folder" @@ -133,13 +133,13 @@ def test_restore(item: Item) -> None: json={}, ) item.restore() - - + + def test_restore_with_bad_team_slug(item: Item) -> None: with pytest.raises(AssertionError): item.meta_params["team_slug"] = 123 item.restore() - + def test_archive(item: Item) -> None: with responses.RequestsMock() as rsps: diff --git a/darwin/future/tests/meta/queries/test_item.py b/darwin/future/tests/meta/queries/test_item.py index 79bd620d1..abae86b5c 100644 --- a/darwin/future/tests/meta/queries/test_item.py +++ b/darwin/future/tests/meta/queries/test_item.py @@ -37,7 +37,7 @@ def test_item_query_collect(item_query: ItemQuery, items_json: List[dict]) -> No for i in range(5): assert items[i].name == f"item_{i}" - + def test_delete( item_query: ItemQuery, items_json: List[dict], items: List[Item] ) -> None: