From 4bda4c92bdb51a3aa1dc51336f34b8e0ff6cdbf9 Mon Sep 17 00:00:00 2001 From: Daniel Blankenberg Date: Tue, 20 Aug 2019 14:57:45 -0400 Subject: [PATCH] Make InteractiveTools enable-able. --- client/galaxy/scripts/layout/menu.js | 13 ++++++++----- config/galaxy.yml.realtime | 1 + doc/source/admin/galaxy_options.rst | 10 ++++++++++ lib/galaxy/config/__init__.py | 1 + lib/galaxy/config/sample/galaxy.yml.sample | 3 +++ lib/galaxy/managers/configuration.py | 1 + lib/galaxy/tools/__init__.py | 4 ++++ lib/galaxy/webapps/galaxy/config_schema.yml | 7 +++++++ lib/galaxy/webapps/galaxy/controllers/realtime.py | 2 ++ 9 files changed, 37 insertions(+), 5 deletions(-) diff --git a/client/galaxy/scripts/layout/menu.js b/client/galaxy/scripts/layout/menu.js index 10cb4da0ce2..84a60e03c3b 100644 --- a/client/galaxy/scripts/layout/menu.js +++ b/client/galaxy/scripts/layout/menu.js @@ -299,11 +299,6 @@ const Collection = Backbone.Collection.extend({ title: _l("Pages"), url: "pages/list", target: "__use_router__" - }, - { - title: _l("Active InteractiveTools"), - url: "realtime_entry_points/list", - target: "__use_router__" } ] }; @@ -314,6 +309,14 @@ const Collection = Backbone.Collection.extend({ target: "__use_router__" }); } + if (Galaxy.config.interactivetools_enable) { + userTab.menu[userTab.menu.length - 1].divider = true; + userTab.menu.push({ + title: _l("Active InteractiveTools"), + url: "realtime_entry_points/list", + target: "__use_router__" + }); + } } this.add(userTab); return new $.Deferred().resolve().promise(); diff --git a/config/galaxy.yml.realtime b/config/galaxy.yml.realtime index 2273cd80e05..5b0bea4e396 100644 --- a/config/galaxy.yml.realtime +++ b/config/galaxy.yml.realtime @@ -24,6 +24,7 @@ uwsgi: galaxy: + interactivetools_enable: true # outputs_to_working_directory will provide you with a better level of isolation. It is highly recommended to set # this parameter with InteractiveTools. outputs_to_working_directory: true diff --git a/doc/source/admin/galaxy_options.rst b/doc/source/admin/galaxy_options.rst index c8ca18810e2..56a3ad5ec2d 100644 --- a/doc/source/admin/galaxy_options.rst +++ b/doc/source/admin/galaxy_options.rst @@ -1236,6 +1236,16 @@ :Type: bool +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``interactivetools_enable`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:Description: + Set this to true to enable InteractiveTools. +:Default: ``false`` +:Type: bool + + ~~~~~~~~~~~~~~~~~~~~~~~~~~ ``visualizations_visible`` ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/galaxy/config/__init__.py b/lib/galaxy/config/__init__.py index 1ae11fbe008..dcf693a4fff 100644 --- a/lib/galaxy/config/__init__.py +++ b/lib/galaxy/config/__init__.py @@ -737,6 +737,7 @@ class GalaxyAppConfiguration(BaseAppConfiguration): self.dynamic_proxy_golang_api_key = kwargs.get("dynamic_proxy_golang_api_key", None) self.realtime_prefix = kwargs.get("realtime_prefix", "realtime") + self.interactivetools_enable = string_as_bool(kwargs.get('interactivetools_enable', False)) # Default chunk size for chunkable datatypes -- 64k self.display_chunk_size = int(kwargs.get('display_chunk_size', 65536)) diff --git a/lib/galaxy/config/sample/galaxy.yml.sample b/lib/galaxy/config/sample/galaxy.yml.sample index 52baec7990c..f9db07f32c6 100644 --- a/lib/galaxy/config/sample/galaxy.yml.sample +++ b/lib/galaxy/config/sample/galaxy.yml.sample @@ -423,6 +423,9 @@ galaxy: # scenarios than the watchdog default. #watch_tool_data_dir: 'false' + # Enable InteractiveTools by setting to true + #interactivetools_enable: false + # File containing old-style genome builds #builds_file_path: tool-data/shared/ucsc/builds.txt diff --git a/lib/galaxy/managers/configuration.py b/lib/galaxy/managers/configuration.py index 32c2464ddca..02f4bafd219 100644 --- a/lib/galaxy/managers/configuration.py +++ b/lib/galaxy/managers/configuration.py @@ -79,6 +79,7 @@ class ConfigSerializer(base.ModelSerializer): 'require_login' : _defaults_to(None), 'inactivity_box_content' : _defaults_to(None), 'visualizations_visible' : _defaults_to(True), + 'interactivetools_enable' : _defaults_to(False), 'message_box_content' : _defaults_to(None), 'message_box_visible' : _defaults_to(False), 'message_box_class' : _defaults_to('info'), diff --git a/lib/galaxy/tools/__init__.py b/lib/galaxy/tools/__init__.py index eb2be32404b..715c0ccf8e2 100755 --- a/lib/galaxy/tools/__init__.py +++ b/lib/galaxy/tools/__init__.py @@ -2449,6 +2449,10 @@ class RealTimeTool(Tool): tool_type = 'interactive' produces_entry_points = True + def __init__(self, config_file, tool_source, app, **kwd): + assert app.config.interactivetools_enable, ValueError('Trying to load an InteractiveTool, but InteractiveTools are not enabled.') + super(RealTimeTool, self).__init__(config_file, tool_source, app, **kwd) + def __remove_realtime_by_job(self, job): if job: eps = job.realtimetool_entry_points diff --git a/lib/galaxy/webapps/galaxy/config_schema.yml b/lib/galaxy/webapps/galaxy/config_schema.yml index 85c1c617386..2bb3dfd771e 100644 --- a/lib/galaxy/webapps/galaxy/config_schema.yml +++ b/lib/galaxy/webapps/galaxy/config_schema.yml @@ -928,6 +928,13 @@ mapping: Galaxy server, but contains a redirect to a third-party server, tricking a Galaxy user to access said site. + interactivetools_enable: + type: bool + default: false + required: false + desc: | + Enable InteractiveTools. + visualizations_visible: type: bool default: true diff --git a/lib/galaxy/webapps/galaxy/controllers/realtime.py b/lib/galaxy/webapps/galaxy/controllers/realtime.py index e43a92d1e60..785b18aec57 100644 --- a/lib/galaxy/webapps/galaxy/controllers/realtime.py +++ b/lib/galaxy/webapps/galaxy/controllers/realtime.py @@ -63,6 +63,8 @@ class RealTime(BaseUIController): @web.expose_api_anonymous def list(self, trans, **kwargs): """List all available realtimetools""" + if not trans.app.config.interactivetools_enable: + raise web.httpexceptions.HTTPNotFound() operation = kwargs.get('operation', None) message = None status = None