Source code for pyscal

"""pyscal"""

import logging
import sys
from typing import Dict, Optional, Union

try:
    from .version import version

    __version__ = version
except ImportError:
    __version__ = "0.0.0"


[docs] def getLogger_pyscal( module_name: str = "pyscal", args_dict: Optional[Dict[str, Union[str, bool]]] = None ) -> logging.Logger: # pylint: disable=invalid-name """Provide a custom logger for pyscal Logging output is by default split by logging levels (split between WARNING and ERROR) to stdout and stderr, each log occurs in only one of the streams. Args: module_name: A suggested name for the logger, usually __name__ should be supplied args_dict: Dictionary with contents from the argparse namespace object containing only keys "output", "verbose" and "debug". """ logger = logging.getLogger(module_name) if len(logger.handlers) != 0: return logger if args_dict is None: args_dict = {} formatter = logging.Formatter("%(levelname)s:%(name)s:%(message)s") if args_dict.get("output", None) == "-": # If main output is to stdout, we must send all logs to stderr: default_handler = logging.StreamHandler(sys.stderr) default_handler.setFormatter(formatter) logger.addHandler(default_handler) else: # Split log messages to either stdout or stderr based on log level: stdout_handler = logging.StreamHandler(sys.stdout) stdout_handler.addFilter(lambda record: record.levelno < logging.ERROR) stdout_handler.setFormatter(formatter) stderr_handler = logging.StreamHandler(sys.stderr) stderr_handler.addFilter(lambda record: record.levelno >= logging.ERROR) stderr_handler.setFormatter(formatter) logger.addHandler(stdout_handler) logger.addHandler(stderr_handler) # --debug overrides --verbose if args_dict.get("debug", False): logger.setLevel(logging.DEBUG) elif args_dict.get("verbose", False): logger.setLevel(logging.INFO) else: logger.setLevel(logging.WARNING) if module_name == "pyscal.pyscalcli": all_modules = [ "factory", "gasoil", "gaswater", "pyscallist", "scalrecommendation", "wateroil", "wateroilgas", ] for module in all_modules: module_logger = logging.getLogger("pyscal." + module) module_logger.handlers = [] for handler in logger.handlers: module_logger.addHandler(handler) module_logger.setLevel(logger.level) return logger
# The order of imports must be conserved to avoid circular imports: from .wateroil import WaterOil # noqa from .wateroilgas import WaterOilGas # noqa from .gasoil import GasOil # noqa from .gaswater import GasWater # noqa from .scalrecommendation import SCALrecommendation # noqa from .pyscallist import PyscalList # noqa from .factory import PyscalFactory # noqa