Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

galaxy.tool_util.verify package

Module of utilities for verifying test results.

class galaxy.tool_util.verify.ToolTestDescriptionDict[source]

Bases: TypedDict

tool_id: str
tool_version: str | None
name: str
test_index: int
inputs: Dict[str, Any]
outputs: List[ToolSourceTestOutput]
output_collections: List[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
exception: str | None
maxseconds: typing_extensions.NotRequired[int | None]
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.verify_file_contents_against_dict(get_filename: Callable[[str], str] | None, get_location: Callable[[str], str] | None, item_label: str, output_content: bytes, test_properties, test_data_target_dir: str | None = None) None[source]

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: Dict[str, Any]
outputs: List[ToolSourceTestOutput]
output_collections: List[Any]
stdout: typing_extensions.NotRequired[List[AssertionDict] | None]
stderr: typing_extensions.NotRequired[List[AssertionDict] | None]
expect_exit_code: typing_extensions.NotRequired[int | str | None]
expect_failure: typing_extensions.NotRequired[bool]
expect_test_failure: typing_extensions.NotRequired[bool]
maxseconds: typing_extensions.NotRequired[int | None]
num_outputs: typing_extensions.NotRequired[int | str | None]
command_line: typing_extensions.NotRequired[List[AssertionDict] | None]
command_version: typing_extensions.NotRequired[List[AssertionDict] | None]
required_files: typing_extensions.NotRequired[List[Tuple[str, Dict[str, Any]]]]
required_data_tables: typing_extensions.NotRequired[List[str]]
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
class galaxy.tool_util.verify.interactor.PathOrLocation(name, path, location)[source]

Bases: tuple

name: str

Alias for field number 0

path: str | None

Alias for field number 1

location: str | None

Alias for field number 2

galaxy.tool_util.verify.interactor.stage_data_in_history(galaxy_interactor: GalaxyInteractorApi, tool_id: str, all_test_data, history: str, force_path_paste=False, maxseconds=86400, tool_version=None, test_data_resolver: TestDataResolver | None = 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.InteractorStagingInterface(galaxy_interactor: GalaxyInteractorApi, maxseconds: int | None, upload_async: bool)[source]

Bases: StagingInterface

__init__(galaxy_interactor: GalaxyInteractorApi, maxseconds: int | None, upload_async: bool) None[source]
handle_jobs()[source]
property use_fetch_api

Return true is this should use (modern) data fetch API.

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[ToolTestDescriptionDict][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: str, history_id: str | None = None, maxseconds=86400) None[source]
wait_for(func: Callable, what: str = 'tool test run', **kwd) None[source]
get_job_stdio(job_id: str) Dict[str, Any][source]
get_history(history_name: str = 'test_history') Dict[str, Any] | None[source]
test_history(require_new: bool = True, cleanup_callback: Callable[[str], None] | None = None, name: str | None = None) Generator[str, None, None][source]
new_history(history_name: str | None = None, publish_history: bool = False) str[source]
publish_history(history_id: str) None[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, path_only=False)[source]
remote_to_input(test_data, tool_id: str, force_path_paste: bool = False, tool_version: str | None = None)[source]
run_tool(testdef: ToolTestDescription, history_id: str, resource_parameters: Dict[str, Any] | None = None) RunToolResponse[source]
output_hid(output_data)[source]
delete_history(history: str) None[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[ToolTestDescriptionDict] | None = None, test_data_resolver: TestDataResolver | None = None)[source]
exception galaxy.tool_util.verify.interactor.JobOutputsError(output_exceptions, job_stdio)[source]

Bases: AssertionError

__init__(output_exceptions, job_stdio)[source]
galaxy.tool_util.verify.interactor.adapt_tool_source_dict(processed_dict: ValidToolTestDict | InvalidToolTestDict) ToolTestDescriptionDict[source]

Convert the dictionaries parsed from tool sources (ToolTestDict) to a ToolTestDescriptionDict.

ToolTestDescription is used inside and outside of Galaxy, so convert the dictionaries to the format produced by ToolTestDescription.to_dict() and then construct a ToolTestDescription from that.

galaxy.tool_util.verify.interactor.expanded_inputs_from_json(expanded_inputs_json: Dict[str, Any]) Dict[str, Any][source]
galaxy.tool_util.verify.interactor.expanded_inputs_to_json(expanded_inputs: Dict[str, Any]) Dict[str, Any][source]
class galaxy.tool_util.verify.interactor.ToolTestDescription(json_dict: ToolTestDescriptionDict)[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)

static from_tool_source_dict(processed_test_dict: ValidToolTestDict | InvalidToolTestDict) ToolTestDescription[source]
__init__(json_dict: ToolTestDescriptionDict)[source]
test_index: int
name: str
exception: str | None
output_collections: List[TestCollectionOutputDef]
num_outputs: int | None
required_files: List[Tuple[str, Dict[str, Any]]]
required_data_tables: List[str]
required_loc_files: List[str]
command_line: List[AssertionDict] | None
command_version: List[AssertionDict] | None
stdout: List[AssertionDict] | None
stderr: List[AssertionDict] | None
outputs: List[ToolSourceTestOutput]
expect_exit_code: int | None
expect_failure: bool
expect_test_failure: bool
inputs: Dict[str, Any]
tool_id: str
tool_version: str | None
maxseconds: int | None
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.interactor.compare_expected_metadata_to_api_response(metadata: dict, dataset: dict) None[source]
galaxy.tool_util.verify.interactor.get_metadata_to_test(test_properties: dict) dict[source]

Fetch out metadata to test from test property dict and adapt it to keys the API produces.

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-17-jdk-amd64', 'GHCUP_INSTALL_BASE_PREFIX': '/usr/local', 'MEMORY_PRESSURE_WRITE': 'c29tZSAyMDAwMDAgMjAwMDAwMAA=', 'RUNNER_NAME': 'GitHub Actions 1000038647', 'GITHUB_REF_NAME': 'release_24.2', 'ACCEPT_EULA': 'Y', 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE': '1', 'GITHUB_ENV': '/home/runner/work/_temp/_runner_file_commands/set_env_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'GITHUB_REPOSITORY_ID': '31211061', 'RUNNER_TRACKING_ID': 'github_2685c6fa-d93d-44ff-97d2-451ce9da36cc', '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': '4368e15f01c0bfa2e13a4be76ac70a06665e9eab', 'RUNNER_OS': 'Linux', 'EDGEWEBDRIVER': '/usr/local/share/edge_driver', 'CI': 'true', 'LANG': 'C.UTF-8', 'RUNNER_TEMP': '/home/runner/work/_temp', 'ENABLE_RUNNER_TRACING': 'true', 'GITHUB_SERVER_URL': 'https://github.com', 'GITHUB_API_URL': 'https://api.github.com', 'MEMORY_PRESSURE_WATCH': '/sys/fs/cgroup/system.slice/hosted-compute-agent.service/memory.pressure', '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': '4368e15f01c0bfa2e13a4be76ac70a06665e9eab', 'ANDROID_NDK_HOME': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'GITHUB_ACTOR_ID': '6804901', 'POWERSHELL_DISTRIBUTION_CHANNEL': 'GitHub-Actions-ubuntu24', 'SELENIUM_JAR_PATH': '/usr/share/java/selenium-server.jar', 'GOROOT_1_21_X64': '/opt/hostedtoolcache/go/1.21.13/x64', 'pythonLocation': '/opt/hostedtoolcache/Python/3.8.18/x64', 'MFLAGS': '-w', 'ANDROID_NDK_LATEST_HOME': '/usr/local/lib/android/sdk/ndk/28.1.13356709', 'GOROOT_1_23_X64': '/opt/hostedtoolcache/go/1.23.9/x64', 'BOOTSTRAP_HASKELL_NONINTERACTIVE': '1', 'JAVA_HOME_8_X64': '/usr/lib/jvm/temurin-8-jdk-amd64', 'PIPX_HOME': '/opt/pipx', 'GITHUB_RUN_ATTEMPT': '1', '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/release_24.2', 'GITHUB_RUN_NUMBER': '29063', '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', 'SHELL': '/bin/bash', '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_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'SHLVL': '1', 'ANDROID_NDK': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'ImageVersion': '20250602.3.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', 'GITHUB_EVENT_PATH': '/home/runner/work/_temp/_github_workflow/event.json', 'GRADLE_HOME': '/usr/share/gradle-8.14.1', 'GITHUB_RETENTION_DAYS': '90', 'INVOCATION_ID': 'bb862301715747bcb910ee68120b202c', 'XDG_CONFIG_HOME': '/home/runner/.config', 'GITHUB_ACTIONS': 'true', 'GITHUB_WORKFLOW_REF': 'galaxyproject/galaxy/.github/workflows/docs.yaml@refs/heads/release_24.2', 'CONDA': '/usr/share/miniconda', 'GITHUB_HEAD_REF': '', 'CHROMEWEBDRIVER': '/usr/local/share/chromedriver-linux64', 'PIPX_BIN_DIR': '/opt/pipx_bin', 'GITHUB_REF_PROTECTED': 'true', 'GITHUB_REF_TYPE': 'branch', 'LOGNAME': 'runner', 'GECKOWEBDRIVER': '/usr/local/share/gecko_driver', 'SYSTEMD_EXEC_PID': '1882', 'GITHUB_ACTION_REF': '', 'GITHUB_WORKSPACE': '/home/runner/work/galaxy/galaxy', 'USER': 'runner', 'SWIFT_PATH': '/usr/share/swift/usr/bin', 'GITHUB_STEP_SUMMARY': '/home/runner/work/_temp/_runner_file_commands/step_summary_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'RUNNER_ARCH': 'X64', 'GITHUB_PATH': '/home/runner/work/_temp/_runner_file_commands/add_path_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'RUNNER_TOOL_CACHE': '/opt/hostedtoolcache', '_': '/usr/bin/make', 'ANDROID_NDK_ROOT': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'XDG_RUNTIME_DIR': '/run/user/1001', 'AGENT_TOOLSDIRECTORY': '/opt/hostedtoolcache', 'GITHUB_REPOSITORY': 'galaxyproject/galaxy', 'VCPKG_INSTALLATION_ROOT': '/usr/local/share/vcpkg', 'JOURNAL_STREAM': '9:13453', 'GITHUB_ACTION': '__run_8', 'DEBIAN_FRONTEND': 'noninteractive', 'HOME': '/home/runner', 'GITHUB_GRAPHQL_URL': 'https://api.github.com/graphql', 'GITHUB_WORKFLOW': 'Build docs', 'GITHUB_RUN_ID': '15803801239', 'HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS': '3650', 'GITHUB_ACTOR': 'mvdbeek', 'ANT_HOME': '/usr/share/ant', 'ImageOS': 'ubuntu24', 'Python_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE': '/opt/actionarchivecache', 'TARGET_BRANCH': 'release_24.2', 'GITHUB_OUTPUT': '/home/runner/work/_temp/_runner_file_commands/set_output_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'GITHUB_BASE_REF': '', 'GITHUB_REPOSITORY_OWNER_ID': '7937847', 'GOROOT_1_22_X64': '/opt/hostedtoolcache/go/1.22.12/x64', 'AZURE_EXTENSION_DIR': '/opt/az/azcliextensions', 'RUNNER_ENVIRONMENT': 'github-hosted', '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-17-jdk-amd64', 'GHCUP_INSTALL_BASE_PREFIX': '/usr/local', 'MEMORY_PRESSURE_WRITE': 'c29tZSAyMDAwMDAgMjAwMDAwMAA=', 'RUNNER_NAME': 'GitHub Actions 1000038647', 'GITHUB_REF_NAME': 'release_24.2', 'ACCEPT_EULA': 'Y', 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE': '1', 'GITHUB_ENV': '/home/runner/work/_temp/_runner_file_commands/set_env_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'GITHUB_REPOSITORY_ID': '31211061', 'RUNNER_TRACKING_ID': 'github_2685c6fa-d93d-44ff-97d2-451ce9da36cc', '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': '4368e15f01c0bfa2e13a4be76ac70a06665e9eab', 'RUNNER_OS': 'Linux', 'EDGEWEBDRIVER': '/usr/local/share/edge_driver', 'CI': 'true', 'LANG': 'C.UTF-8', 'RUNNER_TEMP': '/home/runner/work/_temp', 'ENABLE_RUNNER_TRACING': 'true', 'GITHUB_SERVER_URL': 'https://github.com', 'GITHUB_API_URL': 'https://api.github.com', 'MEMORY_PRESSURE_WATCH': '/sys/fs/cgroup/system.slice/hosted-compute-agent.service/memory.pressure', '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': '4368e15f01c0bfa2e13a4be76ac70a06665e9eab', 'ANDROID_NDK_HOME': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'GITHUB_ACTOR_ID': '6804901', 'POWERSHELL_DISTRIBUTION_CHANNEL': 'GitHub-Actions-ubuntu24', 'SELENIUM_JAR_PATH': '/usr/share/java/selenium-server.jar', 'GOROOT_1_21_X64': '/opt/hostedtoolcache/go/1.21.13/x64', 'pythonLocation': '/opt/hostedtoolcache/Python/3.8.18/x64', 'MFLAGS': '-w', 'ANDROID_NDK_LATEST_HOME': '/usr/local/lib/android/sdk/ndk/28.1.13356709', 'GOROOT_1_23_X64': '/opt/hostedtoolcache/go/1.23.9/x64', 'BOOTSTRAP_HASKELL_NONINTERACTIVE': '1', 'JAVA_HOME_8_X64': '/usr/lib/jvm/temurin-8-jdk-amd64', 'PIPX_HOME': '/opt/pipx', 'GITHUB_RUN_ATTEMPT': '1', '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/release_24.2', 'GITHUB_RUN_NUMBER': '29063', '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', 'SHELL': '/bin/bash', '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_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'SHLVL': '1', 'ANDROID_NDK': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'ImageVersion': '20250602.3.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', 'GITHUB_EVENT_PATH': '/home/runner/work/_temp/_github_workflow/event.json', 'GRADLE_HOME': '/usr/share/gradle-8.14.1', 'GITHUB_RETENTION_DAYS': '90', 'INVOCATION_ID': 'bb862301715747bcb910ee68120b202c', 'XDG_CONFIG_HOME': '/home/runner/.config', 'GITHUB_ACTIONS': 'true', 'GITHUB_WORKFLOW_REF': 'galaxyproject/galaxy/.github/workflows/docs.yaml@refs/heads/release_24.2', 'CONDA': '/usr/share/miniconda', 'GITHUB_HEAD_REF': '', 'CHROMEWEBDRIVER': '/usr/local/share/chromedriver-linux64', 'PIPX_BIN_DIR': '/opt/pipx_bin', 'GITHUB_REF_PROTECTED': 'true', 'GITHUB_REF_TYPE': 'branch', 'LOGNAME': 'runner', 'GECKOWEBDRIVER': '/usr/local/share/gecko_driver', 'SYSTEMD_EXEC_PID': '1882', 'GITHUB_ACTION_REF': '', 'GITHUB_WORKSPACE': '/home/runner/work/galaxy/galaxy', 'USER': 'runner', 'SWIFT_PATH': '/usr/share/swift/usr/bin', 'GITHUB_STEP_SUMMARY': '/home/runner/work/_temp/_runner_file_commands/step_summary_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'RUNNER_ARCH': 'X64', 'GITHUB_PATH': '/home/runner/work/_temp/_runner_file_commands/add_path_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'RUNNER_TOOL_CACHE': '/opt/hostedtoolcache', '_': '/usr/bin/make', 'ANDROID_NDK_ROOT': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'XDG_RUNTIME_DIR': '/run/user/1001', 'AGENT_TOOLSDIRECTORY': '/opt/hostedtoolcache', 'GITHUB_REPOSITORY': 'galaxyproject/galaxy', 'VCPKG_INSTALLATION_ROOT': '/usr/local/share/vcpkg', 'JOURNAL_STREAM': '9:13453', 'GITHUB_ACTION': '__run_8', 'DEBIAN_FRONTEND': 'noninteractive', 'HOME': '/home/runner', 'GITHUB_GRAPHQL_URL': 'https://api.github.com/graphql', 'GITHUB_WORKFLOW': 'Build docs', 'GITHUB_RUN_ID': '15803801239', 'HOMEBREW_CLEANUP_PERIODIC_FULL_DAYS': '3650', 'GITHUB_ACTOR': 'mvdbeek', 'ANT_HOME': '/usr/share/ant', 'ImageOS': 'ubuntu24', 'Python_ROOT_DIR': '/opt/hostedtoolcache/Python/3.8.18/x64', 'ACTIONS_RUNNER_ACTION_ARCHIVE_CACHE': '/opt/actionarchivecache', 'TARGET_BRANCH': 'release_24.2', 'GITHUB_OUTPUT': '/home/runner/work/_temp/_runner_file_commands/set_output_b846a3b2-0a52-4357-90ed-c2e54ca977c1', 'GITHUB_BASE_REF': '', 'GITHUB_REPOSITORY_OWNER_ID': '7937847', 'GOROOT_1_22_X64': '/opt/hostedtoolcache/go/1.22.12/x64', 'AZURE_EXTENSION_DIR': '/opt/az/azcliextensions', 'RUNNER_ENVIRONMENT': 'github-hosted', '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]