add Event typing, clean up docstrings, add initial tests
This commit is contained in:
@@ -1 +1,2 @@
|
||||
from execlog.util import path
|
||||
from execlog.util import generic
|
||||
|
||||
64
execlog/util/generic.py
Normal file
64
execlog/util/generic.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import logging
|
||||
|
||||
import tqdm
|
||||
import colorama
|
||||
from colorama import Fore, Back, Style
|
||||
|
||||
|
||||
class ColorFormatter(logging.Formatter):
|
||||
_format = '%(levelname)-8s :: %(name)s %(message)s'
|
||||
colorama.init(autoreset=True)
|
||||
|
||||
FORMATS = {
|
||||
'x': Fore.YELLOW + _format,
|
||||
'listener': Fore.GREEN + _format,
|
||||
'handler': Fore.CYAN + _format,
|
||||
'server': Style.DIM + Fore.CYAN + _format,
|
||||
'router': Fore.MAGENTA + _format,
|
||||
'site': Fore.BLUE + _format,
|
||||
'utils': Style.DIM + Fore.WHITE + _format,
|
||||
}
|
||||
FORMATS = { k:logging.Formatter(v) for k,v in FORMATS.items() }
|
||||
DEFAULT_LOGGER = logging.Formatter(_format)
|
||||
|
||||
def format(self, record):
|
||||
# color by high-level submodule
|
||||
name_parts = record.name.split('.')
|
||||
package = ''.join(name_parts[:1])
|
||||
submodule = ''.join(name_parts[1:2])
|
||||
subsubmodule = '.'.join(name_parts[1:3])
|
||||
|
||||
formatter = self.DEFAULT_LOGGER
|
||||
if subsubmodule in self.FORMATS:
|
||||
formatter = self.FORMATS[subsubmodule]
|
||||
elif submodule in self.FORMATS:
|
||||
formatter = self.FORMATS[submodule]
|
||||
|
||||
name = record.name
|
||||
if package == 'localsys':
|
||||
name = f'localsys.{subsubmodule}'
|
||||
|
||||
limit = 26
|
||||
name = name[:limit]
|
||||
name = f'[{name}]{"-"*(limit-len(name))}'
|
||||
record.name = name
|
||||
|
||||
return formatter.format(record)
|
||||
|
||||
class TqdmLoggingHandler(logging.StreamHandler):
|
||||
def __init__(self, level=logging.NOTSET):
|
||||
super().__init__(level)
|
||||
formatter = ColorFormatter()
|
||||
self.setFormatter(formatter)
|
||||
|
||||
def emit(self, record):
|
||||
try:
|
||||
msg = self.format(record)
|
||||
#tqdm.tqdm.write(msg)
|
||||
tqdm.tqdm.write(msg, end=self.terminator)
|
||||
self.flush()
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
raise
|
||||
except:
|
||||
self.handleError(record)
|
||||
|
||||
@@ -6,6 +6,10 @@ from pathlib import Path
|
||||
from wcmatch import glob as wc_glob
|
||||
|
||||
|
||||
# hardcoded file names to ignore
|
||||
# - "4913" is a temp file created by Vim before editing
|
||||
IGNORE_PATTERNS = ['4913', '.sync*.db*']
|
||||
|
||||
camel2snake_regex = re.compile(r'(?<!^)(?=[A-Z])')
|
||||
|
||||
def iter_nested_paths(path: Path, ext: str = None, no_dir=False, relative=False):
|
||||
|
||||
Reference in New Issue
Block a user