medved/lib/util.py
Good Evening d782c2eb70 pew pew
2018-04-03 01:41:10 +03:00

108 lines
2.8 KiB
Python

import logging
from Config import cnf as config
import importlib
import sys, os
class Logger(logging.Logger):
def __init__(self, name):
self._lf_start = '[%(asctime)s][%(levelname)-7s][%(name)-10s]'
self._lf_end = ' %(message)s'
self._lf_extra = {}
super().__init__(name, level=self.get_level(name))
self._update()
def get_level(self, name):
return logging.DEBUG
def add_field(self, name, default, size=3):
if not name in self._lf_extra:
self._lf_extra[name] = {
'default': default,
'size': size
}
self._update()
def error(self, msg, *args, **kwargs):
if self.isEnabledFor(logging.ERROR):
kwargs['extra'] = {}
for f, fv in self._lf_extra.items():
kwargs['extra'][f] = fv['default']
self._log(logging.ERROR, msg, args, **dict(kwargs))
def warn(self, msg, *args, **kwargs):
if self.isEnabledFor(logging.WARN):
kwargs['extra'] = {}
for f, fv in self._lf_extra.items():
kwargs['extra'][f] = fv['default']
self._log(logging.WARN, msg, args, **dict(kwargs))
def info(self, msg, *args, **kwargs):
if self.isEnabledFor(logging.INFO):
kwargs['extra'] = {}
for f, fv in self._lf_extra.items():
kwargs['extra'][f] = fv['default']
self._log(logging.INFO, msg, args, **dict(kwargs))
def debug(self, msg, *args, **kwargs):
if self.isEnabledFor(logging.DEBUG):
kwargs['extra'] = {}
for f, fv in self._lf_extra.items():
kwargs['extra'][f] = fv['default']
self._log(logging.DEBUG, msg, args, **dict(kwargs))
def del_field(self, name):
if name in self._lf_extra.keys():
del self._lf_extra[name]
self._update()
def _update(self):
self.handlers = []
fields = "".join(['[%(' + name + ')-' + str(f['size']) + 's]' for name, f in self._lf_extra.items()])
lf = logging.Formatter(self._lf_start + fields + self._lf_end)
ch = logging.StreamHandler()
ch.setLevel(self.level)
ch.setFormatter(lf)
self.addHandler(ch)
class Loadable:
def __init__(self, id, root=config):
self.cnf = config
self.lcnf = root[id]
self._id = id
class Loader:
def __init__(self, path):
self._path = path
self._name = path.split('.')[-1]
self._dir = ".".join(path.split('.')[:-1]) # shiiiet
self._logger = Logger('Loader')
self._logger.add_field('path', self._path)
def get(self, name):
sys.path.append( os.path.join( os.path.dirname( __file__ ), '..' ))
self._logger.debug('load %s', name)
result = importlib.import_module(self._path)
return getattr(result, name)
@classmethod
def by_id(cls, section, id):
l = cls(config[section][id].package)
return l.get(config[section][id].service)(id=id, root=config[section])
"""
section:
package: lib.package
service: Service
id:
qwer: asdf
tyui: ghjk
"""