Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
 def test_isinstance(self):
     self.assertTrue(utils.is_instance(1, (str, int, float, bool)))
Esempio n. 5
0
 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))