galaxy.tool_util.verify package

Module of utilities for verifying test results.

galaxy.tool_util.verify.verify(item_label: str, output_content: bytes, attributes: Dict[str, Any] | None, filename: str | None = None, get_filecontent: Callable[[str], bytes] | None = None, get_filename: Callable[[str], str] | None = None, keep_outputs_dir: str | None = None, verify_extra_files: Callable | None = None, mode='file')[source]

Verify the content of a test output using test definitions described by attributes.

Throw an informative assertion error if any of these tests fail.

galaxy.tool_util.verify.make_temp_fname(fname=None)[source]

Safe temp name - preserve the file extension for tools that interpret it.

galaxy.tool_util.verify.files_delta(file1, file2, attributes=None)[source]

Check the contents of 2 files for size differences.

galaxy.tool_util.verify.get_compressed_formats(attributes)[source]
galaxy.tool_util.verify.files_diff(file1, file2, attributes=None)[source]

Check the contents of 2 files for differences.

galaxy.tool_util.verify.files_re_match(file1, file2, attributes=None)[source]

Check the contents of 2 files for differences using re.match.

galaxy.tool_util.verify.files_re_match_multiline(file1, file2, attributes=None)[source]

Check the contents of 2 files for differences using re.match in multiline mode.

galaxy.tool_util.verify.files_contains(file1, file2, attributes=None)[source]

Check the contents of file2 for substrings found in file1, on a per-line basis.

galaxy.tool_util.verify.intersection_over_union(mask1: numpy.typing.NDArray, mask2: numpy.typing.NDArray) numpy.floating[source]
galaxy.tool_util.verify.get_image_metric(attributes: Dict[str, Any]) Callable[[numpy.typing.NDArray, numpy.typing.NDArray], numpy.floating][source]
galaxy.tool_util.verify.files_image_diff(file1: str, file2: str, attributes: Dict[str, Any] | None = None) None[source]

Check the pixel data of 2 image files for differences.

Subpackages

Submodules

galaxy.tool_util.verify.interactor module

class galaxy.tool_util.verify.interactor.OutputsDict[source]

Bases: dict

Ordered dict that can also be accessed by index.

>>> out = OutputsDict()
>>> out['item1'] = 1
>>> out['item2'] = 2
>>> out[1] == 2 == out['item2']
True
class galaxy.tool_util.verify.interactor.ValidToolTestDict[source]

Bases: TypedDict

inputs: Any
outputs: Any
output_collections: List[Dict[str, Any]]
stdout: typing_extensions.NotRequired[List[AssertionDict] | None]
stderr: typing_extensions.NotRequired[List[AssertionDict] | None]
expect_exit_code: typing_extensions.NotRequired[int]
expect_failure: typing_extensions.NotRequired[bool]
expect_test_failure: typing_extensions.NotRequired[bool]
maxseconds: typing_extensions.NotRequired[int]
num_outputs: typing_extensions.NotRequired[int]
command_line: typing_extensions.NotRequired[List[AssertionDict] | None]
command_version: typing_extensions.NotRequired[List[AssertionDict] | None]
required_files: typing_extensions.NotRequired[List[Any]]
required_data_tables: typing_extensions.NotRequired[List[Any]]
required_loc_files: typing_extensions.NotRequired[List[str]]
error: typing_extensions.Literal[False]
tool_id: str
tool_version: str
test_index: int
class galaxy.tool_util.verify.interactor.InvalidToolTestDict[source]

Bases: TypedDict

error: typing_extensions.Literal[True]
tool_id: str
tool_version: str
test_index: int
inputs: Any
exception: str
maxseconds: int | None
galaxy.tool_util.verify.interactor.stage_data_in_history(galaxy_interactor: GalaxyInteractorApi, tool_id: str, all_test_data, history=None, force_path_paste=False, maxseconds=86400, tool_version=None)[source]
class galaxy.tool_util.verify.interactor.RunToolResponse(inputs, outputs, output_collections, jobs)[source]

Bases: tuple

inputs: Dict[str, Any]

Alias for field number 0

outputs: OutputsDict

Alias for field number 1

output_collections: Dict[str, Any]

Alias for field number 2

jobs: List[Dict[str, Any]]

Alias for field number 3

class galaxy.tool_util.verify.interactor.GalaxyInteractorApi(**kwds)[source]

Bases: object

__init__(**kwds)[source]
cookies: RequestsCookieJar | None
api_key: str | None
keep_outputs_dir: str | None
property target_galaxy_version
property supports_test_data_download
get_tests_summary()[source]
get_tool_tests(tool_id: str, tool_version: str | None = None) List[ValidToolTestDict | InvalidToolTestDict][source]
verify_output_collection(output_collection_def, output_collection_id, history, tool_id, tool_version=None)[source]
verify_output(history_id, jobs, output_data, output_testdef, tool_id, maxseconds, tool_version=None)[source]
wait_for_jobs(history_id, jobs, maxseconds)[source]
verify_output_dataset(history_id, hda_id, outfile, attributes, tool_id, tool_version=None)[source]
wait_for_job(job_id, history_id=None, maxseconds=86400)[source]
wait_for(func, what='tool test run', **kwd)[source]
get_job_stdio(job_id)[source]
get_history(history_name='test_history')[source]
test_history(require_new: bool = True, cleanup_callback: Callable[[str], None] | None = None) Generator[str, None, None][source]
new_history(history_name='test_history', publish_history=False)[source]
publish_history(history_id)[source]
test_data_path(tool_id, filename, tool_version=None)[source]
test_data_download(tool_id, filename, mode='file', is_output=True, tool_version=None)[source]
stage_data_async(test_data: Dict[str, Any], history_id: str, tool_id: str, force_path_paste: bool = False, maxseconds: int = 86400, tool_version: str | None = None) Callable[[], None][source]
run_tool(testdef, history_id, resource_parameters=None) RunToolResponse[source]
output_hid(output_data)[source]
delete_history(history)[source]
format_for_summary(blob, empty_message, prefix='|  ')[source]
ensure_user_with_email(email, password=None)[source]
api_key_header(key: str | None, admin: bool, anon: bool, headers: Dict[str, str | None] | None) Dict[str, str | None][source]
get_api_url(path: str) str[source]
galaxy.tool_util.verify.interactor.prepare_request_params(data: Dict[str, Any] | None = None, files: Dict[str, Any] | None = None, as_json: bool = False, params: Dict[str, Any] | None = None, headers: Dict[str, str | None] | None = None, cookies: RequestsCookieJar | None = None) Dict[str, Any][source]
galaxy.tool_util.verify.interactor.ensure_tool_run_response_okay(submit_response_object, request_desc, inputs=None)[source]
exception galaxy.tool_util.verify.interactor.RunToolException(message, inputs=None, dynamic_param_error=False)[source]

Bases: Exception

__init__(message, inputs=None, dynamic_param_error=False)[source]
galaxy.tool_util.verify.interactor.verify_hid(filename: str | None, hda_id: str, attributes: Dict[str, Any], test_data_downloader, dataset_fetcher=None, keep_outputs_dir: str | None = None)[source]
galaxy.tool_util.verify.interactor.verify_collection(output_collection_def, data_collection, verify_dataset)[source]
class galaxy.tool_util.verify.interactor.TestConfig(*args, **kwargs)[source]

Bases: Protocol

get_test_config(job_data: Dict[str, Any]) Dict[str, Any] | None[source]
__init__(*args, **kwargs)
class galaxy.tool_util.verify.interactor.NullClientTestConfig(*args, **kwargs)[source]

Bases: TestConfig

get_test_config(job_data)[source]
class galaxy.tool_util.verify.interactor.DictClientTestConfig(tools)[source]

Bases: TestConfig

__init__(tools)[source]
get_test_config(job_data)[source]
galaxy.tool_util.verify.interactor.verify_tool(tool_id: str, galaxy_interactor: GalaxyInteractorApi, resource_parameters: Dict[str, Any] | None = None, register_job_data: Callable[[Dict[str, Any]], None] | None = None, test_index: int = 0, tool_version: str | None = None, quiet: bool = False, test_history: str | None = None, no_history_cleanup: bool = False, publish_history: bool = False, force_path_paste: bool = False, maxseconds: int = 86400, client_test_config: TestConfig | None = None, skip_with_reference_data: bool = False, skip_on_dynamic_param_errors: bool = False, _tool_test_dicts: List[ValidToolTestDict | InvalidToolTestDict] | None = None)[source]
exception galaxy.tool_util.verify.interactor.JobOutputsError(output_exceptions, job_stdio)[source]

Bases: AssertionError

__init__(output_exceptions, job_stdio)[source]
class galaxy.tool_util.verify.interactor.ToolTestDescriptionDict[source]

Bases: TypedDict

name: str
inputs: Any
outputs: Any
output_collections: List[Dict[str, Any]]
stdout: List[AssertionDict] | None
stderr: List[AssertionDict] | None
expect_exit_code: int | None
expect_failure: bool
expect_test_failure: bool
num_outputs: int | None
command_line: List[AssertionDict] | None
command_version: List[AssertionDict] | None
required_files: List[Any]
required_data_tables: List[Any]
required_loc_files: List[str]
error: bool
tool_id: str
tool_version: str | None
test_index: int
exception: str | None
class galaxy.tool_util.verify.interactor.ToolTestDescription(processed_test_dict: ValidToolTestDict | InvalidToolTestDict)[source]

Bases: object

Encapsulates information about a tool test, and allows creation of a dynamic TestCase class (the unittest framework is very class oriented, doing dynamic tests in this way allows better integration)

__init__(processed_test_dict: ValidToolTestDict | InvalidToolTestDict)[source]
name: str
required_files: List[Any]
required_data_tables: List[Any]
required_loc_files: List[str]
num_outputs: int | None
exception: str | None
command_line: List[AssertionDict] | None
command_version: List[AssertionDict] | None
stdout: List[AssertionDict] | None
stderr: List[AssertionDict] | None
expect_exit_code: int | None
expect_failure: bool
expect_test_failure: bool
test_data()[source]

Iterator over metadata representing the required files for upload.

to_dict() ToolTestDescriptionDict[source]
galaxy.tool_util.verify.interactor.test_data_iter(required_files)[source]

galaxy.tool_util.verify.script module

class galaxy.tool_util.verify.script.TestReference(tool_id, tool_version, test_index)[source]

Bases: tuple

tool_id: str

Alias for field number 0

tool_version: str | None

Alias for field number 1

test_index: int

Alias for field number 2

class galaxy.tool_util.verify.script.TestException(tool_id, exception, was_recorded)[source]

Bases: tuple

tool_id: str

Alias for field number 0

exception: Exception

Alias for field number 1

was_recorded: bool

Alias for field number 2

class galaxy.tool_util.verify.script.Results(default_suitename: str, test_json: str, append: bool = False, galaxy_url: str | None = None)[source]

Bases: object

__init__(default_suitename: str, test_json: str, append: bool = False, galaxy_url: str | None = None) None[source]
test_exceptions: List[TestException]
register_result(result: Dict[str, Any]) None[source]
register_exception(test_exception: TestException) None[source]
already_successful(test_reference: TestReference) bool[source]
already_executed(test_reference: TestReference) bool[source]
write() None[source]
info_message() str[source]
galaxy.tool_util.verify.script.test_tools(galaxy_interactor: GalaxyInteractorApi, test_references: List[TestReference], results: Results, log: Logger | None = None, parallel_tests: int = 1, history_per_test_case: bool = False, history_name: str | None = None, no_history_reuse: bool = False, no_history_cleanup: bool = False, publish_history: bool = False, retries: int = 0, verify_kwds: Dict[str, Any] | None = None) None[source]

Run through tool tests and write report.

galaxy.tool_util.verify.script.build_case_references(galaxy_interactor: GalaxyInteractorApi, tool_id: str = '*', tool_version: str | None = None, test_index: int = -1, page_size: int = 0, page_number: int = 0, test_filters: List[Callable[[TestReference], bool]] | None = None, log: Logger | None = None) List[TestReference][source]
galaxy.tool_util.verify.script.main(argv=None) None[source]
galaxy.tool_util.verify.script.run_tests(args: Namespace, test_filters: List[Callable[[TestReference], bool]] | None = None, log: Logger | None = None) None[source]
galaxy.tool_util.verify.script.setup_global_logger(name: str, log_file: str | None = None, verbose: bool = False) Logger[source]
galaxy.tool_util.verify.script.arg_parser() ArgumentParser[source]

galaxy.tool_util.verify.test_data module

class galaxy.tool_util.verify.test_data.TestDataResolver(file_dirs=None, env_var='GALAXY_TEST_FILE_DIR', environ=environ({'JAVA_HOME': '/usr/lib/jvm/temurin-11-jdk-amd64', 'LEIN_HOME': '/usr/local/lib/lein', 'GHCUP_INSTALL_BASE_PREFIX': '/usr/local', 'RUNNER_NAME': 'GitHub Actions 46', 'STATS_BLT': 'true', 'GITHUB_REF_NAME': 'master', 'ACCEPT_EULA': 'Y', 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE': '1', 'GITHUB_ENV': '/home/runner/work/_temp/_runner_file_commands/set_env_26f1961a-a18e-4c69-b39b-03592792b2de', 'STATS_RDCL': 'true', 'GITHUB_REPOSITORY_ID': '31211061', 'RUNNER_TRACKING_ID': 'github_e312371f-6346-49c9-8622-fee16c0235a4', 'GITHUB_REPOSITORY_OWNER': 'galaxyproject', 'NVM_DIR': '/home/runner/.nvm', 'JAVA_HOME_17_X64': '/usr/lib/jvm/temurin-17-jdk-amd64', 'GITHUB_EVENT_NAME': 'push', 'SGX_AESM_ADDR': '1', 'PWD': '/home/runner/work/galaxy/galaxy', 'GITHUB_ACTION_REPOSITORY': '', 'RUNNER_WORKSPACE': '/home/runner/work/galaxy', 'GITHUB_WORKFLOW_SHA': '33538bea49fe8428823d089d7530d7e876a07151', 'RUNNER_OS': 'Linux', 'EDGEWEBDRIVER': '/usr/local/share/edge_driver', 'CI': 'true', 'LANG': 'C.UTF-8', 'RUNNER_TEMP': '/home/runner/work/_temp', 'GITHUB_SERVER_URL': 'https://github.com', 'STATS_TRP': 'true', 'PERFLOG_LOCATION_SETTING': 'RUNNER_PERFLOG', 'RUNNER_USER': 'runner', 'GITHUB_API_URL': 'https://api.github.com', 'MAKEFLAGS': 'w', 'CHROME_BIN': '/usr/bin/google-chrome', 'PKG_CONFIG_PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/pkgconfig', 'Python2_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'GITHUB_SHA': '33538bea49fe8428823d089d7530d7e876a07151', 'ANDROID_NDK_HOME': '/usr/local/lib/android/sdk/ndk/25.2.9519653', 'GITHUB_ACTOR_ID': '6804901', 'POWERSHELL_DISTRIBUTION_CHANNEL': 'GitHub-Actions-ubuntu22', 'SELENIUM_JAR_PATH': '/usr/share/java/selenium-server.jar', 'GOROOT_1_21_X64': '/opt/hostedtoolcache/go/1.21.9/x64', 'pythonLocation': '/opt/hostedtoolcache/Python/3.8.18/x64', 'MFLAGS': '-w', 'ANDROID_NDK_LATEST_HOME': '/usr/local/lib/android/sdk/ndk/26.3.11579264', 'STATS_EXT': 'true', 'BOOTSTRAP_HASKELL_NONINTERACTIVE': '1', 'JAVA_HOME_8_X64': '/usr/lib/jvm/temurin-8-jdk-amd64', 'PIPX_HOME': '/opt/pipx', 'STATS_TIS': 'mining', 'GITHUB_RUN_ATTEMPT': '1', 'RUNNER_PERFLOG': '/home/runner/perflog', 'GITHUB_TRIGGERING_ACTOR': 'mvdbeek', 'DOTNET_NOLOGO': '1', 'DOTNET_MULTILEVEL_LOOKUP': '0', 'JAVA_HOME_11_X64': '/usr/lib/jvm/temurin-11-jdk-amd64', 'GITHUB_REF': 'refs/heads/master', 'GITHUB_RUN_NUMBER': '21991', 'Python3_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'ANDROID_SDK_ROOT': '/usr/local/lib/android/sdk', 'GITHUB_JOB': 'build', 'ANDROID_HOME': '/usr/local/lib/android/sdk', 'LD_LIBRARY_PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/pylibmagic:/opt/hostedtoolcache/Python/3.8.18/x64/lib', 'GITHUB_STATE': '/home/runner/work/_temp/_runner_file_commands/save_state_26f1961a-a18e-4c69-b39b-03592792b2de', 'SHLVL': '1', 'ANDROID_NDK': '/usr/local/lib/android/sdk/ndk/25.2.9519653', 'ImageVersion': '20240414.1.0', 'PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/bin:/opt/hostedtoolcache/Python/3.8.18/x64:/snap/bin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'LEIN_JAR': '/usr/local/lib/lein/self-installs/leiningen-2.11.2-standalone.jar', 'GITHUB_EVENT_PATH': '/home/runner/work/_temp/_github_workflow/event.json', 'STATS_D': 'false', 'STATS_D_D': 'false', 'STATS_UE': 'true', 'GRADLE_HOME': '/usr/share/gradle-8.7', 'GITHUB_RETENTION_DAYS': '90', 'INVOCATION_ID': 'a54e4bf4ac8e484e89ae6fea066e7ebe', 'XDG_CONFIG_HOME': '/home/runner/.config', 'GITHUB_ACTIONS': 'true', 'GITHUB_WORKFLOW_REF': 'galaxyproject/galaxy/.github/workflows/docs.yaml@refs/heads/master', 'CONDA': '/usr/share/miniconda', 'GITHUB_HEAD_REF': '', 'STATS_EXTP': 'https://provjobdsettingscdn.blob.core.windows.net/settings/provjobdsettings-0.5.172+1/provjobd.data', 'CHROMEWEBDRIVER': '/usr/local/share/chromedriver-linux64', 'PIPX_BIN_DIR': '/opt/pipx_bin', 'GITHUB_REF_PROTECTED': 'true', 'DEPLOYMENT_BASEPATH': '/opt/runner', 'GITHUB_REF_TYPE': 'branch', 'GECKOWEBDRIVER': '/usr/local/share/gecko_driver', 'SYSTEMD_EXEC_PID': '584', 'GITHUB_ACTION_REF': '', 'GITHUB_WORKSPACE': '/home/runner/work/galaxy/galaxy', 'USER': 'runner', 'SWIFT_PATH': '/usr/share/swift/usr/bin', 'STATS_VMD': 'true', 'GITHUB_STEP_SUMMARY': '/home/runner/work/_temp/_runner_file_commands/step_summary_26f1961a-a18e-4c69-b39b-03592792b2de', 'RUNNER_ARCH': 'X64', 'GITHUB_PATH': '/home/runner/work/_temp/_runner_file_commands/add_path_26f1961a-a18e-4c69-b39b-03592792b2de', 'RUNNER_TOOL_CACHE': '/opt/hostedtoolcache', '_': '/usr/bin/make', 'ANDROID_NDK_ROOT': '/usr/local/lib/android/sdk/ndk/25.2.9519653', 'XDG_RUNTIME_DIR': '/run/user/1001', 'AGENT_TOOLSDIRECTORY': '/opt/hostedtoolcache', 'GITHUB_REPOSITORY': 'galaxyproject/galaxy', 'VCPKG_INSTALLATION_ROOT': '/usr/local/share/vcpkg', 'JOURNAL_STREAM': '8:19929', 'GITHUB_ACTION': '__run_8', 'DEBIAN_FRONTEND': 'noninteractive', 'HOME': '/home/runner', 'GITHUB_GRAPHQL_URL': 'https://api.github.com/graphql', 'GITHUB_WORKFLOW': 'Build docs', 'GOROOT_1_20_X64': '/opt/hostedtoolcache/go/1.20.14/x64', 'GITHUB_RUN_ID': '8723596762', 'HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS': '3650', 'GITHUB_ACTOR': 'mvdbeek', 'ANT_HOME': '/usr/share/ant', 'ImageOS': 'ubuntu22', 'Python_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE': '/opt/actionarchivecache', 'TARGET_BRANCH': 'master', 'GITHUB_OUTPUT': '/home/runner/work/_temp/_runner_file_commands/set_output_26f1961a-a18e-4c69-b39b-03592792b2de', 'GITHUB_BASE_REF': '', 'STATS_V3PS': 'true', 'GITHUB_REPOSITORY_OWNER_ID': '7937847', 'GOROOT_1_22_X64': '/opt/hostedtoolcache/go/1.22.2/x64', 'AZURE_EXTENSION_DIR': '/opt/az/azcliextensions', 'RUNNER_ENVIRONMENT': 'github-hosted', 'STATS_VMFE': 'true', 'HOMEBREW_NO_AUTO_UPDATE': '1', 'JAVA_HOME_21_X64': '/usr/lib/jvm/temurin-21-jdk-amd64', 'MAKELEVEL': '2', 'DOCUTILSCONFIG': '/home/runner/work/galaxy/galaxy/doc/source/docutils.conf', 'LIBRARY_PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/pylibmagic:', 'MAGIC': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/pylibmagic/magic.mgc:'}))[source]

Bases: object

__init__(file_dirs=None, env_var='GALAXY_TEST_FILE_DIR', environ=environ({'JAVA_HOME': '/usr/lib/jvm/temurin-11-jdk-amd64', 'LEIN_HOME': '/usr/local/lib/lein', 'GHCUP_INSTALL_BASE_PREFIX': '/usr/local', 'RUNNER_NAME': 'GitHub Actions 46', 'STATS_BLT': 'true', 'GITHUB_REF_NAME': 'master', 'ACCEPT_EULA': 'Y', 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE': '1', 'GITHUB_ENV': '/home/runner/work/_temp/_runner_file_commands/set_env_26f1961a-a18e-4c69-b39b-03592792b2de', 'STATS_RDCL': 'true', 'GITHUB_REPOSITORY_ID': '31211061', 'RUNNER_TRACKING_ID': 'github_e312371f-6346-49c9-8622-fee16c0235a4', 'GITHUB_REPOSITORY_OWNER': 'galaxyproject', 'NVM_DIR': '/home/runner/.nvm', 'JAVA_HOME_17_X64': '/usr/lib/jvm/temurin-17-jdk-amd64', 'GITHUB_EVENT_NAME': 'push', 'SGX_AESM_ADDR': '1', 'PWD': '/home/runner/work/galaxy/galaxy', 'GITHUB_ACTION_REPOSITORY': '', 'RUNNER_WORKSPACE': '/home/runner/work/galaxy', 'GITHUB_WORKFLOW_SHA': '33538bea49fe8428823d089d7530d7e876a07151', 'RUNNER_OS': 'Linux', 'EDGEWEBDRIVER': '/usr/local/share/edge_driver', 'CI': 'true', 'LANG': 'C.UTF-8', 'RUNNER_TEMP': '/home/runner/work/_temp', 'GITHUB_SERVER_URL': 'https://github.com', 'STATS_TRP': 'true', 'PERFLOG_LOCATION_SETTING': 'RUNNER_PERFLOG', 'RUNNER_USER': 'runner', 'GITHUB_API_URL': 'https://api.github.com', 'MAKEFLAGS': 'w', 'CHROME_BIN': '/usr/bin/google-chrome', 'PKG_CONFIG_PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/pkgconfig', 'Python2_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'GITHUB_SHA': '33538bea49fe8428823d089d7530d7e876a07151', 'ANDROID_NDK_HOME': '/usr/local/lib/android/sdk/ndk/25.2.9519653', 'GITHUB_ACTOR_ID': '6804901', 'POWERSHELL_DISTRIBUTION_CHANNEL': 'GitHub-Actions-ubuntu22', 'SELENIUM_JAR_PATH': '/usr/share/java/selenium-server.jar', 'GOROOT_1_21_X64': '/opt/hostedtoolcache/go/1.21.9/x64', 'pythonLocation': '/opt/hostedtoolcache/Python/3.8.18/x64', 'MFLAGS': '-w', 'ANDROID_NDK_LATEST_HOME': '/usr/local/lib/android/sdk/ndk/26.3.11579264', 'STATS_EXT': 'true', 'BOOTSTRAP_HASKELL_NONINTERACTIVE': '1', 'JAVA_HOME_8_X64': '/usr/lib/jvm/temurin-8-jdk-amd64', 'PIPX_HOME': '/opt/pipx', 'STATS_TIS': 'mining', 'GITHUB_RUN_ATTEMPT': '1', 'RUNNER_PERFLOG': '/home/runner/perflog', 'GITHUB_TRIGGERING_ACTOR': 'mvdbeek', 'DOTNET_NOLOGO': '1', 'DOTNET_MULTILEVEL_LOOKUP': '0', 'JAVA_HOME_11_X64': '/usr/lib/jvm/temurin-11-jdk-amd64', 'GITHUB_REF': 'refs/heads/master', 'GITHUB_RUN_NUMBER': '21991', 'Python3_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'ANDROID_SDK_ROOT': '/usr/local/lib/android/sdk', 'GITHUB_JOB': 'build', 'ANDROID_HOME': '/usr/local/lib/android/sdk', 'LD_LIBRARY_PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/pylibmagic:/opt/hostedtoolcache/Python/3.8.18/x64/lib', 'GITHUB_STATE': '/home/runner/work/_temp/_runner_file_commands/save_state_26f1961a-a18e-4c69-b39b-03592792b2de', 'SHLVL': '1', 'ANDROID_NDK': '/usr/local/lib/android/sdk/ndk/25.2.9519653', 'ImageVersion': '20240414.1.0', 'PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/bin:/opt/hostedtoolcache/Python/3.8.18/x64:/snap/bin:/home/runner/.local/bin:/opt/pipx_bin:/home/runner/.cargo/bin:/home/runner/.config/composer/vendor/bin:/usr/local/.ghcup/bin:/home/runner/.dotnet/tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'LEIN_JAR': '/usr/local/lib/lein/self-installs/leiningen-2.11.2-standalone.jar', 'GITHUB_EVENT_PATH': '/home/runner/work/_temp/_github_workflow/event.json', 'STATS_D': 'false', 'STATS_D_D': 'false', 'STATS_UE': 'true', 'GRADLE_HOME': '/usr/share/gradle-8.7', 'GITHUB_RETENTION_DAYS': '90', 'INVOCATION_ID': 'a54e4bf4ac8e484e89ae6fea066e7ebe', 'XDG_CONFIG_HOME': '/home/runner/.config', 'GITHUB_ACTIONS': 'true', 'GITHUB_WORKFLOW_REF': 'galaxyproject/galaxy/.github/workflows/docs.yaml@refs/heads/master', 'CONDA': '/usr/share/miniconda', 'GITHUB_HEAD_REF': '', 'STATS_EXTP': 'https://provjobdsettingscdn.blob.core.windows.net/settings/provjobdsettings-0.5.172+1/provjobd.data', 'CHROMEWEBDRIVER': '/usr/local/share/chromedriver-linux64', 'PIPX_BIN_DIR': '/opt/pipx_bin', 'GITHUB_REF_PROTECTED': 'true', 'DEPLOYMENT_BASEPATH': '/opt/runner', 'GITHUB_REF_TYPE': 'branch', 'GECKOWEBDRIVER': '/usr/local/share/gecko_driver', 'SYSTEMD_EXEC_PID': '584', 'GITHUB_ACTION_REF': '', 'GITHUB_WORKSPACE': '/home/runner/work/galaxy/galaxy', 'USER': 'runner', 'SWIFT_PATH': '/usr/share/swift/usr/bin', 'STATS_VMD': 'true', 'GITHUB_STEP_SUMMARY': '/home/runner/work/_temp/_runner_file_commands/step_summary_26f1961a-a18e-4c69-b39b-03592792b2de', 'RUNNER_ARCH': 'X64', 'GITHUB_PATH': '/home/runner/work/_temp/_runner_file_commands/add_path_26f1961a-a18e-4c69-b39b-03592792b2de', 'RUNNER_TOOL_CACHE': '/opt/hostedtoolcache', '_': '/usr/bin/make', 'ANDROID_NDK_ROOT': '/usr/local/lib/android/sdk/ndk/25.2.9519653', 'XDG_RUNTIME_DIR': '/run/user/1001', 'AGENT_TOOLSDIRECTORY': '/opt/hostedtoolcache', 'GITHUB_REPOSITORY': 'galaxyproject/galaxy', 'VCPKG_INSTALLATION_ROOT': '/usr/local/share/vcpkg', 'JOURNAL_STREAM': '8:19929', 'GITHUB_ACTION': '__run_8', 'DEBIAN_FRONTEND': 'noninteractive', 'HOME': '/home/runner', 'GITHUB_GRAPHQL_URL': 'https://api.github.com/graphql', 'GITHUB_WORKFLOW': 'Build docs', 'GOROOT_1_20_X64': '/opt/hostedtoolcache/go/1.20.14/x64', 'GITHUB_RUN_ID': '8723596762', 'HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS': '3650', 'GITHUB_ACTOR': 'mvdbeek', 'ANT_HOME': '/usr/share/ant', 'ImageOS': 'ubuntu22', 'Python_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE': '/opt/actionarchivecache', 'TARGET_BRANCH': 'master', 'GITHUB_OUTPUT': '/home/runner/work/_temp/_runner_file_commands/set_output_26f1961a-a18e-4c69-b39b-03592792b2de', 'GITHUB_BASE_REF': '', 'STATS_V3PS': 'true', 'GITHUB_REPOSITORY_OWNER_ID': '7937847', 'GOROOT_1_22_X64': '/opt/hostedtoolcache/go/1.22.2/x64', 'AZURE_EXTENSION_DIR': '/opt/az/azcliextensions', 'RUNNER_ENVIRONMENT': 'github-hosted', 'STATS_VMFE': 'true', 'HOMEBREW_NO_AUTO_UPDATE': '1', 'JAVA_HOME_21_X64': '/usr/lib/jvm/temurin-21-jdk-amd64', 'MAKELEVEL': '2', 'DOCUTILSCONFIG': '/home/runner/work/galaxy/galaxy/doc/source/docutils.conf', 'LIBRARY_PATH': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/pylibmagic:', 'MAGIC': '/opt/hostedtoolcache/Python/3.8.18/x64/lib/python3.8/site-packages/pylibmagic/magic.mgc:'}))[source]
get_filename(name: str) str[source]
get_filecontent(name: str) bytes[source]
get_directory(name: str) str[source]
exception galaxy.tool_util.verify.test_data.TestDataNotFoundError[source]

Bases: ValueError

galaxy.tool_util.verify.test_data.build_resolver(uri: str, environ)[source]
class galaxy.tool_util.verify.test_data.FileDataResolver(file_dir: str)[source]

Bases: object

__init__(file_dir: str)[source]
exists(filename: str)[source]
path(filename: str)[source]
class galaxy.tool_util.verify.test_data.GitDataResolver(repository: str, environ)[source]

Bases: FileDataResolver

__init__(repository: str, environ)[source]
exists(filename: str)[source]
update_repository()[source]
execute(cmd)[source]

galaxy.tool_util.verify.wait module

Abstraction for waiting on API conditions to become true.

galaxy.tool_util.verify.wait.wait_on(function: Callable, desc: str, timeout: int | float, delta: int | float = 0.25, polling_backoff: int | float = 0, sleep_: Callable | None = None)[source]

Wait for function to return non-None value.

Grow the polling interval (initially delta defaulting to 0.25 seconds) incrementally by the supplied polling_backoff (defaulting to 0).

Throw a TimeoutAssertionError if the supplied timeout is reached without supplied function ever returning a non-None value.

exception galaxy.tool_util.verify.wait.TimeoutAssertionError(message)[source]

Bases: AssertionError

Derivative of AssertionError indicating wait_on exceeded max time.

__init__(message)[source]