comparison env/lib/python3.9/site-packages/bioblend/_tests/test_util.py @ 0:4f3585e2f14b draft default tip

"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author shellac
date Mon, 22 Mar 2021 18:12:50 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:4f3585e2f14b
1 """ General support infrastructure not tied to any particular test.
2 """
3 import os
4 import random
5 import string
6 import unittest
7
8 import bioblend
9
10 NO_CLOUDMAN_MESSAGE = "CloudMan required and no CloudMan AMI configured."
11 NO_GALAXY_MESSAGE = "Externally configured Galaxy required, but not found. Set BIOBLEND_GALAXY_URL and BIOBLEND_GALAXY_API_KEY to run this test."
12 OLD_GALAXY_RELEASE = "Testing on Galaxy %s, but need %s to run this test."
13 MISSING_TOOL_MESSAGE = "Externally configured Galaxy instance requires tool %s to run test."
14
15
16 def skip_unless_cloudman():
17 """ Decorate tests with this to skip the test if CloudMan is not
18 configured.
19 """
20 if 'BIOBLEND_AMI_ID' not in os.environ:
21 return unittest.skip(NO_CLOUDMAN_MESSAGE)
22 else:
23 return lambda f: f
24
25
26 def skip_unless_galaxy(min_release=None):
27 """ Decorate tests with this to skip the test if Galaxy is not
28 configured.
29 """
30 if min_release is not None:
31 galaxy_release = os.environ.get('GALAXY_VERSION', None)
32 if galaxy_release is not None and galaxy_release != 'dev':
33 if not galaxy_release.startswith('release_'):
34 raise ValueError("The value of GALAXY_VERSION environment variable should start with 'release_'")
35 if not min_release.startswith('release_'):
36 raise Exception("min_release should start with 'release_'")
37 if galaxy_release[8:] < min_release[8:]:
38 return unittest.skip(OLD_GALAXY_RELEASE % (galaxy_release, min_release))
39
40 if 'BIOBLEND_GALAXY_URL' not in os.environ:
41 return unittest.skip(NO_GALAXY_MESSAGE)
42
43 if 'BIOBLEND_GALAXY_API_KEY' not in os.environ and 'BIOBLEND_GALAXY_MASTER_API_KEY' in os.environ:
44 galaxy_url = os.environ['BIOBLEND_GALAXY_URL']
45 galaxy_master_api_key = os.environ['BIOBLEND_GALAXY_MASTER_API_KEY']
46 gi = bioblend.galaxy.GalaxyInstance(galaxy_url, galaxy_master_api_key)
47
48 if 'BIOBLEND_GALAXY_USER_EMAIL' in os.environ:
49 galaxy_user_email = os.environ['BIOBLEND_GALAXY_USER_EMAIL']
50 else:
51 galaxy_user_email = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(5)) + "@localhost.localdomain"
52
53 galaxy_user_id = None
54 for user in gi.users.get_users():
55 if user["email"] == galaxy_user_email:
56 galaxy_user_id = user["id"]
57 break
58
59 if galaxy_user_id is None:
60 try:
61 config = gi.config.get_config()
62 except Exception:
63 # If older Galaxy for instance just assume use_remote_user is False.
64 config = {}
65
66 if config.get("use_remote_user", False):
67 new_user = gi.users.create_remote_user(galaxy_user_email)
68 else:
69 galaxy_user = galaxy_user_email.split("@", 1)[0]
70 galaxy_password = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(20))
71
72 # Create a new user and get a new API key for her
73 new_user = gi.users.create_local_user(galaxy_user, galaxy_user_email, galaxy_password)
74 galaxy_user_id = new_user["id"]
75
76 api_key = gi.users.create_user_apikey(galaxy_user_id)
77 os.environ["BIOBLEND_GALAXY_API_KEY"] = api_key
78
79 if 'BIOBLEND_GALAXY_API_KEY' not in os.environ:
80 return unittest.skip(NO_GALAXY_MESSAGE)
81
82 return lambda f: f
83
84
85 def skip_unless_tool(tool_id):
86 """ Decorate a Galaxy test method as requiring a specific tool,
87 skip the test case if the tool is unavailable.
88 """
89
90 def method_wrapper(method):
91
92 def wrapped_method(has_gi, *args, **kwargs):
93 tools = has_gi.gi.tools.get_tools()
94 # In panels by default, so flatten out sections...
95 tool_ids = [_['id'] for _ in tools]
96 if tool_id not in tool_ids:
97 raise unittest.SkipTest(MISSING_TOOL_MESSAGE % tool_id)
98
99 return method(has_gi, *args, **kwargs)
100
101 # Must preserve method name so nose can detect and report tests by
102 # name.
103 wrapped_method.__name__ = method.__name__
104 return wrapped_method
105
106 return method_wrapper
107
108
109 def get_abspath(path):
110 return os.path.abspath(os.path.join(os.path.dirname(__file__), path))