Skip to content

Commit 28ab1ec

Browse files
starting to document
1 parent c8bef7f commit 28ab1ec

File tree

3 files changed

+78
-73
lines changed

3 files changed

+78
-73
lines changed

biosimulators_test_suite/config.py

+66-67
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"""
88

99
import os
10+
from typing import Union
1011

1112

1213
class Config(object):
@@ -36,30 +37,27 @@ class Config(object):
3637
runbiosimulations_api_endpoint (:obj:`str`): Base URL for the runBioSimulations API
3738
test_case_timeout (:obj:`int`): time out for test cases in seconds
3839
user_to_exec_in_simulator_containers (:obj:`str` or :obj:`None`): user id or name to execute calls inside simulator containers
39-
4040
* Use ``_CURRENT_USER_`` to indicate that the Docker container should execute commands as the current user (``os.getuid()``)
4141
* Use the format ``<name|uid>[:<group|gid>]`` to indicate any other user/group that the Docker container should use to
4242
execute commands
43-
4443
singularity_image_dirname (:obj:`str`): directory to save Singularity images
4544
"""
4645

4746
def __init__(self,
48-
pull_docker_image=None, docker_hub_username=None, docker_hub_token=None,
49-
biosimulators_auth_endpoint=None, biosimulators_audience=None,
50-
biosimulators_api_client_id=None, biosimulators_api_client_secret=None,
51-
biosimulators_prod_api_endpoint=None,
52-
biosimulators_dev_api_endpoint=None,
53-
biosimulators_curator_gh_ids=None, biosimulators_default_specifications_version=None,
54-
biosimulators_default_image_version=None, biosimulators_docker_registry_url=None,
55-
biosimulators_docker_registry_username=None, biosimulators_docker_registry_token=None,
56-
biosimulators_docker_image_url_pattern=None,
57-
runbiosimulations_auth_endpoint=None, runbiosimulations_audience=None,
58-
runbiosimulations_api_client_id=None, runbiosimulations_api_client_secret=None,
59-
runbiosimulations_api_endpoint=None,
60-
test_case_timeout=None,
61-
user_to_exec_in_simulator_containers=None,
62-
singularity_image_dirname=None):
47+
pull_docker_image: bool = None, docker_hub_username: str = None, docker_hub_token: str = None,
48+
biosimulators_auth_endpoint: str = None, biosimulators_audience: str = None,
49+
biosimulators_api_client_id: str = None, biosimulators_api_client_secret: str = None,
50+
biosimulators_prod_api_endpoint: str = None, biosimulators_dev_api_endpoint: str = None,
51+
biosimulators_curator_gh_ids: "list[str]" = None, biosimulators_default_specifications_version: str = None,
52+
biosimulators_default_image_version: str = None, biosimulators_docker_registry_url: str = None,
53+
biosimulators_docker_registry_username: str = None, biosimulators_docker_registry_token: str = None,
54+
biosimulators_docker_image_url_pattern: str = None,
55+
runbiosimulations_auth_endpoint: str = None, runbiosimulations_audience: str = None,
56+
runbiosimulations_api_client_id: str = None, runbiosimulations_api_client_secret: str = None,
57+
runbiosimulations_api_endpoint: str = None,
58+
test_case_timeout: int = None,
59+
user_to_exec_in_simulator_containers: "Union[str, None]" = None,
60+
singularity_image_dirname: str = None):
6361
"""
6462
Args:
6563
pull_docker_image (:obj:`bool`, optional): whether to pull the Docker image for the simulator (default: :obj:`True`)
@@ -94,134 +92,135 @@ def __init__(self,
9492
"""
9593
# Docker registry
9694
if pull_docker_image is None:
97-
self.pull_docker_image = os.getenv('PULL_DOCKER_IMAGE', '1').lower() in ['1', 'true']
95+
self.pull_docker_image: bool = os.getenv('PULL_DOCKER_IMAGE', '1').lower() in ['1', 'true']
9896
else:
99-
self.pull_docker_image = pull_docker_image
97+
self.pull_docker_image: bool = pull_docker_image
10098

10199
# Docker Hub
102100
if docker_hub_username is None:
103-
self.docker_hub_username = os.getenv('DOCKER_HUB_USERNAME')
101+
self.docker_hub_username: str = os.getenv('DOCKER_HUB_USERNAME')
104102
else:
105-
self.docker_hub_username = docker_hub_username
103+
self.docker_hub_username: str = docker_hub_username
106104

107105
if docker_hub_token is None:
108-
self.docker_hub_token = os.getenv('DOCKER_HUB_TOKEN')
106+
self.docker_hub_token: str = os.getenv('DOCKER_HUB_TOKEN')
109107
else:
110-
self.docker_hub_token = docker_hub_token
108+
self.docker_hub_token: str = docker_hub_token
111109

112110
# BioSimulators
113111
if biosimulators_auth_endpoint is None:
114-
self.biosimulators_auth_endpoint = os.getenv('BIOSIMULATORS_AUTH_ENDPOINT', 'https://auth.biosimulations.org/oauth/token')
112+
self.biosimulators_auth_endpoint: str = os.getenv('BIOSIMULATORS_AUTH_ENDPOINT', 'https://auth.biosimulations.org/oauth/token')
115113
else:
116-
self.biosimulators_auth_endpoint = biosimulators_auth_endpoint
114+
self.biosimulators_auth_endpoint: str = biosimulators_auth_endpoint
117115

118116
if biosimulators_audience is None:
119-
self.biosimulators_audience = os.getenv('BIOSIMULATORS_AUDIENCE', 'api.biosimulators.org')
117+
self.biosimulators_audience: str = os.getenv('BIOSIMULATORS_AUDIENCE', 'api.biosimulators.org')
120118
else:
121-
self.biosimulators_audience = biosimulators_audience
119+
self.biosimulators_audience: str = biosimulators_audience
122120

123121
if biosimulators_api_client_id is None:
124-
self.biosimulators_api_client_id = os.getenv('BIOSIMULATORS_API_CLIENT_ID')
122+
self.biosimulators_api_client_id: str = os.getenv('BIOSIMULATORS_API_CLIENT_ID')
125123
else:
126-
self.biosimulators_api_client_id = biosimulators_api_client_id
124+
self.biosimulators_api_client_id: str = biosimulators_api_client_id
127125

128126
if biosimulators_api_client_secret is None:
129-
self.biosimulators_api_client_secret = os.getenv('BIOSIMULATORS_API_CLIENT_SECRET')
127+
self.biosimulators_api_client_secret: str = os.getenv('BIOSIMULATORS_API_CLIENT_SECRET')
130128
else:
131-
self.biosimulators_api_client_secret = biosimulators_api_client_secret
129+
self.biosimulators_api_client_secret: str = biosimulators_api_client_secret
132130

133131
if biosimulators_prod_api_endpoint is None:
134-
self.biosimulators_prod_api_endpoint = os.getenv('BIOSIMULATORS_PROD_API_ENDPOINT', 'https://api.biosimulators.org/')
132+
self.biosimulators_prod_api_endpoint: str = os.getenv('BIOSIMULATORS_PROD_API_ENDPOINT', 'https://api.biosimulators.org/')
135133
else:
136-
self.biosimulators_prod_api_endpoint = biosimulators_prod_api_endpoint
134+
self.biosimulators_prod_api_endpoint: str = biosimulators_prod_api_endpoint
137135

138136
if biosimulators_dev_api_endpoint is None:
139-
self.biosimulators_dev_api_endpoint = os.getenv('BIOSIMULATORS_DEV_API_ENDPOINT', 'https://api.biosimulators.dev/')
137+
self.biosimulators_dev_api_endpoint: str = os.getenv('BIOSIMULATORS_DEV_API_ENDPOINT', 'https://api.biosimulators.dev/')
140138
else:
141-
self.biosimulators_dev_api_endpoint = biosimulators_dev_api_endpoint
139+
self.biosimulators_dev_api_endpoint: str = biosimulators_dev_api_endpoint
142140

143141
if biosimulators_curator_gh_ids is None:
144142
ids = os.getenv('BIOSIMULATORS_CURATOR_GH_IDS', 'jonrkarr').strip()
145143
if ids:
146-
self.biosimulators_curator_gh_ids = [id.strip() for id in ids.split(',')]
144+
self.biosimulators_curator_gh_ids: "list[str]" = [id.strip() for id in ids.split(',')]
147145
else:
148-
self.biosimulators_curator_gh_ids = []
146+
self.biosimulators_curator_gh_ids: "list[str]" = []
149147
else:
150-
self.biosimulators_curator_gh_ids = biosimulators_curator_gh_ids
148+
self.biosimulators_curator_gh_ids: "list[str]" = biosimulators_curator_gh_ids
151149

152150
if biosimulators_default_specifications_version is None:
153-
self.biosimulators_default_specifications_version = os.getenv('BIOSIMULATORS_DEFAULT_SPECIFICATIONS_VERSION', '1.0.0')
151+
self.biosimulators_default_specifications_version: str = os.getenv('BIOSIMULATORS_DEFAULT_SPECIFICATIONS_VERSION', '1.0.0')
154152
else:
155-
self.biosimulators_default_specifications_version = biosimulators_default_specifications_version
153+
self.biosimulators_default_specifications_version: str = biosimulators_default_specifications_version
156154

157155
if biosimulators_default_image_version is None:
158-
self.biosimulators_default_image_version = os.getenv('BIOSIMULATORS_DEFAULT_IMAGE_VERSION', '1.0.0')
156+
self.biosimulators_default_image_version: str = os.getenv('BIOSIMULATORS_DEFAULT_IMAGE_VERSION', '1.0.0')
159157
else:
160-
self.biosimulators_default_image_version = biosimulators_default_image_version
158+
self.biosimulators_default_image_version: str = biosimulators_default_image_version
161159

162160
if biosimulators_docker_registry_url is None:
163-
self.biosimulators_docker_registry_url = os.getenv(
161+
self.biosimulators_docker_registry_url: str = os.getenv(
164162
'BIOSIMULATORS_DOCKER_REGISTRY_URL', os.getenv('DOCKER_REGISTRY_URL', 'ghcr.io'))
165163
else:
166-
self.biosimulators_docker_registry_url = biosimulators_docker_registry_url
164+
self.biosimulators_docker_registry_url: str = biosimulators_docker_registry_url
167165

168166
if biosimulators_docker_registry_username is None:
169-
self.biosimulators_docker_registry_username = os.getenv(
167+
self.biosimulators_docker_registry_username: str = os.getenv(
170168
'BIOSIMULATORS_DOCKER_REGISTRY_USERNAME', os.getenv('DOCKER_REGISTRY_USERNAME'))
171169
else:
172-
self.biosimulators_docker_registry_username = biosimulators_docker_registry_username
170+
self.biosimulators_docker_registry_username: str = biosimulators_docker_registry_username
173171

174172
if biosimulators_docker_registry_token is None:
175-
self.biosimulators_docker_registry_token = os.getenv(
173+
self.biosimulators_docker_registry_token: str = os.getenv(
176174
'BIOSIMULATORS_DOCKER_REGISTRY_TOKEN', os.getenv('DOCKER_REGISTRY_TOKEN'))
177175
else:
178-
self.biosimulators_docker_registry_token = biosimulators_docker_registry_token
176+
self.biosimulators_docker_registry_token: str = biosimulators_docker_registry_token
179177

180178
if biosimulators_docker_image_url_pattern is None:
181-
self.biosimulators_docker_image_url_pattern = os.getenv(
179+
self.biosimulators_docker_image_url_pattern: str = os.getenv(
182180
'BIOSIMULATORS_DOCKER_REGISTRY_IMAGE_URL_PATTERN', 'ghcr.io/biosimulators/{}:{}')
183181
else:
184-
self.biosimulators_docker_image_url_pattern = biosimulators_docker_image_url_pattern
182+
self.biosimulators_docker_image_url_pattern: str = biosimulators_docker_image_url_pattern
185183

186184
# runBioSimulations
187185
if runbiosimulations_auth_endpoint is None:
188-
self.runbiosimulations_auth_endpoint = os.getenv(
186+
self.runbiosimulations_auth_endpoint: str = os.getenv(
189187
'RUNBIOSIMULATIONS_AUTH_ENDPOINT', 'https://auth.biosimulations.org/oauth/token')
190188
else:
191-
self.runbiosimulations_auth_endpoint = runbiosimulations_auth_endpoint
189+
self.runbiosimulations_auth_endpoint: str = runbiosimulations_auth_endpoint
192190

193191
if runbiosimulations_audience is None:
194-
self.runbiosimulations_audience = os.getenv('RUNBIOSIMULATIONS_AUDIENCE', 'api.biosimulations.org')
192+
self.runbiosimulations_audience: str = os.getenv('RUNBIOSIMULATIONS_AUDIENCE', 'api.biosimulations.org')
195193
else:
196-
self.runbiosimulations_audience = runbiosimulations_audience
194+
self.runbiosimulations_audience: str = runbiosimulations_audience
197195

198196
if runbiosimulations_api_client_id is None:
199-
self.runbiosimulations_api_client_id = os.getenv('RUNBIOSIMULATIONS_API_CLIENT_ID')
197+
self.runbiosimulations_api_client_id: str = os.getenv('RUNBIOSIMULATIONS_API_CLIENT_ID')
200198
else:
201-
self.runbiosimulations_api_client_id = runbiosimulations_api_client_id
199+
self.runbiosimulations_api_client_id: str = runbiosimulations_api_client_id
202200

203201
if runbiosimulations_api_client_secret is None:
204-
self.runbiosimulations_api_client_secret = os.getenv('RUNBIOSIMULATIONS_API_CLIENT_SECRET')
202+
self.runbiosimulations_api_client_secret: str = os.getenv('RUNBIOSIMULATIONS_API_CLIENT_SECRET')
205203
else:
206-
self.runbiosimulations_api_client_secret = runbiosimulations_api_client_secret
204+
self.runbiosimulations_api_client_secret: str = runbiosimulations_api_client_secret
207205

208206
if runbiosimulations_api_endpoint is None:
209-
self.runbiosimulations_api_endpoint = os.getenv('RUNBIOSIMULATIONS_API_ENDPOINT', 'https://api.biosimulations.org/')
207+
self.runbiosimulations_api_endpoint: str = os.getenv('RUNBIOSIMULATIONS_API_ENDPOINT', 'https://api.biosimulations.org/')
210208
else:
211-
self.runbiosimulations_api_endpoint = runbiosimulations_api_endpoint
209+
self.runbiosimulations_api_endpoint: str = runbiosimulations_api_endpoint
212210

213211
if test_case_timeout is None:
214-
self.test_case_timeout = int(os.getenv('TEST_CASE_TIMEOUT', '600')) # seconds
212+
self.test_case_timeout: int = int(os.getenv('TEST_CASE_TIMEOUT', '600')) # seconds
215213
else:
216-
self.test_case_timeout = test_case_timeout
214+
self.test_case_timeout: int = test_case_timeout
217215

218216
if user_to_exec_in_simulator_containers is None:
219-
self.user_to_exec_in_simulator_containers = os.getenv('USER_TO_EXEC_IN_SIMULATOR_CONTAINERS', '_CURRENT_USER_') or None
217+
self.user_to_exec_in_simulator_containers: "Union[str, None]" = os.getenv(
218+
'USER_TO_EXEC_IN_SIMULATOR_CONTAINERS', '_CURRENT_USER_') or None
220219
else:
221-
self.user_to_exec_in_simulator_containers = user_to_exec_in_simulator_containers
220+
self.user_to_exec_in_simulator_containers: "Union[str, None]" = user_to_exec_in_simulator_containers
222221

223222
if singularity_image_dirname is None:
224-
self.singularity_image_dirname = os.getenv('SINGULARITY_IMAGE_DIRNAME',
225-
os.path.join(os.path.expanduser('~'), '.biosimulators-test-suite', 'singularity'))
223+
self.singularity_image_dirname: str = os.getenv('SINGULARITY_IMAGE_DIRNAME', os.path.join(os.path.expanduser('~'),
224+
'.biosimulators-test-suite', 'singularity'))
226225
else:
227-
self.singularity_image_dirname = singularity_image_dirname
226+
self.singularity_image_dirname: str = singularity_image_dirname

biosimulators_test_suite/exec_gh_action.py

+8-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from .results.data_model import TestCaseResult, TestCaseResultType, TestResultsReport # noqa: F401
1414
from .results.io import write_test_results
1515
from .utils import get_singularity_image_filename
16+
from .globals import JSONType
1617
from biosimulators_utils.biosimulations.utils import validate_biosimulations_api_response
1718
from biosimulators_utils.config import Colors, Config as BioSimulatorsUtilsConfig
1819
from biosimulators_utils.gh_action.data_model import Comment, GitHubActionCaughtError # noqa: F401
@@ -34,17 +35,17 @@
3435
]
3536

3637

37-
def get_uncaught_exception_msg(exception):
38+
def get_uncaught_exception_msg(exception: Exception) -> "list[Comment]":
3839
""" Create an error message to display to users for all exceptions not caught during the
3940
exception of the :obj:`run` method (exceptions of all types except :obj:`GitHubActionCaughtError`)
4041
4142
Args:
4243
exception (:obj:`Exception`): a failure encountered during the exception of the :obj:`run` method
4344
4445
Returns:
45-
:obj:`str`: error message to display to users
46+
:obj:`list`: of :obj:`str`: error messages to display to users
4647
"""
47-
gh_action_run_url = GitHubAction.get_gh_action_run_url()
48+
gh_action_run_url: str = GitHubAction.get_gh_action_run_url()
4849
return [
4950
Comment(text='The validation/submission of your simulator failed.'),
5051
Comment(text=str(exception), error=True),
@@ -64,13 +65,14 @@ class ValidateCommitSimulatorGitHubAction(GitHubAction):
6465
""" Action to validate a containerized simulator
6566
6667
Attributes:
68+
config (:obj:`Config`): configuration of the app
6769
issue_number (:obj:`str`): number of GitHub issue which triggered the action
6870
"""
6971

7072
def __init__(self):
7173
super(ValidateCommitSimulatorGitHubAction, self).__init__()
72-
self.config = Config()
73-
self.issue_number = self.get_issue_number()
74+
self.config: Config = Config()
75+
self.issue_number: str = self.get_issue_number()
7476

7577
@GitHubActionErrorHandling.catch_errors(uncaught_exception_msg_func=get_uncaught_exception_msg,
7678
caught_error_labels=[IssueLabel.invalid],
@@ -79,7 +81,7 @@ def run(self):
7981
""" Validate and commit a simulator."""
8082

8183
# Get properties of submission
82-
issue_props = self.get_issue(self.issue_number)
84+
issue_props:JSONType = self.get_issue(self.issue_number)
8385
submission = get_simulator_submission_from_gh_issue_body(issue_props['body'])
8486
submitter = issue_props['user']['login']
8587

biosimulators_test_suite/globals.py

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from typing import Union, Dict, List
2+
3+
_JSONValue = Union[str, int, float, bool, Dict[str, '_JSONValue'], List['_JSONValue'], None ]
4+
JSONType = Dict[str, '_JSONValue']

0 commit comments

Comments
 (0)