Source code for aac_datasets.utils.globals

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import logging
import os
import os.path as osp

from pathlib import Path
from typing import Any, Union


pylog = logging.getLogger(__name__)


# Public functions
[docs]def get_default_root() -> str: """Returns the default root directory path. If :func:`~aac_datasets.utils.globals.set_default_root` has been used before with a string argument, it will return the value given to this function. Else if the environment variable AAC_DATASETS_ROOT has been set to a string, it will return its value. Else it will be equal to "." by default. """ return __get_default_value("root")
[docs]def get_default_ffmpeg_path() -> str: """Returns the default ffmpeg executable path. If :func:`~aac_datasets.utils.globals.set_default_ffmpeg_path` has been used before with a string argument, it will return the value given to this function. Else if the environment variable AAC_DATASETS_FFMPEG_PATH has been set to a string, it will return its value. Else it will be equal to "ffmpeg" by default. """ return __get_default_value("ffmpeg")
[docs]def get_default_ytdlp_path() -> str: """Returns the default yt-dlp executable path. If :func:`~aac_datasets.utils.globals.set_default_ytdlp_path` has been used before with a string argument, it will return the value given to this function. Else if the environment variable AAC_DATASETS_YTDLP_PATH has been set to a string, it will return its value. Else it will be equal to "yt-dlp" by default. """ return __get_default_value("ytdlp")
[docs]def get_default_zip_path() -> str: """Returns the default zip executable path. If :func:`~aac_datasets.utils.globals.set_default_zip_path` has been used before with a string argument, it will return the value given to this function. Else if the environment variable AAC_DATASETS_ZIP_PATH has been set to a string, it will return its value. Else it will be equal to "zip" by default. """ return __get_default_value("zip")
[docs]def set_default_root(cache_path: Union[str, Path, None]) -> None: """Override default root directory path.""" __set_default_value("root", cache_path)
[docs]def set_default_ffmpeg_path(tmp_path: Union[str, Path, None]) -> None: """Override default ffmpeg executable path.""" __set_default_value("ffmpeg", tmp_path)
[docs]def set_default_ytdlp_path(java_path: Union[str, Path, None]) -> None: """Override default yt-dl executable path.""" __set_default_value("ytdlp", java_path)
[docs]def set_default_zip_path(tmp_path: Union[str, Path, None]) -> None: """Override default zip executable path.""" __set_default_value("zip", tmp_path)
# Private functions def _get_root(root: Union[str, Path, None] = None) -> str: return __get_value("root", root) def _get_ffmpeg_path(ffmpeg_path: Union[str, Path, None] = None) -> str: return __get_value("ffmpeg", ffmpeg_path) def _get_ytdlp_path(ytdlp_path: Union[str, Path, None] = None) -> str: return __get_value("ytdlp", ytdlp_path) def _get_zip_path(zip_path: Union[str, Path, None] = None) -> str: return __get_value("zip", zip_path) def __get_default_value(value_name: str) -> str: values = __DEFAULT_GLOBALS[value_name]["values"] process_func = __DEFAULT_GLOBALS[value_name]["process"] for source, value_or_env_varname in values.items(): if source.startswith("env"): value = os.getenv(value_or_env_varname, None) else: value = value_or_env_varname if value is not None: value = process_func(value) return value pylog.error(f"Values: {values}") raise RuntimeError( f"Invalid default value for value_name={value_name}. (all default values are None)" ) def __set_default_value( value_name: str, value: Any, ) -> None: __DEFAULT_GLOBALS[value_name]["values"]["user"] = value def __get_value(value_name: str, value: Any = None) -> Any: if value is None or value is ...: return __get_default_value(value_name) else: process_func = __DEFAULT_GLOBALS[value_name]["process"] value = process_func(value) return value def __process_path(value: Union[str, Path, None]) -> Union[str, None]: if value is None or value is ...: return None value = str(value) value = osp.expanduser(value) value = osp.expandvars(value) return value __DEFAULT_GLOBALS = { "root": { "values": { "user": None, "env": "AAC_DATASETS_ROOT", "package": ".", }, "process": __process_path, }, "ytdlp": { "values": { "user": None, "env": "AAC_DATASETS_YTDLP_PATH", "package": "yt-dlp", }, "process": __process_path, }, "ffmpeg": { "values": { "user": None, "env": "AAC_DATASETS_FFMPEG_PATH", "package": "ffmpeg", }, "process": __process_path, }, "zip": { "values": { "user": None, "env": "AAC_DATASETS_ZIP_PATH", "package": "zip", }, "process": __process_path, }, }