Source code for eradiate.data._store

from __future__ import annotations

from collections import OrderedDict
from pathlib import Path

from ._blind_directory import BlindDirectoryDataStore
from ._blind_online import BlindOnlineDataStore
from ._multi import MultiDataStore
from ._safe_directory import SafeDirectoryDataStore
from ._safe_online import SafeOnlineDataStore
from .._config import config

#: Global data store.
data_store: MultiDataStore | None = None


[docs] def init_data_store( offline: bool | None = None, production: bool | None = None ) -> None: """ Initialize the global data store. Parameters ---------- offline : bool, optional If ``True``, replace all online data stores with blind directory data stores. If unset, the global offline configuration is used. production : bool, optional If ``True``, replace all development data stores providing files from the current local source folder with online safe data stores. If set to ``True`` with ``offline`` flag set to ``True``, then the data must be provided by the user before accessing it. If unset, the global production configuration is used. Notes ----- This function is called automatically when the ``eradiate.data`` package is imported. """ global data_store if offline is None: offline = config.offline if production is None: production = config.source_dir is None download_dir = config.download_dir if download_dir is None: if production: download_dir = Path("./eradiate_downloads").absolute() else: download_dir = config.source_dir / "resources" / "data" if not production: small_files = SafeDirectoryDataStore(path=download_dir) else: if offline: small_files = BlindDirectoryDataStore(path=download_dir) else: small_files = SafeOnlineDataStore( base_url="/".join( [ config.small_files_registry_url, config.small_files_registry_revision, ] ), path=download_dir, ) if offline: data_store = MultiDataStore( stores=OrderedDict( [ ("small_files", small_files), ( "large_files_stable", BlindDirectoryDataStore(path=download_dir / "stable"), ), ( "large_files_unstable", BlindDirectoryDataStore(path=download_dir / "unstable"), ), ] ) ) else: data_store = MultiDataStore( stores=OrderedDict( [ ("small_files", small_files), ( "large_files_stable", SafeOnlineDataStore( base_url="/".join([config.data_store_url, "stable"]), path=download_dir / "stable", ), ), ( "large_files_unstable", BlindOnlineDataStore( base_url="/".join([config.data_store_url, "unstable"]), path=download_dir / "unstable", ), ), ] ) )
# Initialise the data store upon module import init_data_store()