mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge branch 'release_23.0' into dev
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
<DelayedInput
|
||||
:class="!showAdvanced && 'mb-3'"
|
||||
:query="query"
|
||||
:delay="100"
|
||||
:show-advanced="showAdvanced"
|
||||
:enable-advanced="enableAdvanced"
|
||||
:placeholder="showAdvanced ? 'any name' : placeholder"
|
||||
|
||||
@@ -2,16 +2,17 @@
|
||||
<div>
|
||||
<div class="donemessagelarge">
|
||||
<p>
|
||||
Successfully invoked workflow <b>{{ workflowName }}</b
|
||||
><em v-if="multipleInvocations"> - {{ timesExecuted }} times</em>.
|
||||
Successfully invoked workflow <b>{{ workflowName }}</b>
|
||||
<em v-if="multipleInvocations"> - {{ timesExecuted }} times</em>.
|
||||
</p>
|
||||
<p v-if="multipleInvocations">
|
||||
|
||||
<p v-if="multipleHistoryTargets">
|
||||
This workflow will generate results in multiple histories. You can observe progress in the
|
||||
<a :href="historyTarget">history multi-view</a>.
|
||||
<a :href="multiHistoryView">history multi-view</a>.
|
||||
</p>
|
||||
<p v-else-if="wasNewHistoryTarget">
|
||||
This workflow will generate results in a new history.
|
||||
<a class="workflow-new-history-target-link" :href="historyTarget">Switch to that history now</a>.
|
||||
<a class="workflow-new-history-target-link" :href="newHistoryTarget">Switch to that history now</a>.
|
||||
</p>
|
||||
<p v-else>You can check the status of queued jobs and view the resulting data the History panel.</p>
|
||||
</div>
|
||||
@@ -53,12 +54,22 @@ export default {
|
||||
multipleInvocations() {
|
||||
return this.timesExecuted > 1;
|
||||
},
|
||||
historyTarget() {
|
||||
if (this.multipleInvocations) {
|
||||
return `${getAppRoot()}histories/view_multiple`;
|
||||
} else {
|
||||
return `${getAppRoot()}history/switch_to_history?hist_id=${this.invocations[0].history_id}`;
|
||||
}
|
||||
multipleHistoryTargets() {
|
||||
return this.targetHistories.length > 1;
|
||||
},
|
||||
targetHistories() {
|
||||
return this.invocations.reduce((histories, invocation) => {
|
||||
if (invocation.history_id && !histories.includes(invocation.history_id)) {
|
||||
histories.push(invocation.history_id);
|
||||
}
|
||||
return histories;
|
||||
}, []);
|
||||
},
|
||||
multiHistoryView() {
|
||||
return `${getAppRoot()}histories/view_multiple`;
|
||||
},
|
||||
newHistoryTarget() {
|
||||
return `${getAppRoot()}history/switch_to_history?hist_id=${this.invocations[0].history_id}`;
|
||||
},
|
||||
wasNewHistoryTarget() {
|
||||
if (this.invocations.length < 1) {
|
||||
|
||||
@@ -520,7 +520,7 @@ export interface paths {
|
||||
};
|
||||
"/api/histories/{history_id}/contents/{id}": {
|
||||
/**
|
||||
* Return detailed information about an HDA within a history.
|
||||
* Return detailed information about an HDA within a history. ``/api/histories/{history_id}/contents/{type}s/{id}`` should be used instead.
|
||||
* @deprecated
|
||||
* @description Return detailed information about an `HDA` or `HDCA` within a history.
|
||||
*
|
||||
@@ -528,7 +528,7 @@ export interface paths {
|
||||
*/
|
||||
get: operations["history_content_api_histories__history_id__contents__id__get"];
|
||||
/**
|
||||
* Updates the values for the history content item with the given ``ID``.
|
||||
* Updates the values for the history content item with the given ``ID``. ``/api/histories/{history_id}/contents/{type}s/{id}`` should be used instead.
|
||||
* @deprecated
|
||||
* @description Updates the values for the history content item with the given ``ID``.
|
||||
*/
|
||||
@@ -10605,7 +10605,7 @@ export interface operations {
|
||||
};
|
||||
history_content_api_histories__history_id__contents__id__get: {
|
||||
/**
|
||||
* Return detailed information about an HDA within a history.
|
||||
* Return detailed information about an HDA within a history. ``/api/histories/{history_id}/contents/{type}s/{id}`` should be used instead.
|
||||
* @deprecated
|
||||
* @description Return detailed information about an `HDA` or `HDCA` within a history.
|
||||
*
|
||||
@@ -10658,7 +10658,7 @@ export interface operations {
|
||||
};
|
||||
update_api_histories__history_id__contents__id__put: {
|
||||
/**
|
||||
* Updates the values for the history content item with the given ``ID``.
|
||||
* Updates the values for the history content item with the given ``ID``. ``/api/histories/{history_id}/contents/{type}s/{id}`` should be used instead.
|
||||
* @deprecated
|
||||
* @description Updates the values for the history content item with the given ``ID``.
|
||||
*/
|
||||
|
||||
@@ -117,7 +117,7 @@ pkgutil-resolve-name==1.3.10 ; python_version >= "3.7" and python_version < "3.9
|
||||
prompt-toolkit==3.0.36 ; python_version >= "3.7" and python_version < "3.12"
|
||||
prov==1.5.1 ; python_version >= "3.7" and python_version < "3.12"
|
||||
psutil==5.9.4 ; python_version >= "3.7" and python_version < "3.12"
|
||||
pulsar-galaxy-lib==0.15.0.dev0 ; python_version >= "3.7" and python_version < "3.12"
|
||||
pulsar-galaxy-lib==0.15.0.dev1 ; python_version >= "3.7" and python_version < "3.12"
|
||||
pyasn1==0.4.8 ; python_version >= "3.7" and python_version < "3.12"
|
||||
pycparser==2.21 ; python_version >= "3.7" and python_version < "3.12"
|
||||
pycryptodome==3.17 ; python_version >= "3.7" and python_version < "3.12"
|
||||
|
||||
@@ -99,6 +99,10 @@ PULSAR_PARAM_SPECS = dict(
|
||||
map=specs.to_str_or_none,
|
||||
default=None,
|
||||
),
|
||||
amqp_key_prefix=dict(
|
||||
map=specs.to_str_or_none,
|
||||
default=None,
|
||||
),
|
||||
galaxy_url=dict(
|
||||
map=specs.to_str_or_none,
|
||||
default=None,
|
||||
@@ -968,7 +972,7 @@ class PulsarMQJobRunner(PulsarJobRunner):
|
||||
)
|
||||
|
||||
|
||||
DEFAULT_PULSAR_CONTAINER = "galaxy/pulsar-pod-staging:0.15.0.1"
|
||||
DEFAULT_PULSAR_CONTAINER = "galaxy/pulsar-pod-staging:0.15.0.2"
|
||||
COEXECUTION_DESTENTATION_DEFAULTS = {
|
||||
"default_file_action": "remote_transfer",
|
||||
"rewrite_parameters": "true",
|
||||
|
||||
@@ -110,13 +110,7 @@ class GalaxyInternalMarkdownDirectiveHandler(metaclass=abc.ABCMeta):
|
||||
raise MalformedContents(f"Missing object identifier [{line}].")
|
||||
|
||||
def _remap(container, line):
|
||||
id_match = re.search(UNENCODED_ID_PATTERN, line)
|
||||
object_id = None
|
||||
encoded_id = None
|
||||
if id_match:
|
||||
object_id = int(id_match.group(2))
|
||||
encoded_id = trans.security.encode_id(object_id)
|
||||
line = line.replace(id_match.group(), f"{id_match.group(1)}={encoded_id}")
|
||||
line, object_id, encoded_id = self._encode_line(trans, line)
|
||||
if container == "history_link":
|
||||
_check_object(object_id, line)
|
||||
history = history_manager.get_accessible(object_id, trans.user)
|
||||
@@ -196,11 +190,22 @@ class GalaxyInternalMarkdownDirectiveHandler(metaclass=abc.ABCMeta):
|
||||
try:
|
||||
return _remap(container, line)
|
||||
except Exception as e:
|
||||
line, *_ = self._encode_line(trans, line)
|
||||
return self.handle_error(container, line, str(e))
|
||||
|
||||
export_markdown = _remap_galaxy_markdown_calls(_remap_container, internal_galaxy_markdown)
|
||||
return export_markdown
|
||||
|
||||
def _encode_line(self, trans, line):
|
||||
id_match = re.search(UNENCODED_ID_PATTERN, line)
|
||||
object_id = None
|
||||
encoded_id = None
|
||||
if id_match:
|
||||
object_id = int(id_match.group(2))
|
||||
encoded_id = trans.security.encode_id(object_id)
|
||||
line = line.replace(id_match.group(), f"{id_match.group(1)}={encoded_id}")
|
||||
return line, object_id, encoded_id
|
||||
|
||||
@abc.abstractmethod
|
||||
def handle_history_link(self, line, history):
|
||||
pass
|
||||
|
||||
@@ -34,6 +34,8 @@ REVISION_TAGS = {
|
||||
"22.01": "base",
|
||||
"release_22.05": "186d4835587b",
|
||||
"22.05": "186d4835587b",
|
||||
"release_23.0": "186d4835587b",
|
||||
"23.0": "186d4835587b",
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ communicate job status updates back.
|
||||
For this reason, this test will only work out of the box currently with Docker for Mac,
|
||||
rabbitmq installed via Homebrew, and if a fixed port is set for the test.
|
||||
|
||||
GALAXY_TEST_PORT=9234 pytest test/integration/test_kubernetes_staging.py
|
||||
GALAXY_TEST_PORT=9234 pytest test/integration/test_coexecution.py
|
||||
|
||||
"""
|
||||
import os
|
||||
@@ -186,6 +186,37 @@ tools:
|
||||
"""
|
||||
|
||||
|
||||
TES_CONTAINERIZED_TEMPLATE_CUSTOM_AMQP_KEY = """
|
||||
runners:
|
||||
local:
|
||||
load: galaxy.jobs.runners.local:LocalJobRunner
|
||||
workers: 1
|
||||
pulsar_tes:
|
||||
load: galaxy.jobs.runners.pulsar:PulsarTesJobRunner
|
||||
amqp_url: ${amqp_url}
|
||||
amqp_key_prefix: pulsar_foobar34_
|
||||
|
||||
execution:
|
||||
default: pulsar_tes_environment
|
||||
environments:
|
||||
pulsar_tes_environment:
|
||||
runner: pulsar_tes
|
||||
tes_url: ${tes_url}
|
||||
docker_enabled: true
|
||||
docker_default_container_id: busybox:ubuntu-14.04
|
||||
pulsar_app_config:
|
||||
message_queue_url: '${container_amqp_url}'
|
||||
env:
|
||||
- name: SOME_ENV_VAR
|
||||
value: '42'
|
||||
local_environment:
|
||||
runner: local
|
||||
tools:
|
||||
- id: __DATA_FETCH__
|
||||
environment: local_environment
|
||||
"""
|
||||
|
||||
|
||||
def tes_job_config(template_str: str, jobs_directory: str) -> str:
|
||||
job_conf_template = string.Template(template_str)
|
||||
assert AMQP_URL
|
||||
@@ -312,6 +343,20 @@ class TestTesCoexecutionContainerIntegration(TestCoexecution):
|
||||
set_infrastucture_url(config)
|
||||
|
||||
|
||||
@integration_util.skip_unless_environ("FUNNEL_SERVER_TARGET")
|
||||
class TestTesCoexecutionCustomAmqpKeyContainerIntegration(TestCoexecution):
|
||||
@classmethod
|
||||
def handle_galaxy_config_kwds(cls, config) -> None:
|
||||
config["jobs_directory"] = cls.jobs_directory
|
||||
config["file_path"] = cls.jobs_directory
|
||||
config["job_config_file"] = tes_job_config(TES_CONTAINERIZED_TEMPLATE_CUSTOM_AMQP_KEY, cls.jobs_directory)
|
||||
|
||||
config["default_job_shell"] = "/bin/sh"
|
||||
# Disable tool dependency resolution.
|
||||
config["tool_dependency_dir"] = "none"
|
||||
set_infrastucture_url(config)
|
||||
|
||||
|
||||
@integration_util.skip_unless_environ("FUNNEL_SERVER_TARGET")
|
||||
class TestTesDependencyResolutionIntegration(TestCoexecution):
|
||||
@classmethod
|
||||
@@ -342,7 +387,7 @@ def to_infrastructure_uri(uri: str) -> str:
|
||||
# remap MQ or file server URI hostnames for in-container versions, this is sloppy
|
||||
# should actually parse the URI and rebuild with correct host
|
||||
# Copied from Pulsar's integraiton tests.
|
||||
infrastructure_host = os.environ.get("GALAXY_TEST_INFRASTRUCTURE_HOST")
|
||||
infrastructure_host = GALAXY_TEST_INFRASTRUCTURE_HOST
|
||||
if infrastructure_host == "_PLATFORM_AUTO_":
|
||||
system = platform.system()
|
||||
if system in ["Darwin", "Windows"]:
|
||||
|
||||
Reference in New Issue
Block a user