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 galaxy.main_config

"""Utilities for finding Galaxy's configuration file.

This is for use by web framework code and scripts (e.g. scripts/galaxy_main.py).
"""
import os
from typing import (
    List,
    NamedTuple,
    Optional,
)

from galaxy.util.properties import find_config_file
from galaxy.web_stack import get_app_kwds

DEFAULT_INI_APP = "main"
DEFAULT_CONFIG_SECTION = "galaxy"


[docs]def default_relative_config_paths_for(app_name: str) -> List[str]: paths = [f"config/{app_name}.yml", f"config/{app_name}.ini", "universe_wsgi.ini"] # Do not load sample config for galaxy if app_name != "galaxy": paths.append(f"config/{app_name}.yml.sample") return paths
[docs]def absolute_config_path(path, galaxy_root: Optional[str]) -> Optional[str]: if path and not os.path.isabs(path) and galaxy_root: path = os.path.join(galaxy_root, path) return path
[docs]def config_is_ini(config_file: Optional[str]) -> bool: return bool(config_file and (config_file.endswith(".ini") or config_file.endswith(".ini.sample")))
[docs]def find_config(supplied_config: Optional[str], galaxy_root: Optional[str], app_name: str = "galaxy") -> Optional[str]: if supplied_config: return supplied_config if galaxy_root is None: return os.path.abspath(f"{app_name}.yml") for filename in default_relative_config_paths_for(app_name): config_path = os.path.join(galaxy_root, filename) if os.path.exists(config_path): return config_path return None
[docs]class WebappSetupProps(NamedTuple): """Basic properties to provide information about the App and the environment variables used to resolve the App configuration.""" app_name: str default_section_name: str env_config_file: str env_config_section: Optional[str] = None check_galaxy_root: bool = False
[docs]class WebappConfig(NamedTuple): """The resolved configuration values for a Webapp.""" global_conf: dict load_app_kwds: dict wsgi_preflight: bool = False
[docs]class WebappConfigResolver:
[docs] def __init__(self, props: WebappSetupProps) -> None: self.props = props self.app_kwds = get_app_kwds(props.default_section_name, props.app_name) self.config_file = self._resolve_config_file_path() self.is_ini_file = config_is_ini(self.config_file) self.config_section = self._resolve_section_name() self._update_kwds() os.environ["IS_WEBAPP"] = "1"
[docs] def resolve_config(self) -> WebappConfig: global_conf = {} if self.is_ini_file: global_conf["__file__"] = self.config_file return WebappConfig(global_conf=global_conf, load_app_kwds=self.app_kwds)
def _resolve_config_file_path(self) -> Optional[str]: config_file = self.app_kwds.get("config_file") if not config_file and os.environ.get(self.props.env_config_file): config_file = os.path.abspath(os.environ[self.props.env_config_file]) elif self.props.check_galaxy_root: galaxy_root = self.app_kwds.get("galaxy_root") or os.environ.get("GALAXY_ROOT_DIR") config_file = find_config(config_file, galaxy_root, app_name=self.props.app_name) config_file = absolute_config_path(config_file, galaxy_root=galaxy_root) else: config_file = find_config_file([self.props.app_name]) return config_file def _resolve_section_name(self) -> str: config_section = self.props.default_section_name if self.props.env_config_section and self.props.env_config_section in os.environ: config_section = os.environ[self.props.env_config_section] elif self.is_ini_file: config_section = f"app:{DEFAULT_INI_APP}" return config_section def _update_kwds(self) -> None: if "config_file" not in self.app_kwds: self.app_kwds["config_file"] = self.config_file if "config_section" not in self.app_kwds: self.app_kwds["config_section"] = self.config_section