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.

Source code for tool_shed.webapp.config

"""
Universe configuration builder.
"""
import configparser
import logging
import logging.config
import os
from datetime import timedelta

from galaxy.config import (
    BaseAppConfiguration,
    CommonConfigurationMixin,
    expand_pretty_datetime_format,
    get_database_engine_options,
    TOOL_SHED_CONFIG_SCHEMA_PATH,
)
from galaxy.config.schema import AppSchema
from galaxy.exceptions import ConfigurationError
from galaxy.util import string_as_bool
from galaxy.version import (
    VERSION,
    VERSION_MAJOR,
    VERSION_MINOR,
)

log = logging.getLogger(__name__)

TOOLSHED_APP_NAME = "tool_shed"


[docs]class ToolShedAppConfiguration(BaseAppConfiguration, CommonConfigurationMixin): default_config_file_name = "tool_shed.yml" add_sample_file_to_defaults = {"datatypes_config_file"} def _load_schema(self): return AppSchema(TOOL_SHED_CONFIG_SCHEMA_PATH, TOOLSHED_APP_NAME)
[docs] def __init__(self, **kwargs): super().__init__(**kwargs) self._process_config(kwargs)
@property def shed_tool_data_path(self): return self.tool_data_path
[docs] def check(self): # Check that required directories exist; attempt to create otherwise paths_to_check = [ self.file_path, self.hgweb_config_dir, self.tool_data_path, self.template_cache_path, os.path.join(self.tool_data_path, "shared", "jars"), ] for path in paths_to_check: self._ensure_directory(path) # Check that required files exist. if not os.path.isfile(self.datatypes_config): raise ConfigurationError(f"File not found: {self.datatypes_config}")
def _process_config(self, kwargs): # Backwards compatibility for names used in too many places to fix self.datatypes_config = self.datatypes_config_file # Collect the umask and primary gid from the environment self.umask = os.umask(0o77) # get the current umask os.umask(self.umask) # can't get w/o set, so set it back self.gid = os.getgid() # if running under newgrp(1) we'll need to fix the group of data created on the cluster self.version_major = VERSION_MAJOR self.version_minor = VERSION_MINOR self.version = VERSION # Database related configuration if not self.database_connection: # Provide default if not supplied by user self.database_connection = f"sqlite:///{self._in_data_dir('community.sqlite')}?isolation_level=IMMEDIATE" self.database_engine_options = get_database_engine_options(kwargs) self.database_create_tables = string_as_bool(kwargs.get("database_create_tables", "True")) # Where dataset files are stored self.file_path = self._in_root_dir(self.file_path) self.new_file_path = self._in_root_dir(self.new_file_path) self.cookie_path = kwargs.get("cookie_path") self.cookie_domain = kwargs.get("cookie_domain") self.enable_quotas = string_as_bool(kwargs.get("enable_quotas", False)) # Tool stuff self.tool_path = self._in_root_dir(kwargs.get("tool_path", "tools")) self.tool_secret = kwargs.get("tool_secret", "") self.tool_data_path = os.path.join(os.getcwd(), kwargs.get("tool_data_path", "shed-tool-data")) self.tool_data_table_config_path = None self.integrated_tool_panel_config = self._in_root_dir( kwargs.get("integrated_tool_panel_config", "integrated_tool_panel.xml") ) self.builds_file_path = self._in_root_dir( kwargs.get("builds_file_path", os.path.join(self.tool_data_path, "shared", "ucsc", "builds.txt")) ) self.len_file_path = self._in_root_dir( kwargs.get("len_file_path", os.path.join(self.tool_data_path, "shared", "ucsc", "chrom")) ) self.ftp_upload_dir = kwargs.get("ftp_upload_dir") self.update_integrated_tool_panel = False # Galaxy flavor Docker Image self.user_activation_on = None self.registration_warning_message = kwargs.get("registration_warning_message") self.email_domain_blocklist_content = None self.email_domain_allowlist_content = None self.template_cache_path = self._in_root_dir( kwargs.get("template_cache_path", "database/compiled_templates/community") ) self.error_email_to = kwargs.get("error_email_to") self.pretty_datetime_format = expand_pretty_datetime_format(self.pretty_datetime_format) # Configuration for the message box directly below the masthead. self.wiki_url = kwargs.get("wiki_url", "https://galaxyproject.org/") self.blog_url = kwargs.get("blog_url") self.screencasts_url = kwargs.get("screencasts_url") self.log_events = False self.cloud_controller_instance = False self.server_name = "" # Where the tool shed hgweb.config file is stored - the default is the Galaxy installation directory. self.hgweb_config_dir = self._in_root_dir(self.hgweb_config_dir) or self.root # Proxy features self.drmaa_external_runjob_script = kwargs.get("drmaa_external_runjob_script") # Parse global_conf and save the parser global_conf = kwargs.get("global_conf") global_conf_parser = configparser.ConfigParser() self.global_conf_parser = global_conf_parser if global_conf and "__file__" in global_conf and ".yml" not in global_conf["__file__"]: global_conf_parser.read(global_conf["__file__"]) self.running_functional_tests = string_as_bool(kwargs.get("running_functional_tests", False)) self.citation_cache_data_dir = self._in_root_dir( kwargs.get("citation_cache_data_dir", "database/tool_shed_citations/data") ) self.citation_cache_lock_dir = self._in_root_dir( kwargs.get("citation_cache_lock_dir", "database/tool_shed_citations/locks") ) self.password_expiration_period = timedelta(days=int(self.password_expiration_period)) # Security/Policy Compliance self.redact_username_during_deletion = False self.redact_email_during_deletion = False self.redact_username_in_logs = False self.enable_beta_gdpr = string_as_bool(kwargs.get("enable_beta_gdpr", False)) if self.enable_beta_gdpr: self.redact_username_during_deletion = True self.redact_email_during_deletion = True self.redact_username_in_logs = True self.allow_user_deletion = True
Configuration = ToolShedAppConfiguration