Source code for eradiate.config._settings
from __future__ import annotations
import enum
import importlib.resources
import typing as t
from pathlib import Path
from dynaconf import Dynaconf, Validator
from ._env import ENV, SOURCE_DIR
from ..frame import AzimuthConvention
[docs]
class ProgressLevel(enum.IntEnum):
"""
An enumeration defining valid progress levels.
This is an integer enumeration, meaning that levels can be compared to
numerics.
"""
[docs]
@staticmethod
def convert(value: t.Any) -> ProgressLevel:
"""
Attempt conversion of a value to an :class:`.ProgressLevel`
instance. The conversion protocol is as follows:
* If ``value`` is a string, it is converted to upper case and passed to
the indexing operator of :class:`.ProgressLevel`.
* If ``value`` is an integer, it is passed to the call operator of
:class:`.ProgressLevel`.
* If ``value`` is a :class:`.ProgressLevel` instance, it is returned
without change.
* Otherwise, the method raises an exception.
Parameters
----------
value
Value to attempt conversion of.
Returns
-------
Converted value
Raises
------
TypeError
If no conversion protocol exists for ``value``.
"""
if isinstance(value, ProgressLevel):
return value
elif isinstance(value, str):
return ProgressLevel[value.upper()]
elif isinstance(value, int):
return ProgressLevel(value)
else:
raise TypeError(f"Cannot convert a {type(value)} instance to ProgressLevel")
NONE = 0 #: No progress
SPECTRAL_LOOP = enum.auto() #: Up to spectral loop level progress
KERNEL = enum.auto() #: Up to kernel level progress
def _default_download_dir():
return (
Path("./eradiate_downloads").absolute().resolve()
if SOURCE_DIR is None
else SOURCE_DIR / ".eradiate_downloads"
)
DEFAULTS = importlib.resources.files("eradiate.config").joinpath(f"{ENV}.toml")
#: Main settings data structure. See the `Dynaconf documentation <https://www.dynaconf.com/>`_
#: for details.
settings = Dynaconf(
settings_files=[DEFAULTS, "eradiate.toml"],
envvar_prefix="ERADIATE",
merge_enabled=True,
validate_on_update=True,
validators=[
Validator("AZIMUTH_CONVENTION", cast=AzimuthConvention.convert),
Validator("DATA_STORE_URL", cast=str),
Validator(
"DOWNLOAD_DIR",
default=_default_download_dir(),
cast=lambda x: Path(x).resolve(),
),
Validator("OFFLINE", cast=bool),
Validator("PROGRESS", cast=ProgressLevel.convert),
Validator("SMALL_FILES_REGISTRY_URL", cast=str),
Validator("SMALL_FILES_REGISTRY_REVISION", cast=str),
],
)