Source code for laion_fmri.config
"""Configuration management for laion_fmri."""
import json
import os
from pathlib import Path
from laion_fmri._errors import DataDirNotSetError
def _get_config_path():
"""Return the path to the config JSON file."""
config_home = os.environ.get(
"XDG_CONFIG_HOME", os.path.expanduser("~/.config")
)
return Path(config_home) / "laion_fmri" / "config.json"
[docs]
def dataset_initialize(path):
"""Initialize the dataset by setting and persisting the data directory.
Parameters
----------
path : str
Path to the data directory. Must exist on disk.
Raises
------
TypeError
If path is not a string.
FileNotFoundError
If the directory does not exist.
"""
if not isinstance(path, str):
raise TypeError(
f"path must be a string, got {type(path).__name__}"
)
data_path = Path(path)
if not data_path.is_dir():
raise FileNotFoundError(
f"Data directory does not exist: {path}"
)
# Create .laion_fmri metadata directory inside data dir
meta_dir = data_path / ".laion_fmri"
meta_dir.mkdir(exist_ok=True)
# Persist config
config_file = _get_config_path()
config_file.parent.mkdir(parents=True, exist_ok=True)
config = {"data_dir": str(data_path)}
config_file.write_text(json.dumps(config, indent=2))
[docs]
def get_data_dir():
"""Read the persisted data directory.
Returns
-------
str
The configured data directory path.
Raises
------
DataDirNotSetError
If no data directory has been configured.
"""
config_file = _get_config_path()
if not config_file.exists():
raise DataDirNotSetError(
"Data directory is not configured. "
"Run: from laion_fmri.config import dataset_initialize; "
"dataset_initialize('/path/to/data')"
)
config = json.loads(config_file.read_text())
return config["data_dir"]