mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-19 02:21:32 +08:00
Move tool shed specific driver function to tool_shed.test
Should fix https://github.com/galaxyproject/galaxy/issues/18282
This commit is contained in:
@@ -50,8 +50,6 @@ from galaxy_test.base.env import (
|
||||
DEFAULT_WEB_HOST,
|
||||
target_url_parts,
|
||||
)
|
||||
from tool_shed.webapp.app import UniverseApplication as ToolshedUniverseApplication
|
||||
from tool_shed.webapp.fast_app import initialize_fast_app as init_tool_shed_fast_app
|
||||
from .test_logging import logging_config_file
|
||||
|
||||
galaxy_root = galaxy_directory()
|
||||
@@ -583,26 +581,6 @@ def build_galaxy_app(simple_kwargs) -> GalaxyUniverseApplication:
|
||||
return app
|
||||
|
||||
|
||||
def build_shed_app(simple_kwargs):
|
||||
"""Build a Galaxy app object from a simple keyword arguments.
|
||||
|
||||
Construct paste style complex dictionary. Also setup "global" reference
|
||||
to sqlalchemy database context for tool shed database.
|
||||
"""
|
||||
log.info("Tool shed database connection: %s", simple_kwargs["database_connection"])
|
||||
# TODO: Simplify global_conf to match Galaxy above...
|
||||
simple_kwargs["__file__"] = "tool_shed_wsgi.yml.sample"
|
||||
simple_kwargs["global_conf"] = get_webapp_global_conf()
|
||||
|
||||
app = ToolshedUniverseApplication(**simple_kwargs)
|
||||
log.info("Embedded Toolshed application started")
|
||||
|
||||
global tool_shed_context
|
||||
tool_shed_context = app.model.context
|
||||
|
||||
return app
|
||||
|
||||
|
||||
def explicitly_configured_host_and_port(prefix, config_object):
|
||||
host_env_key = f"{prefix}_TEST_HOST"
|
||||
port_env_key = f"{prefix}_TEST_PORT"
|
||||
@@ -794,8 +772,6 @@ def launch_server(app_factory, webapp_factory, prefix=DEFAULT_CONFIG_PREFIX, gal
|
||||
)
|
||||
if name == "galaxy":
|
||||
asgi_app = init_galaxy_fast_app(wsgi_webapp, app)
|
||||
elif name == "tool_shed":
|
||||
asgi_app = init_tool_shed_fast_app(wsgi_webapp, app)
|
||||
else:
|
||||
raise NotImplementedError(f"Launching {name} not implemented")
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ from galaxy.webapps.galaxy.buildapp import app_factory as galaxy_app_factory
|
||||
from galaxy_test.driver import driver_util
|
||||
from tool_shed.test.base.api_util import get_admin_api_key
|
||||
from tool_shed.webapp import buildapp as toolshedbuildapp
|
||||
from tool_shed.webapp.app import UniverseApplication as ToolshedUniverseApplication
|
||||
from tool_shed.webapp.fast_app import initialize_fast_app as init_tool_shed_fast_app
|
||||
|
||||
log = driver_util.build_logger()
|
||||
|
||||
@@ -38,6 +40,48 @@ shed_data_manager_conf_xml_template = """<?xml version="1.0"?>
|
||||
"""
|
||||
|
||||
|
||||
def build_shed_app(simple_kwargs):
|
||||
"""Build a Galaxy app object from a simple keyword arguments.
|
||||
|
||||
Construct paste style complex dictionary. Also setup "global" reference
|
||||
to sqlalchemy database context for tool shed database.
|
||||
"""
|
||||
log.info("Tool shed database connection: %s", simple_kwargs["database_connection"])
|
||||
# TODO: Simplify global_conf to match Galaxy above...
|
||||
simple_kwargs["__file__"] = "tool_shed_wsgi.yml.sample"
|
||||
simple_kwargs["global_conf"] = driver_util.get_webapp_global_conf()
|
||||
|
||||
app = ToolshedUniverseApplication(**simple_kwargs)
|
||||
log.info("Embedded Toolshed application started")
|
||||
|
||||
global tool_shed_context
|
||||
tool_shed_context = app.model.context
|
||||
|
||||
return app
|
||||
|
||||
|
||||
def launch_shed_server(app_factory, webapp_factory, prefix="TOOL_SHED", galaxy_config=None, config_object=None):
|
||||
name = prefix.lower()
|
||||
host, port = driver_util.explicitly_configured_host_and_port(prefix, config_object)
|
||||
port = driver_util.attempt_ports(port)
|
||||
|
||||
app = app_factory()
|
||||
url_prefix = getattr(app.config, f"{name}_url_prefix", "/")
|
||||
wsgi_webapp = webapp_factory(
|
||||
galaxy_config["global_conf"],
|
||||
app=app,
|
||||
use_translogger=False,
|
||||
static_enabled=True,
|
||||
register_shutdown_at_exit=False,
|
||||
)
|
||||
asgi_app = init_tool_shed_fast_app(wsgi_webapp, app)
|
||||
|
||||
server, port, thread = driver_util.uvicorn_serve(asgi_app, host=host, port=port)
|
||||
driver_util.set_and_wait_for_http_target(prefix, host, port, url_prefix=url_prefix)
|
||||
log.debug(f"Embedded uvicorn web server for {name} started at {host}:{port}{url_prefix}")
|
||||
return driver_util.EmbeddedServerWrapper(app, server, name, host, port, thread=thread, prefix=url_prefix)
|
||||
|
||||
|
||||
class ToolShedTestDriver(driver_util.TestDriver):
|
||||
"""Instantiate a Galaxy-style TestDriver for testing the tool shed."""
|
||||
|
||||
@@ -116,11 +160,10 @@ class ToolShedTestDriver(driver_util.TestDriver):
|
||||
os.environ["TOOL_SHED_TEST_TOOL_DATA_TABLE_CONF"] = shed_tool_data_table_conf_file
|
||||
# ---- Run tool shed webserver ------------------------------------------------------
|
||||
# TODO: Needed for hg middleware ('lib/galaxy/webapps/tool_shed/framework/middleware/hg.py')
|
||||
tool_shed_server_wrapper = driver_util.launch_server(
|
||||
app_factory=lambda: driver_util.build_shed_app(kwargs),
|
||||
tool_shed_server_wrapper = launch_shed_server(
|
||||
app_factory=lambda: build_shed_app(kwargs),
|
||||
webapp_factory=toolshedbuildapp.app_factory,
|
||||
galaxy_config=kwargs,
|
||||
prefix="TOOL_SHED",
|
||||
)
|
||||
self.server_wrappers.append(tool_shed_server_wrapper)
|
||||
tool_shed_test_host = tool_shed_server_wrapper.host
|
||||
|
||||
Reference in New Issue
Block a user