def __init__(self, other: typing.Dict[str, typing.Any] = None, **values: typing.Any) -> None: if other is None: other = {} values = dict(other, **values) params_keys = set(self.__params_items__.keys()) # type: ignore values_keys = set(values.keys()) missing = params_keys - values_keys if len(missing): raise exceptions.InvalidArgumentValueError( "Not all parameters are specified: {missing}".format( missing=missing)) extra = values_keys - params_keys if len(extra): raise exceptions.InvalidArgumentValueError( "Additional parameters are specified: {extra}".format( extra=extra)) for name, value in values.items(): value_type = self.__params_items__[name] # type: ignore if not utils.is_instance(value, value_type): raise exceptions.InvalidArgumentTypeError( "Value '{value}' for parameter '{name}' is not an instance of the type: {value_type}" .format(value=value, name=name, value_type=value_type)) super().__init__(values)
def update(self, other: typing.Dict[str, typing.Any] = None, **values: typing.Any) -> None: # type: ignore if other is None: other = {} values = dict(other, **values) params_keys = set(self.__params_items__.keys()) # type: ignore values_keys = set(values.keys()) extra = values_keys - params_keys if len(extra): raise ValueError( "Additional parameters are specified: {extra}".format( extra=extra)) for name, value in values.items(): value_type = self.__params_items__[name] # type: ignore if not utils.is_instance(value, value_type): raise TypeError( "Value '{value}' for parameter '{name}' is not an instance of the type: {value_type}" .format(value=value, name=name, value_type=value_type)) super().update(values)
def __setitem__(self, key, value): # type: ignore if key not in self.__params_items__: raise ValueError( "Additional parameter is specified: {key}".format(key=key)) value_type = self.__params_items__[key] if not utils.is_instance(value, value_type): raise TypeError( "Value '{value}' for parameter '{name}' is not an instance of the type: {value_type}" .format(value=value, name=key, value_type=value_type)) return super().__setitem__(key, value)
def test_isinstance(self): self.assertTrue(utils.is_instance(1, (str, int, float, bool)))
def validate(self) -> None: for name, value in self.items(): value_type = self.__params_items__[name] # type: ignore if not utils.is_instance(value, value_type): raise TypeError("Value '{value}' for parameter '{name}' is not an instance of the type: {value_type}".format(value=value, name=name, value_type=value_type))