Source code for datazen.classes.valid_dict
"""
datazen - A dict wrapper that enables simpler schema validation.
"""
# built-in
from collections import UserDict
import logging
# third-party
from vcorelib.dict import GenericStrDict
from vcorelib.schemas.base import Schema, SchemaValidationError
LOG = logging.getLogger(__name__)
[docs]
class ValidDict(UserDict): # type: ignore
"""
An object that behaves like a dictionary but can have a provided schema
enforced.
"""
def __init__(
self,
name: str,
data: GenericStrDict,
schema: Schema,
logger: logging.Logger = LOG,
) -> None:
"""Initialize a named, ValidDict."""
super().__init__(data)
self.name = name
self.logger = logger
self.valid = False
try:
self.data = schema(self.data)
self.valid = True
except SchemaValidationError as exc:
self.logger.error(
"validation error(s) for '%s': %s", self.name, exc
)
self.logger.error("data: %s", self.data)