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, pin_labels: List[int] | None = None) numpy.floating[source]

Compute the intersection over union (IoU) for the objects in two masks containing lables.

The IoU is computed for each uniquely labeled image region (object), and the overall minimum value is returned (i.e. the worst value). To compute the IoU for each object, the corresponding object in the other mask needs to be determined. The object correspondences are not necessarily symmetric.

By default, the corresponding object in the other mask is determined as the one with the largest IoU value. If the label of an object is listed in pin_labels, then the corresponding object in the other mask is determined as the object with the same label value. Objects with labels listed in pin_labels also cannot correspond to objects with different labels. This is particularly useful when specific image regions must always be labeled with a designated label value (e.g., the image background is often labeled with 0 or -1).

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: 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) Generator[str, None, None][source]
new_history(history_name: str = 'test_history', 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)[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: 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[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-17-jdk-amd64', 'GHCUP_INSTALL_BASE_PREFIX': '/usr/local', 'MEMORY_PRESSURE_WRITE': 'c29tZSAyMDAwMDAgMjAwMDAwMAA=', 'RUNNER_NAME': 'GitHub Actions 40', 'GITHUB_REF_NAME': 'release_24.1', 'ACCEPT_EULA': 'Y', 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE': '1', 'GITHUB_ENV': '/home/runner/work/_temp/_runner_file_commands/set_env_68379d04-e8dd-4640-a6af-d060f078af08', 'STATS_RDCL': 'true', 'GITHUB_REPOSITORY_ID': '31211061', 'RUNNER_TRACKING_ID': 'github_76c48dd1-c859-4ce8-bc16-41d17d5a03a7', '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': '45f315d91fc24ba01fcd0f0515bb7f42c0b0f1e5', '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', 'MEMORY_PRESSURE_WATCH': '/sys/fs/cgroup/system.slice/runner-provisioner.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': '45f315d91fc24ba01fcd0f0515bb7f42c0b0f1e5', 'ANDROID_NDK_HOME': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'STATS_PIP': 'false', '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/27.2.12479018', 'GOROOT_1_23_X64': '/opt/hostedtoolcache/go/1.23.3/x64', '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/release_24.1', 'GITHUB_RUN_NUMBER': '25666', '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_68379d04-e8dd-4640-a6af-d060f078af08', 'SHLVL': '1', 'ANDROID_NDK': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'ImageVersion': '20241201.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', '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.11.1', 'GITHUB_RETENTION_DAYS': '90', 'INVOCATION_ID': '1b069e5afa3945c281e5b76c8cd30536', 'XDG_CONFIG_HOME': '/home/runner/.config', 'GITHUB_ACTIONS': 'true', 'GITHUB_WORKFLOW_REF': 'galaxyproject/galaxy/.github/workflows/docs.yaml@refs/heads/release_24.1', 'CONDA': '/usr/share/miniconda', 'GITHUB_HEAD_REF': '', 'STATS_EXTP': 'https://provjobdprod.z13.web.core.windows.net/settings/provjobdsettings-latest/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': '829', '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_68379d04-e8dd-4640-a6af-d060f078af08', 'RUNNER_ARCH': 'X64', 'GITHUB_PATH': '/home/runner/work/_temp/_runner_file_commands/add_path_68379d04-e8dd-4640-a6af-d060f078af08', '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': '8:5809', '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': '12255527046', '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.1', 'GITHUB_OUTPUT': '/home/runner/work/_temp/_runner_file_commands/set_output_68379d04-e8dd-4640-a6af-d060f078af08', 'GITHUB_BASE_REF': '', 'STATS_V3PS': 'true', 'GITHUB_REPOSITORY_OWNER_ID': '7937847', 'GOROOT_1_22_X64': '/opt/hostedtoolcache/go/1.22.9/x64', 'STATS_D_TC': 'true', '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-17-jdk-amd64', 'GHCUP_INSTALL_BASE_PREFIX': '/usr/local', 'MEMORY_PRESSURE_WRITE': 'c29tZSAyMDAwMDAgMjAwMDAwMAA=', 'RUNNER_NAME': 'GitHub Actions 40', 'GITHUB_REF_NAME': 'release_24.1', 'ACCEPT_EULA': 'Y', 'DOTNET_SKIP_FIRST_TIME_EXPERIENCE': '1', 'GITHUB_ENV': '/home/runner/work/_temp/_runner_file_commands/set_env_68379d04-e8dd-4640-a6af-d060f078af08', 'STATS_RDCL': 'true', 'GITHUB_REPOSITORY_ID': '31211061', 'RUNNER_TRACKING_ID': 'github_76c48dd1-c859-4ce8-bc16-41d17d5a03a7', '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': '45f315d91fc24ba01fcd0f0515bb7f42c0b0f1e5', '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', 'MEMORY_PRESSURE_WATCH': '/sys/fs/cgroup/system.slice/runner-provisioner.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': '45f315d91fc24ba01fcd0f0515bb7f42c0b0f1e5', 'ANDROID_NDK_HOME': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'STATS_PIP': 'false', '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/27.2.12479018', 'GOROOT_1_23_X64': '/opt/hostedtoolcache/go/1.23.3/x64', '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/release_24.1', 'GITHUB_RUN_NUMBER': '25666', '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_68379d04-e8dd-4640-a6af-d060f078af08', 'SHLVL': '1', 'ANDROID_NDK': '/usr/local/lib/android/sdk/ndk/27.2.12479018', 'ImageVersion': '20241201.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', '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.11.1', 'GITHUB_RETENTION_DAYS': '90', 'INVOCATION_ID': '1b069e5afa3945c281e5b76c8cd30536', 'XDG_CONFIG_HOME': '/home/runner/.config', 'GITHUB_ACTIONS': 'true', 'GITHUB_WORKFLOW_REF': 'galaxyproject/galaxy/.github/workflows/docs.yaml@refs/heads/release_24.1', 'CONDA': '/usr/share/miniconda', 'GITHUB_HEAD_REF': '', 'STATS_EXTP': 'https://provjobdprod.z13.web.core.windows.net/settings/provjobdsettings-latest/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': '829', '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_68379d04-e8dd-4640-a6af-d060f078af08', 'RUNNER_ARCH': 'X64', 'GITHUB_PATH': '/home/runner/work/_temp/_runner_file_commands/add_path_68379d04-e8dd-4640-a6af-d060f078af08', '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': '8:5809', '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': '12255527046', '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.1', 'GITHUB_OUTPUT': '/home/runner/work/_temp/_runner_file_commands/set_output_68379d04-e8dd-4640-a6af-d060f078af08', 'GITHUB_BASE_REF': '', 'STATS_V3PS': 'true', 'GITHUB_REPOSITORY_OWNER_ID': '7937847', 'GOROOT_1_22_X64': '/opt/hostedtoolcache/go/1.22.9/x64', 'STATS_D_TC': 'true', '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]