Warning
This document is for an in-development version 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.model.mapping
import logging
from threading import local
from typing import (
Optional,
Type,
TYPE_CHECKING,
)
from galaxy import model
from galaxy.config import GalaxyAppConfiguration
from galaxy.model import (
mapper_registry,
setup_global_object_store_for_models,
)
from galaxy.model.base import SharedModelMapping
from galaxy.model.orm.engine_factory import build_engine
from galaxy.model.security import GalaxyRBACAgent
from galaxy.model.triggers.update_audit_table import install as install_timestamp_triggers
if TYPE_CHECKING:
from galaxy.objectstore import BaseObjectStore
log = logging.getLogger(__name__)
metadata = mapper_registry.metadata
[docs]class GalaxyModelMapping(SharedModelMapping):
security_agent: GalaxyRBACAgent
thread_local_log: Optional[local]
User: Type
GalaxySession: Type
[docs]def init(
file_path,
url,
engine_options=None,
create_tables=False,
map_install_models=False,
database_query_profiling_proxy=False,
trace_logger=None,
use_pbkdf2=True,
slow_query_log_threshold=0,
thread_local_log: Optional[local] = None,
log_query_counts=False,
) -> GalaxyModelMapping:
# Build engine
engine = build_engine(
url,
engine_options,
database_query_profiling_proxy,
trace_logger,
slow_query_log_threshold,
thread_local_log=thread_local_log,
log_query_counts=log_query_counts,
)
# Create tables if needed
if create_tables:
mapper_registry.metadata.create_all(bind=engine)
create_additional_database_objects(engine)
if map_install_models:
from galaxy.model.tool_shed_install import mapping as install_mapping # noqa: F401
install_mapping.create_database_objects(engine)
# Configure model, build ModelMapping
return configure_model_mapping(file_path, use_pbkdf2, engine, map_install_models, thread_local_log)
[docs]def configure_model_mapping(
file_path: str,
use_pbkdf2,
engine,
map_install_models,
thread_local_log,
) -> GalaxyModelMapping:
_configure_model(file_path, use_pbkdf2)
return _build_model_mapping(engine, map_install_models, thread_local_log)
def _configure_model(file_path: str, use_pbkdf2) -> None:
model.Dataset.file_path = file_path
model.User.use_pbkdf2 = use_pbkdf2
def _build_model_mapping(engine, map_install_models, thread_local_log) -> GalaxyModelMapping:
model_modules = [model]
if map_install_models:
from galaxy.model import tool_shed_install
model_modules.append(tool_shed_install)
model_mapping = GalaxyModelMapping(model_modules, engine)
model_mapping.security_agent = GalaxyRBACAgent(model_mapping.session)
model_mapping.thread_local_log = thread_local_log
return model_mapping
[docs]def init_models_from_config(
config: GalaxyAppConfiguration,
map_install_models: bool = False,
object_store: Optional["BaseObjectStore"] = None,
trace_logger=None,
) -> GalaxyModelMapping:
model = init(
config.file_path,
config.database_connection,
config.database_engine_options,
map_install_models=map_install_models,
database_query_profiling_proxy=config.database_query_profiling_proxy,
trace_logger=trace_logger,
use_pbkdf2=config.get_bool("use_pbkdf2", True),
slow_query_log_threshold=config.slow_query_log_threshold,
thread_local_log=config.thread_local_log,
log_query_counts=config.database_log_query_counts,
)
if object_store:
setup_global_object_store_for_models(object_store)
return model