Source code for distrax.osds
import logging
from importlib import import_module
from typing import NamedTuple, Optional, Union
from . import abstract_osd
log = logging.getLogger(__name__)
AVAILABLE = ["ceph"]
"""OSDs that are supported and can be used."""
class OSD(NamedTuple):
    """Structure for osd access."""
    name: str
    OSD: type[abstract_osd.AbstractOSD]
[docs]def set_osd(osd: str) -> None:
    """Sets the OSD to use.
    Args:
        osd: the osd to get, i.e. ceph
    Examples:
        >>> distrax.osds as osd
        >>> osd.set_osd()
    """
    osd = osd.lower()
    global _current
    if osd in AVAILABLE:
        module_ = import_module(f"distrax.osds.{osd}_osd")
        if hasattr(module_, "_osd"):
            log.debug("Switching object storage device to `%s`", module_._osd.name)
            _current = module_._osd
        else:
            raise Exception(f"Module `{osd}` is not configured correctly.")
    else:
        raise Exception(
            f"Object Storage Device `{osd}` is not available! Choose from: {AVAILABLE}"
        ) 
[docs]def get_osd(name: str = "") -> Optional[OSD]:
    """Gets the osd as specified by the name.
    Args:
        name: Name of a supported osd, i.e. ceph
    Returns:
        A name tuple with the name of the storage and the class
    Examples:
        >>> distrax.osds as osds
        >>> osd = osds.get_osd("ceph")
        >>> osd.name
            ceph
        >>> osd.OSD
            CephOSD
    """
    if name != "":
        set_osd(name)
    if _current is None:
        set_osd(AVAILABLE[0])
    return _current 
_current: Union[OSD, None] = None