import argparse import logging import os logger = logging.getLogger("utils") # Common Args def get_common_args(prog: str): # Setup Args parser = argparse.ArgumentParser(prog=prog) # Analysis settings parser.add_argument( "-D", "--data-dir", help="Directory for downloaded data", default=os.environ.get("DATA_DIRECTORY", "data") ) # Debug parser.add_argument( "-d", "--debug", default=False, action="store_true", help="Enable verbose logging", ) return parser # LOGGING class Formatter(logging.Formatter): grey = "\x1b[37m" yellow = "\x1b[33m" red = "\x1b[31m" bold_red = "\x1b[1;31m" reset = "\x1b[0m" format = "%(asctime)s - %(name)-24s - %(levelname)-7s - %(message)s (%(filename)s:%(lineno)d)" FORMATS = { logging.DEBUG: logging.Formatter(grey + format + reset), logging.INFO: logging.Formatter(format), logging.WARNING: logging.Formatter(yellow + format + reset), logging.ERROR: logging.Formatter(red + format + reset), logging.CRITICAL: logging.Formatter(bold_red + format + reset), } def format(self, record): return self.FORMATS.get(record.levelno).format(record) def setup_logging(debug: bool = False): ch = logging.StreamHandler() ch.setFormatter(Formatter()) logging.basicConfig( handlers=[ch], level=logging.DEBUG if debug else logging.INFO, )