Skip to content

Commit 30c4c91

Browse files
add contents generator
1 parent 11e8793 commit 30c4c91

File tree

3 files changed

+57
-0
lines changed

3 files changed

+57
-0
lines changed

bioblend/_tests/TestGalaxyFolders.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,21 @@ def test_show_folder_contents_limit(self):
5454
assert len(f2["folder_contents"]) == 1
5555
assert f2["folder_contents"][0]["name"] == f"{self.name} 1"
5656

57+
@test_util.skip_unless_galaxy("release_21.05")
58+
def test_folder_contents(self):
59+
for i in range(12):
60+
self.gi.folders.create_folder(self.folder["id"], f"{self.name} {i}")
61+
62+
# check defaults for limit and offset
63+
f2 = list(self.gi.folders.contents(self.folder["id"]))
64+
assert len(f2) == 12
65+
assert f2[0]["name"] == f"{self.name} 0"
66+
67+
# check non defaults
68+
f2 = list(self.gi.folders.contents(self.folder["id"], limit=1))
69+
assert len(f2) == 12
70+
assert f2[0]["name"] == f"{self.name} 0"
71+
5772
@test_util.skip_unless_galaxy("release_21.01")
5873
def test_show_folder_contents_include_deleted(self):
5974
history = self.gi.histories.create_history(name="Test History")

bioblend/galaxy/datasets/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ def show_dataset(self, dataset_id: str, hda_ldda: HdaLdda = "hda") -> Dict[str,
6464
}
6565
return self._get(id=dataset_id, params=params)
6666

67+
# def delete(self, dataset_ids, hda_ldda: HdaLdda = "hda", purge: bool = False) -> Dict[str, Any]:
68+
# datasets = []
69+
# for dataset_id in dataset_ids:
70+
# datasets.append({"src": hda_ldda, "id": dataset_id})
71+
# payload = {"datasets": datasets, "purge": purge}
72+
# return self._delete(payload=payload)
73+
6774
def _initiate_download(
6875
self, dataset_id: str, stream_content: bool, require_ok_state: bool = True, maxwait: float = 12000
6976
) -> Tuple[Dict[str, Any], str, Response]:

bioblend/galaxy/folders/__init__.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from typing import (
66
Any,
77
Dict,
8+
Iterable,
89
List,
910
Literal,
1011
Optional,
@@ -85,6 +86,40 @@ def show_folder(
8586
}
8687
return self._get(id=folder_id, contents=contents, params=params)
8788

89+
def contents(
90+
self,
91+
folder_id: str,
92+
limit: int = 10,
93+
include_deleted: bool = False,
94+
) -> Iterable[Dict[str, Any]]:
95+
"""
96+
Iterate over folder contents.
97+
98+
:type folder_id: str
99+
:param folder_id: the folder's encoded id, prefixed by 'F'
100+
101+
:type limit: int
102+
:param limit: Batch size to be used internally (default: 10).
103+
104+
:type include_deleted: bool
105+
:param include_deleted: Include also deleted contents.
106+
107+
:rtype: dict
108+
:return: A generator for the folder contents
109+
"""
110+
total_rows: Optional[int] = None
111+
params = {
112+
"limit": limit,
113+
"offset": 0,
114+
"include_deleted": include_deleted,
115+
}
116+
117+
while total_rows is None or params["offset"] <= total_rows:
118+
chunk = self._get(id=folder_id, contents=True, params=params)
119+
total_rows = chunk["metadata"]["total_rows"]
120+
yield from chunk["folder_contents"]
121+
params["offset"] += limit
122+
88123
def delete_folder(self, folder_id: str, undelete: bool = False) -> Dict[str, Any]:
89124
"""
90125
Marks the folder with the given ``id`` as `deleted` (or removes the

0 commit comments

Comments
 (0)