Source code for pyreduce
from importlib.metadata import PackageNotFoundError, version
try:
__version__ = version("pyreduce-astro")
except PackageNotFoundError:
__version__ = "unknown"
# add logger to console
import logging
import tqdm
# We need to use this to have logging messages handle properly with the progressbar
[docs]
class TqdmLoggingHandler(logging.Handler):
def __init__(self, level=logging.NOTSET):
super().__init__(level)
[docs]
def emit(self, record):
try:
msg = self.format(record)
tqdm.tqdm.write(msg)
self.flush()
except (KeyboardInterrupt, SystemExit):
raise
except:
self.handleError(record)
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
logging.captureWarnings(True)
console = TqdmLoggingHandler()
console.setLevel(logging.INFO)
try:
import colorlog
console.setFormatter(
colorlog.ColoredFormatter("%(log_color)s%(levelname)s - %(message)s")
)
del colorlog
except ImportError:
console.setFormatter("%(levelname)s - %(message)s")
logger.addHandler(console)
del logging
# do not del tqdm, it is needed in the Log Handler
# Lazy loading for faster imports
def __getattr__(name):
"""Lazy load submodules on first access."""
if name in ("configuration", "datasets", "reduce", "util"):
import importlib
module = importlib.import_module(f".{name}", __name__)
globals()[name] = module
return module
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")