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.webapps.reports.config
"""Universe configuration builder."""
import logging
import os
import re
from galaxy.util import string_as_bool
log = logging.getLogger(__name__)
[docs]def resolve_path(path, root):
"""If 'path' is relative make absolute by prepending 'root'"""
if not (os.path.isabs(path)):
path = os.path.join(root, path)
return path
[docs]class Configuration:
[docs] def __init__(self, **kwargs):
self.config_dict = kwargs
self.root = kwargs.get("root_dir", ".")
# Database related configuration
self.database = resolve_path(kwargs.get("database_file", "database/universe.sqlite"), self.root)
self.database_connection = kwargs.get("database_connection", False)
self.database_engine_options = get_database_engine_options(kwargs)
# Where dataset files are stored
self.file_path = resolve_path(kwargs.get("file_path", "database/objects"), self.root)
self.new_file_path = resolve_path(kwargs.get("new_file_path", "database/tmp"), self.root)
self.id_secret = kwargs.get("id_secret", "USING THE DEFAULT IS NOT SECURE!")
self.use_remote_user = string_as_bool(kwargs.get("use_remote_user", "False"))
self.require_login = string_as_bool(kwargs.get("require_login", "False"))
self.template_cache_path = resolve_path(
kwargs.get("template_cache_path", "database/compiled_templates/reports"), self.root
)
self.allow_user_creation = string_as_bool(kwargs.get("allow_user_creation", "True"))
self.allow_user_deletion = string_as_bool(kwargs.get("allow_user_deletion", "False"))
self.log_actions = string_as_bool(kwargs.get("log_actions", "False"))
self.brand = kwargs.get("brand", None)
# Configuration for the message box directly below the masthead.
self.message_box_visible = string_as_bool(kwargs.get("message_box_visible", False))
self.message_box_content = kwargs.get("message_box_content", None)
self.message_box_class = kwargs.get("message_box_class", "info")
self.wiki_url = kwargs.get("wiki_url", "https://galaxyproject.org/")
self.blog_url = kwargs.get("blog_url", None)
self.screencasts_url = kwargs.get("screencasts_url", None)
self.log_events = False
self.cookie_path = kwargs.get("cookie_path", None)
self.cookie_domain = kwargs.get("cookie_domain", None)
# Error logging with sentry
self.sentry_dsn = kwargs.get("sentry_dsn", None)
# Security/Policy Compliance
self.redact_username_in_logs = False
self.redact_email_in_job_name = False
self.enable_beta_gdpr = string_as_bool(kwargs.get("enable_beta_gdpr", False))
if self.enable_beta_gdpr:
self.redact_username_in_logs = True
self.redact_email_in_job_name = True
self.allow_user_deletion = True
[docs] def check(self):
# Check that required directories exist
for path in (self.root,):
if not os.path.isdir(path):
raise ConfigurationError(f"Directory does not exist: {path}")
@property
def sentry_dsn_public(self):
"""
Sentry URL with private key removed for use in client side scripts,
sentry server will need to be configured to accept events
"""
if self.sentry_dsn:
return re.sub(r"^([^:/?#]+:)?//(\w+):(\w+)", r"\1//\2", self.sentry_dsn)
else:
return None
[docs]def get_database_engine_options(kwargs):
"""
Allow options for the SQLAlchemy database engine to be passed by using
the prefix "database_engine_option".
"""
conversions = {
"convert_unicode": string_as_bool,
"pool_timeout": int,
"echo": string_as_bool,
"echo_pool": string_as_bool,
"pool_recycle": int,
"pool_size": int,
"max_overflow": int,
"pool_threadlocal": string_as_bool,
}
prefix = "database_engine_option_"
prefix_len = len(prefix)
rval = {}
for key, value in kwargs.items():
if key.startswith(prefix):
key = key[prefix_len:]
if key in conversions:
value = conversions[key](value)
rval[key] = value
return rval