Source code for eradiate.data._store
from __future__ import annotations
from collections import OrderedDict
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 .. 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
download_dir = config.settings.download_dir
source_dir = config.SOURCE_DIR
data_dir = None if source_dir is None else config.SOURCE_DIR / "resources" / "data"
if offline is None:
offline = config.settings.offline
if production is None:
production = config.SOURCE_DIR is None
# 'small_files' configuration
if offline:
if production:
# Offline, prod: we expect files to be in the download directory
small_files = BlindDirectoryDataStore(path=download_dir)
else:
# Offline, dev: we expect files to be in the data submodule
small_files = SafeDirectoryDataStore(path=data_dir)
else:
if production:
# Online, prod: we expect files to be on GitHub
small_files = SafeOnlineDataStore(
base_url="/".join(
[
config.settings.small_files_registry_url,
config.settings.small_files_registry_revision,
]
),
path=download_dir,
)
else:
# Online, dev: we expect files to be in the data submodule
small_files = SafeDirectoryDataStore(path=data_dir)
# 'large_files_stable' configuration
if offline:
# Offline: we expect files to be in the download directory
large_files_stable = BlindDirectoryDataStore(path=download_dir / "stable")
else:
# Online: we expect files to be on the Internet, with checksum
large_files_stable = SafeOnlineDataStore(
base_url="/".join([config.settings.data_store_url, "stable"]),
path=download_dir / "stable",
)
# 'large_files_unstable' configuration
if offline:
# Offline: we expect files to be in the download directory
large_files_unstable = BlindDirectoryDataStore(path=download_dir / "unstable")
else:
# Online: we expect files to be on the Internet, without checksum
large_files_unstable = BlindOnlineDataStore(
base_url="/".join([config.settings.data_store_url, "unstable"]),
path=download_dir / "unstable",
)
data_store = MultiDataStore(
stores=OrderedDict(
[
("small_files", small_files),
("large_files_stable", large_files_stable),
("large_files_unstable", large_files_unstable),
]
)
)
# Initialize the data store upon module import
init_data_store()