Source code for galaxy.model.unittest_utils.data_app

"""Mock GalaxyApp exposing config + functionality required for galaxy-data package.

There is a more expansive MockApp in test/unit/unittest_utils - but it isn't packaged
and it has dependencies from across the app. This mock application and config is
more appropriate for testing galaxy-data functionality and will be included with
galaxy-data.
"""

import os
import shutil
import tempfile
from typing import Optional

from galaxy import (
    model,
    objectstore,
)
from galaxy.datatypes import registry
from galaxy.files import (
    ConfiguredFileSources,
    NullConfiguredFileSources,
)
from galaxy.model.mapping import (
    GalaxyModelMapping,
    init,
)
from galaxy.model.security import GalaxyRBACAgent
from galaxy.model.tags import GalaxyTagHandler
from galaxy.security.idencoding import IdEncodingHelper
from galaxy.util.bunch import Bunch

GALAXY_TEST_UNITTEST_SECRET = "6e46ed6483a833c100e68cc3f1d0dd76"
GALAXY_TEST_IN_MEMORY_DB_CONNECTION = "sqlite:///:memory:"


[docs]class GalaxyDataTestConfig(Bunch): """Minimal Galaxy mock config object that exposes and uses only what is needed for the galaxy-data package.""" security: IdEncodingHelper database_connection: str root: str data_dir: str _remove_root: bool
[docs] def __init__(self, root=None, **kwd): Bunch.__init__(self, **kwd) if not root: root = tempfile.mkdtemp() self._remove_root = True else: self._remove_root = False self.root = root self.data_dir = os.path.join(root, "database") self.security = IdEncodingHelper(id_secret=GALAXY_TEST_UNITTEST_SECRET) self.database_connection = kwd.get("database_connection", GALAXY_TEST_IN_MEMORY_DB_CONNECTION) # objectstore config values... self.object_store_config_file = "" self.object_store_config = None self.object_store = "disk" self.object_store_check_old_style = False self.object_store_cache_path = "/tmp/cache" self.object_store_cache_size = -1 self.object_store_store_by = "uuid" self.umask = os.umask(0o77) self.gid = os.getgid() # objectstore config directories... self.jobs_directory = os.path.join(self.data_dir, "jobs_directory") self.new_file_path = os.path.join(self.data_dir, "tmp") self.file_path = os.path.join(self.data_dir, "files") self.server_name = "main" self.enable_quotas = False self.user_library_import_symlink_allowlist = [] self.fetch_url_allowlist_ips = [] self.library_import_dir = None self.user_library_import_dir = None self.ftp_upload_dir = None self.ftp_upload_purge = False
def __del__(self): if self._remove_root: shutil.rmtree(self.root)
[docs]class GalaxyDataTestApp: """Minimal Galaxy mock app object that exposes and uses only what is needed for the galaxy-data package.""" security: IdEncodingHelper model: GalaxyModelMapping security_agent: GalaxyRBACAgent file_sources: ConfiguredFileSources = NullConfiguredFileSources()
[docs] def __init__(self, config: Optional[GalaxyDataTestConfig] = None, **kwd): config = config or GalaxyDataTestConfig(**kwd) self.config = config self.security = config.security self.object_store = objectstore.build_object_store_from_config(self.config) self.model = init("/tmp", self.config.database_connection, create_tables=True) model.setup_global_object_store_for_models(self.object_store) self.security_agent = self.model.security_agent self.tag_handler = GalaxyTagHandler(self.model.session) self.init_datatypes()
[docs] def init_datatypes(self): datatypes_registry = registry.Registry() datatypes_registry.load_datatypes() model.set_datatypes_registry(datatypes_registry) datatypes_registry.set_external_metadata_tool = MockSetExternalTool() self.datatypes_registry = datatypes_registry
[docs]class MockSetExternalTool:
[docs] def regenerate_imported_metadata_if_needed(self, *args, **kwds): pass