Skip to content

Commit 6450d41

Browse files
committed
Added support for illumina basespace filesource
1 parent 574b7e1 commit 6450d41

File tree

6 files changed

+75
-0
lines changed

6 files changed

+75
-0
lines changed

lib/galaxy/dependencies/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,9 @@ def check_fs_gcsfs(self):
241241
def check_fs_onedatafs(self):
242242
return 'onedata' in self.file_sources
243243

244+
def check_fs_basespace(self):
245+
return 'basespace' in self.file_sources
246+
244247
def check_watchdog(self):
245248
install_set = {'auto', 'True', 'true', 'polling', True}
246249
return (self.config['watch_tools'] in install_set

lib/galaxy/dependencies/conditional-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ fs.anvilfs # type: anvil
2323
fs.googledrivefs # type: googledrive
2424
fs-gcsfs # type: googlecloudstorage
2525
fs-onedatafs # type: onedata
26+
fs-basespace # type: basespace
2627

2728
# Chronos client
2829
chronos-python==1.2.1
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
try:
2+
from fs_basespace import BASESPACEFS
3+
except ImportError:
4+
BASESPACEFS = None
5+
6+
from ._pyfilesystem2 import PyFilesystem2FilesSource
7+
8+
9+
class BaseSpaceFilesSource(PyFilesystem2FilesSource):
10+
plugin_type = 'basespace'
11+
required_module = BASESPACEFS
12+
required_package = "fs-basespace"
13+
14+
def _open_fs(self, user_context):
15+
props = self._serialization_props(user_context)
16+
handle = BASESPACEFS(**props)
17+
return handle
18+
19+
20+
__all__ = ('BaseSpaceFilesSource',)

test/unit/files/_util.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ def user_context_fixture(user_ftp_dir=None, role_names=None, group_names=None, i
6363
'googlecloudstorage|bucket_name': 'genomics-public-data',
6464
'onedata|provider_host': os.environ.get('GALAXY_TEST_ONEDATA_PROVIDER_HOST'),
6565
'onedata|access_token': os.environ.get('GALAXY_TEST_ONEDATA_ACCESS_TOKEN'),
66+
'basespace|client_id': os.environ.get('GALAXY_TEST_ONEDATA_CLIENT_ID'),
67+
'basespace|client_secret': os.environ.get('GALAXY_TEST_ONEDATA_CLIENT_SECRET'),
68+
'basespace|access_token': os.environ.get('GALAXY_TEST_ONEDATA_ACCESS_TOKEN'),
6669
},
6770
role_names=role_names or set(),
6871
group_names=group_names or set(),
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
- type: basespace
2+
id: test1
3+
doc: Test access to Illumina BaseSpace
4+
basespace_server: https://api.basespace.illumina.com
5+
client_id: ${user.preferences['basespace|client_id']}
6+
client_secret: ${user.preferences['basespace|client_secret']}
7+
access_token: ${user.preferences['basespace|access_token']}

test/unit/files/test_basespace.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import os
2+
3+
import pytest
4+
5+
from galaxy.files import ConfiguredFileSources, ConfiguredFileSourcesConfig
6+
from ._util import (
7+
assert_realizes_as,
8+
find,
9+
user_context_fixture,
10+
)
11+
SCRIPT_DIRECTORY = os.path.abspath(os.path.dirname(__file__))
12+
FILE_SOURCES_CONF = os.path.join(SCRIPT_DIRECTORY, "basespace_file_sources_conf.yml")
13+
14+
skip_if_no_basespace_access_token = pytest.mark.skipif(
15+
not os.environ.get('GALAXY_TEST_BASESPACE_CLIENT_ID')
16+
and not os.environ.get('GALAXY_TEST_BASESPACE_CLIENT_SECRET')
17+
and not os.environ.get('GALAXY_TEST_BASESPACE_ACCESS_TOKEN')
18+
and not os.environ.get('GALAXY_TEST_BASESPACE_TEST_FILE_PATH'),
19+
reason="GALAXY_TEST_BASESPACE_CLIENT_ID and related vars not set"
20+
)
21+
22+
23+
@skip_if_no_basespace_access_token
24+
def test_file_source():
25+
user_context = user_context_fixture()
26+
file_sources = _configured_file_sources()
27+
file_source_pair = file_sources.get_file_source_path("gxfiles://test1")
28+
29+
assert file_source_pair.path == "/"
30+
file_source = file_source_pair.file_source
31+
test_file = os.environ.get('GALAXY_TEST_BASESPACE_TEST_FILE_PATH')
32+
res = file_source.list(os.path.dirname(test_file), recursive=False, user_context=user_context)
33+
a_file = find(res, class_="File", name=os.path.basename(test_file))
34+
assert a_file
35+
36+
assert_realizes_as(file_sources, a_file['uri'], "a\n", user_context=user_context)
37+
38+
39+
def _configured_file_sources(conf_file=FILE_SOURCES_CONF):
40+
file_sources_config = ConfiguredFileSourcesConfig()
41+
return ConfiguredFileSources(file_sources_config, conf_file=conf_file)

0 commit comments

Comments
 (0)