# -*- coding: utf-8 -*-
"""Petri: 12-factor boilerplate in your python code."""
from pathlib import Path
from typing import Optional
from petri.dot_env import init_dotenv
from petri.loggin import configure_logging
from petri.metadata import Metadata
from petri.settings import BaseSettings
__version__ = "0.24.1"
[docs]class Petri: # pylint: disable=R0903
"""Init & instantiate other modules & classes."""
def __init__(
self,
init_dot_py: str,
*,
default_config: Optional[str] = None,
kidnap_loggers=False,
):
self.__init_dot_py = init_dot_py
self.__package = str(Path(init_dot_py).parent.stem)
self.__default_config = default_config
self.__kidnap_loggers = kidnap_loggers
self.env_file: Optional[str] = init_dotenv()
self.meta = Metadata(self.__package)
self.settings = BaseSettings.from_envvar(
self.__package,
init_dot_py=self.__init_dot_py,
default_config=self.__default_config,
)
self.log = configure_logging(
self.__package,
self.settings.LOG_LEVEL,
self.settings.LOG_DEST,
self.settings.LOG_FORMAT,
self.settings.LOG_STORAGE,
self.__kidnap_loggers,
)
self.log.debug(
"Package Initialization",
package=self.__package,
log_level=self.settings.LOG_LEVEL.value,
log_dest=self.settings.LOG_DEST.value,
log_fmt=self.settings.LOG_FORMAT.value,
log_storage=str(self.settings.LOG_STORAGE),
)
pkg = Petri(__file__, default_config="petri.settings:_PetriSettings")