Source code for glorpen.config.fields.log
# -*- coding: utf-8 -*-
'''
.. moduleauthor:: Arkadiusz Dzięgiel <arkadiusz.dziegiel@glorpen.pl>
'''
import logging
from glorpen.config.exceptions import ValidationError, ConfigException
from glorpen.config.fields.base import FieldWithDefault
[docs]class LogLevel(FieldWithDefault):
"""Converts log level name to internal number for use with :mod:`logging`"""
_levels = None
def _find_levels(self):
if hasattr(logging, "_levelNames"):
return dict((n,v) for n,v in logging._levelNames.items() if isinstance(v, int))
if hasattr(logging, "_nameToLevel"):
return logging._nameToLevel
raise ConfigException("Could not find logging level names")
def _get_levels(self):
if self._levels is None:
self._levels = self._find_levels()
return self._levels
def make_resolvable(self, r):
r.on_resolve(self.to_level)
def to_level(self, value, config):
levels = self._get_levels()
value = str(value).upper()
if value in levels.keys():
return levels[value]
else:
raise ValidationError("%r not in %r" % (value, levels.keys()))
def is_value_supported(self, value):
return isinstance(value, (str,)) or super(LogLevel, self).is_value_supported(value)