1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-23 19:44:20 +00:00

Raise configuration errors for missing dict keys

This commit is contained in:
Steffo 2020-04-30 19:13:09 +02:00
parent 53aa6c16b1
commit c128935d61
3 changed files with 24 additions and 1 deletions

View file

@ -8,6 +8,7 @@ from .event import Event
from .errors import \ from .errors import \
CommandError, InvalidInputError, UnsupportedError, ConfigurationError, ExternalError, UserError, ProgramError CommandError, InvalidInputError, UnsupportedError, ConfigurationError, ExternalError, UserError, ProgramError
from .keyboardkey import KeyboardKey from .keyboardkey import KeyboardKey
from .configdict import ConfigDict
__all__ = [ __all__ = [
"CommandInterface", "CommandInterface",
@ -23,4 +24,5 @@ __all__ = [
"ProgramError", "ProgramError",
"Event", "Event",
"KeyboardKey", "KeyboardKey",
"ConfigDict",
] ]

View file

@ -1,6 +1,7 @@
from typing import * from typing import *
import asyncio as aio import asyncio as aio
from .errors import UnsupportedError from .errors import UnsupportedError
from .configdict import ConfigDict
if TYPE_CHECKING: if TYPE_CHECKING:
from .event import Event from .event import Event
@ -36,7 +37,7 @@ class CommandInterface:
A reference to a :class:`~royalnet.constellation.Constellation`.""" A reference to a :class:`~royalnet.constellation.Constellation`."""
def __init__(self, config: Dict[str, Any]): def __init__(self, config: Dict[str, Any]):
self.config: Dict[str, Any] = config self.config: ConfigDict[str, Any] = ConfigDict.convert(config)
"""The config section for the pack of the command.""" """The config section for the pack of the command."""
# Will be bound after the command/event has been created # Will be bound after the command/event has been created

View file

@ -0,0 +1,20 @@
from .errors import ConfigurationError
class ConfigDict(dict):
def __missing__(self, key):
raise ConfigurationError(f"Missing config key '{key}'")
@classmethod
def convert(cls, item):
if isinstance(item, dict):
cd = ConfigDict()
for key in item:
cd[key] = cls.convert(item[key])
return cd
elif isinstance(item, list):
nl = []
for obj in item:
nl.append(cls.convert(obj))
else:
return item