Module pyboiler.config

Script configuration singleton for internal variables

config contains global configuration information not intended to be modified by users

Example usage

from pyboiler.config import config
print(config().PATH_ROOT)

Add your own global configuration variables

config().MY_VARIABLE = "Hello, world!"
Expand source code
"""Script configuration singleton for internal variables

config contains global configuration information not intended to be modified by users

Example usage
```python
from pyboiler.config import config
print(config().PATH_ROOT)
```

Add your own global configuration variables
```python
config().MY_VARIABLE = "Hello, world!"
```
"""

import sys
import os
import pathlib
import subprocess

from .imports import get_locals
from .internal.log.inspect import meta


class config:
    """Global configuration, not intended to be modified by users"""

    __instance = None

    # define singleton attributes
    #: Path to project root, defaults to the toplevel of the git repository
    PATH_ROOT: pathlib.Path = None  # type: ignore
    #: PATH_ROOT / "logs"
    PATH_LOGS: pathlib.Path = None  # type: ignore
    FILEPATH_PROFILE: pathlib.Path = None  # type: ignore
    FILEPATH_SETTINGS: pathlib.Path = None  # type: ignore

    #: Defines what serialize type to use. One of ['json', 'xml']
    SERIAL: str = "json"

    #: pyboiler.Platform enum for the current platform
    SYS_PLAT = None
    SENTINEL = object()

    def __new__(cls):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
            cls.__instance._init()
        return cls.__instance

    def _init(self):
        """Initialize config attributes"""
        self.PATH_ROOT = self._init_path_root()
        self.PATH_LOGS = self.PATH_ROOT / "logs"
        self.FILEPATH_PROFILE = self.PATH_ROOT / "profiler.stats"
        self.FILEPATH_SETTINGS = self.PATH_ROOT / f"settings.{self.SERIAL}"

        self.SYS_PLAT = self._init_sys_plat()

    def json(self) -> dict:
        """Return config attributes as a dictionary"""
        fmt = {}

        for k in get_locals(self, ("init", "json")):
            fmt[k] = getattr(self, k)
        return fmt

    def _init_path_root(self) -> pathlib.Path:
        """Initialize PATH_ROOT to the toplevel of the git repo"""
        mod_file = pathlib.Path(os.path.dirname(sys.argv[0])).absolute()
        fpath = subprocess.getoutput(
            f"cd {str(mod_file)} && git rev-parse --show-toplevel"
        )
        if "fatal:" in fpath:
            fpath = mod_file
        else:
            fpath = pathlib.Path(fpath)
        return fpath

    def _init_sys_plat(self):
        """Initialize SYS_PLAT to a pyboiler.platform.Platform enum"""
        from .platform import Platform

        return Platform.get()

Classes

class config

Global configuration, not intended to be modified by users

Expand source code
class config:
    """Global configuration, not intended to be modified by users"""

    __instance = None

    # define singleton attributes
    #: Path to project root, defaults to the toplevel of the git repository
    PATH_ROOT: pathlib.Path = None  # type: ignore
    #: PATH_ROOT / "logs"
    PATH_LOGS: pathlib.Path = None  # type: ignore
    FILEPATH_PROFILE: pathlib.Path = None  # type: ignore
    FILEPATH_SETTINGS: pathlib.Path = None  # type: ignore

    #: Defines what serialize type to use. One of ['json', 'xml']
    SERIAL: str = "json"

    #: pyboiler.Platform enum for the current platform
    SYS_PLAT = None
    SENTINEL = object()

    def __new__(cls):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
            cls.__instance._init()
        return cls.__instance

    def _init(self):
        """Initialize config attributes"""
        self.PATH_ROOT = self._init_path_root()
        self.PATH_LOGS = self.PATH_ROOT / "logs"
        self.FILEPATH_PROFILE = self.PATH_ROOT / "profiler.stats"
        self.FILEPATH_SETTINGS = self.PATH_ROOT / f"settings.{self.SERIAL}"

        self.SYS_PLAT = self._init_sys_plat()

    def json(self) -> dict:
        """Return config attributes as a dictionary"""
        fmt = {}

        for k in get_locals(self, ("init", "json")):
            fmt[k] = getattr(self, k)
        return fmt

    def _init_path_root(self) -> pathlib.Path:
        """Initialize PATH_ROOT to the toplevel of the git repo"""
        mod_file = pathlib.Path(os.path.dirname(sys.argv[0])).absolute()
        fpath = subprocess.getoutput(
            f"cd {str(mod_file)} && git rev-parse --show-toplevel"
        )
        if "fatal:" in fpath:
            fpath = mod_file
        else:
            fpath = pathlib.Path(fpath)
        return fpath

    def _init_sys_plat(self):
        """Initialize SYS_PLAT to a pyboiler.platform.Platform enum"""
        from .platform import Platform

        return Platform.get()

Class variables

var FILEPATH_PROFILE : pathlib.Path
var FILEPATH_SETTINGS : pathlib.Path
var PATH_LOGS : pathlib.Path

PATH_ROOT / "logs"

var PATH_ROOT : pathlib.Path

Path to project root, defaults to the toplevel of the git repository

var SENTINEL
var SERIAL : str

Defines what serialize type to use. One of ['json', 'xml']

var SYS_PLAT

pyboiler.Platform enum for the current platform

Methods

def json(self) ‑> dict

Return config attributes as a dictionary

Expand source code
def json(self) -> dict:
    """Return config attributes as a dictionary"""
    fmt = {}

    for k in get_locals(self, ("init", "json")):
        fmt[k] = getattr(self, k)
    return fmt