File: TestGalaxyLibraries.py

package info (click to toggle)
python-bioblend 1.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,096 kB
  • sloc: python: 7,596; sh: 219; makefile: 158
file content (165 lines) | stat: -rw-r--r-- 8,145 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import os
import tempfile

from . import (
    GalaxyTestBase,
    test_util,
)

FOO_DATA = "foo\nbar\n"


class TestGalaxyLibraries(GalaxyTestBase.GalaxyTestBase):
    def setUp(self):
        super().setUp()
        self.name = "automated test library"
        self.library = self.gi.libraries.create_library(
            self.name, description="automated test", synopsis="automated test synopsis"
        )

    def tearDown(self):
        self.gi.libraries.delete_library(self.library["id"])

    def test_create_library(self):
        assert self.library["name"] == self.name
        assert self.library["id"] is not None

    def test_get_libraries(self):
        libraries_with_name = self.gi.libraries.get_libraries(name=self.name)
        assert len([lib for lib in libraries_with_name if lib["id"] == self.library["id"]]) == 1

        deleted_name = "deleted test library"
        deleted_library_id = self.gi.libraries.create_library(
            deleted_name, description="a deleted library", synopsis="automated test synopsis"
        )["id"]
        self.gi.libraries.delete_library(deleted_library_id)
        deleted_libraries_with_name = self.gi.libraries.get_libraries(name=deleted_name, deleted=True)
        assert len([lib for lib in deleted_libraries_with_name if lib["id"] == deleted_library_id]) == 1

        all_non_deleted_libraries = self.gi.libraries.get_libraries(deleted=False)
        assert len([lib for lib in all_non_deleted_libraries if lib["id"] == self.library["id"]]) == 1
        assert [lib for lib in all_non_deleted_libraries if lib["id"] == deleted_library_id] == []

        all_deleted_libraries = self.gi.libraries.get_libraries(deleted=True)
        assert [lib for lib in all_deleted_libraries if lib["id"] == self.library["id"]] == []
        assert len([lib for lib in all_deleted_libraries if lib["id"] == deleted_library_id]) == 1

        all_libraries = self.gi.libraries.get_libraries(deleted=None)
        assert len([lib for lib in all_libraries if lib["id"] == self.library["id"]]) == 1
        assert len([lib for lib in all_libraries if lib["id"] == deleted_library_id]) == 1

    def test_show_library(self):
        library_data = self.gi.libraries.show_library(self.library["id"])
        assert self.library["id"] == library_data["id"]
        assert self.library["name"] == library_data["name"]

    def test_upload_file_from_url(self):
        url = "https://zenodo.org/record/582600/files/wildtype.fna?download=1"
        ret = self.gi.libraries.upload_file_from_url(self.library["id"], url)
        assert len(ret) == 1
        ldda_dict = ret[0]
        assert ldda_dict["name"] == url

    def test_upload_file_contents(self):
        ret = self.gi.libraries.upload_file_contents(self.library["id"], FOO_DATA)
        assert len(ret) == 1
        ldda_dict = ret[0]
        assert ldda_dict["name"] == "Pasted Entry"

    def test_upload_file_from_local_path(self):
        with tempfile.NamedTemporaryFile(mode="w", prefix="bioblend_test_") as f:
            f.write(FOO_DATA)
            f.flush()
            filename = f.name
            ret = self.gi.libraries.upload_file_from_local_path(self.library["id"], filename)
        assert len(ret) == 1
        ldda_dict = ret[0]
        assert ldda_dict["name"] == os.path.basename(filename)

    # def test_upload_file_from_server(self):
    #     pass

    def test_upload_from_galaxy_filesystem(self):
        bnames = [f"f{i}.txt" for i in range(2)]
        with tempfile.TemporaryDirectory() as tempdir:
            fnames = [os.path.join(tempdir, _) for _ in bnames]
            for fn in fnames:
                with open(fn, "w") as f:
                    f.write(FOO_DATA)
            filesystem_paths = "\n".join(fnames)
            ret = self.gi.libraries.upload_from_galaxy_filesystem(self.library["id"], filesystem_paths)
            for fn, dataset_dict in zip(fnames, ret):
                dataset = self.gi.libraries.wait_for_dataset(self.library["id"], dataset_dict["id"])
                assert dataset["state"] == "ok"
                assert dataset["name"] == os.path.basename(fn)
            ret = self.gi.libraries.upload_from_galaxy_filesystem(
                self.library["id"], filesystem_paths, link_data_only="link_to_files"
            )
            for fn, dataset_dict in zip(fnames, ret):
                dataset = self.gi.libraries.wait_for_dataset(self.library["id"], dataset_dict["id"])
                assert dataset["state"] == "ok"
                assert dataset["name"] == os.path.basename(fn)

    def test_copy_from_dataset(self):
        history = self.gi.histories.create_history()
        dataset_id = self._test_dataset(history["id"])
        self.gi.libraries.copy_from_dataset(self.library["id"], dataset_id, message="Copied from dataset")

    def test_update_dataset(self):
        library_id = self.library["id"]
        dataset1 = self.gi.libraries.upload_file_contents(library_id, FOO_DATA)
        updated_dataset = self.gi.libraries.update_library_dataset(
            dataset1[0]["id"], name="Modified name", misc_info="Modified the name succesfully"
        )
        assert updated_dataset["name"] == "Modified name"
        assert updated_dataset["misc_info"] == "Modified the name succesfully"

    def test_library_permissions(self):
        current_user = self.gi.users.get_current_user()
        user_id_list_new = [current_user["id"]]
        self.gi.libraries.set_library_permissions(
            self.library["id"],
            access_in=user_id_list_new,
            modify_in=user_id_list_new,
            add_in=user_id_list_new,
            manage_in=user_id_list_new,
        )
        ret = self.gi.libraries.get_library_permissions(self.library["id"])
        assert {_[1] for _ in ret["access_library_role_list"]} == set(user_id_list_new)
        assert {_[1] for _ in ret["modify_library_role_list"]} == set(user_id_list_new)
        assert {_[1] for _ in ret["add_library_item_role_list"]} == set(user_id_list_new)
        assert {_[1] for _ in ret["manage_library_role_list"]} == set(user_id_list_new)

    def test_dataset_permissions(self):
        current_user = self.gi.users.get_current_user()
        user_id_list_new = [current_user["id"]]
        library_id = self.library["id"]
        dataset1 = self.gi.libraries.upload_file_contents(library_id, FOO_DATA)
        ret = self.gi.libraries.set_dataset_permissions(
            dataset1[0]["id"], access_in=user_id_list_new, modify_in=user_id_list_new, manage_in=user_id_list_new
        )
        assert {_[1] for _ in ret["access_dataset_roles"]} == set(user_id_list_new)
        assert {_[1] for _ in ret["modify_item_roles"]} == set(user_id_list_new)
        assert {_[1] for _ in ret["manage_dataset_roles"]} == set(user_id_list_new)
        # test get_dataset_permissions
        ret_get = self.gi.libraries.get_dataset_permissions(dataset1[0]["id"])
        assert {_[1] for _ in ret_get["access_dataset_roles"]} == set(user_id_list_new)
        assert {_[1] for _ in ret_get["modify_item_roles"]} == set(user_id_list_new)
        assert {_[1] for _ in ret_get["manage_dataset_roles"]} == set(user_id_list_new)

    @test_util.skip_unless_galaxy("release_19.09")
    def test_upload_file_contents_with_tags(self):
        datasets = self.gi.libraries.upload_file_contents(self.library["id"], FOO_DATA, tags=["name:foobar", "barfoo"])
        dataset_show = self.gi.libraries.show_dataset(self.library["id"], datasets[0]["id"])
        assert dataset_show["tags"] == "name:foobar, barfoo"

    @test_util.skip_unless_galaxy("release_19.09")
    def test_update_dataset_tags(self):
        datasets = self.gi.libraries.upload_file_contents(self.library["id"], FOO_DATA)
        dataset_show = self.gi.libraries.show_dataset(self.library["id"], datasets[0]["id"])
        assert dataset_show["tags"] == ""

        updated_dataset = self.gi.libraries.update_library_dataset(datasets[0]["id"], tags=["name:foobar", "barfoo"])
        dataset_show = self.gi.libraries.show_dataset(self.library["id"], updated_dataset["id"])

        assert dataset_show["tags"] == "name:foobar, barfoo"