Skip to content

Commit 9a21076

Browse files
authored
Merge pull request #528 from pvanheus/add_history_copy
Add copy_history verb and associated test
2 parents 85f9280 + e6bff03 commit 9a21076

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

bioblend/_tests/TestGalaxyHistories.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@ def test_create_history(self):
2828
assert new_history["name"] == history_name
2929
assert new_history["url"] is not None
3030

31+
def test_copy_history(self):
32+
history_id = self.history["id"]
33+
dataset1_id = self._test_dataset(history_id)
34+
copied_history_name = "Copied History"
35+
copied_history = self.gi.histories.copy_history(history_id, name=copied_history_name)
36+
assert copied_history["id"] is not None
37+
assert copied_history["name"] == copied_history_name
38+
copied_history_contents = self.gi.histories.show_history(copied_history["id"], contents=True)
39+
assert len(copied_history_contents) == 1
40+
assert copied_history_contents[0]["hid"] == 1
41+
assert copied_history_contents[0]["history_id"] == copied_history["id"]
42+
assert copied_history_contents[0]["id"] != dataset1_id
43+
3144
def test_update_history(self):
3245
new_name = "buildbot - automated test renamed"
3346
new_annotation = f"Annotation for {new_name}"

bioblend/galaxy/histories/__init__.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,31 @@ def create_history(self, name: str | None = None) -> dict[str, Any]:
5555
payload["name"] = name
5656
return self._post(payload)
5757

58+
def copy_history(self, history_id: str, name: str | None = None, all_datasets: bool = False) -> dict[str, Any]:
59+
"""
60+
Create a new history by copying an existing one.
61+
62+
:type history_id: str
63+
:param history_id: ID of the history to copy.
64+
65+
:type name: str
66+
:param name: Optional name for new history
67+
68+
:type all_datasets: bool
69+
:param all_datasets: Whether to copy also deleted datasets and dataset collections.
70+
71+
:rtype: dict
72+
:return: Dictionary containing information about the newly created history
73+
"""
74+
payload: dict[str, Any] = {"source": "history"}
75+
if name is not None:
76+
payload["name"] = name
77+
payload["history_id"] = history_id
78+
if all_datasets:
79+
payload["all_datasets"] = all_datasets
80+
81+
return self._post(payload)
82+
5883
def import_history(self, file_path: str | None = None, url: str | None = None) -> dict[str, Any]:
5984
"""
6085
Import a history from an archive on disk or a URL.

0 commit comments

Comments
 (0)