"""Logger used for printing Sequence log messages."""from__future__importannotationsimportcontextlibimportloggingimportsysfromcollections.abcimportGeneratorfromtypingimportAnyimportclicklogger=logging.getLogger("sequence")LOG_LEVEL_STYLES:dict[str,dict[str,Any]]={"DEBUG":{"bold":True,"dim":True},"INFO":{"bold":True,"dim":True,"fg":"green"},"WARNING":{"bold":True,"fg":"bright_yellow"},"ERROR":{"bold":True,"fg":"bright_red"},"CRITICAL":{"bold":True,"fg":"bright_red"},}MULTILINE_STYLES:dict[str,Any]={"dim":True,"italic":True}
[docs]defemit(self,record:logging.LogRecord)->None:"""Print a log message. Parameters ---------- record : LogRecord The log to print. """level_msg=click.style(f"[{record.levelname}]",**LOG_LEVEL_STYLES[record.levelname])lines=record.getMessage().splitlines()iflen(lines)==0:lines=[""]print(f"{level_msg}{lines[0]}",file=sys.stderr)iflen(lines)>1:forlineinlines[1:]:print(click.style(f"+ {line}",**MULTILINE_STYLES),file=sys.stderr)
[docs]@contextlib.contextmanagerdeflogging_handler()->Generator[None]:"""Change, temporarily, the current logger."""handler=LoggingHandler()logger.addHandler(handler)logger.setLevel(logging.INFO)try:yieldfinally:logger.removeHandler(handler)