Skip to content

Commit

Permalink
main package: update default() function to create Config with default…
Browse files Browse the repository at this point in the history
… configuration

log: fix type name, make inability to find log level names an module level ImportError
version: fix type name
  • Loading branch information
glorpen committed Apr 28, 2022
1 parent 1af1d18 commit f1a9f57
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 32 deletions.
41 changes: 33 additions & 8 deletions src/glorpen/config/__init__.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,39 @@
import dataclasses
import contextlib

from glorpen.config.config import Config
from glorpen.config.fields.simple import UnionType, SimpleTypes, SequenceTypes
from glorpen.config.validation import Validator


def default():
c = Config()
c.register(UnionType)
c.register(SimpleTypes)
c.register(SequenceTypes)
@contextlib.contextmanager
def _try_import():
try:
yield
except ImportError:
return

return c

def default(validator: Validator = None):
c = Config(validator or Validator())

from glorpen.config.fields.simple import UnionType, SimpleTypes, CollectionTypes, BooleanType, PathType, LiteralType

c.register_type(UnionType)
c.register_type(SimpleTypes)
c.register_type(CollectionTypes)
c.register_type(BooleanType)
c.register_type(PathType)
c.register_type(LiteralType)

with _try_import():
from glorpen.config.fields.version import VersionType
c.register_type(VersionType)

with _try_import():
from glorpen.config.fields.version import VersionType
c.register_type(VersionType)

with _try_import():
from glorpen.config.fields.log import LogLevelType
c.register_type(LogLevelType)

return c
37 changes: 16 additions & 21 deletions src/glorpen/config/fields/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,29 @@
from glorpen.config.config import ConfigType


class LogLevel(ConfigType):
"""Converts log level name to internal number for use with :mod:`logging`"""
def _find_levels():
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
if hasattr(logging, "_nameToLevel"):
return logging._nameToLevel

_levels = None
raise ImportError("Could not find logging level names")

@classmethod
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
if hasattr(logging, "_nameToLevel"):
return logging._nameToLevel

raise RuntimeError("Could not find logging level names")
_levels = _find_levels()

@classmethod
def _get_levels(cls):
if cls._levels is None:
cls._levels = cls._find_levels()

return cls._levels
class LogLevelType(ConfigType):
"""Converts log level name to internal number for use with :mod:`logging`"""

_levels = None

def to_model(self, data: typing.Any, tp, args: typing.Tuple, metadata: dict):
levels = self._get_levels()
value = str(data).upper()

if value in levels.keys():
return levels[value]
if value in _levels.keys():
return _levels[value]
else:
raise ValueError(f"Not one of %r" % levels.keys())
raise ValueError(f"Not one of %r" % _levels.keys())
2 changes: 1 addition & 1 deletion src/glorpen/config/fields/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from glorpen.config.fields.utils import is_class_a_subclass


class Version(ConfigType):
class VersionType(ConfigType):
"""Converts values to :class:`semver.VersionInfo`"""

def to_model(self, data: typing.Any, tp, args: typing.Tuple, metadata: dict):
Expand Down
4 changes: 2 additions & 2 deletions tests/fields/test_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@

import pytest

from glorpen.config import Config, SimpleTypes
from glorpen.config.fields.simple import BooleanType, LiteralType, PathType, CollectionTypes
from glorpen.config import Config
from glorpen.config.fields.simple import BooleanType, LiteralType, PathType, CollectionTypes, SimpleTypes
from glorpen.config.validation import Validator


Expand Down
5 changes: 5 additions & 0 deletions tests/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ def create_config(types=None):
return Config(validator=Validator(), types=types)


def test_default_import():
from glorpen.config import default
assert isinstance(default(), Config)


class TestConfig:
def test_not_supported_value_path(self):
c = create_config()
Expand Down

0 comments on commit f1a9f57

Please sign in to comment.