Exemple #1
0
    def _validates_vars(self) -> None:
        # validate given var are okay
        name = self._internal_ctx.node.var_name
        if name not in self._vars:
            default_values = self._internal_ctx.node.default_value
            if not default_values and not self._internal_ctx.node.is_nullable:
                self._add_exception(UnknownVariableException(name))
                return None

            self._vars[name] = default_values
            return None

        a_type = self._internal_ctx.node.var_type
        a_value = self._vars[name]

        if self._internal_ctx.node.is_list:
            if not isinstance(a_value, list):
                self._add_exception(
                    InvalidType(
                        "Expecting List for < %s > values" % name,
                        path=self._internal_ctx.field_path[:],
                        locations=[self._internal_ctx.node.location],
                    ))
                return None

            for val in a_value:
                self._validate_type(name, val, a_type)
            return None

        self._validate_type(name, a_value, a_type)
        return None
Exemple #2
0
    def _validates_vars(self) -> None:
        # validate given var are okay
        name = self._internal_ctx.node.var_name
        if name not in self._vars:
            default_values = self._internal_ctx.node.default_value
            if (
                default_values is None or default_values is UNDEFINED_VALUE
            ) and not self._internal_ctx.node.is_nullable:
                self._add_exception(UnknownVariableException(name))
                return

            self._vars[name] = default_values
            return

        a_type = self._internal_ctx.node.var_type
        is_nullable = self._internal_ctx.node.is_nullable
        a_value = self._vars[name]

        if self._internal_ctx.node.is_list:
            if not isinstance(a_value, list) and a_value is not None:
                a_value = [a_value]

            if a_value is not None:
                for val in a_value:
                    self._validate_type(
                        name,
                        val,
                        a_type,
                        self._internal_ctx.node.is_list_item_nullable,
                    )
                return

        self._validate_type(name, a_value, a_type, is_nullable)
        return
Exemple #3
0
    def _validates_vars(self):
        # validate given var are okay
        name = self._current_node.var_name
        if name not in self._vars:
            dfv = self._current_node.default_value
            if not dfv and not self._current_node.is_nullable:
                self.continue_child = 0
                self.exception = UnknownVariableException(name)
                return None

            self._vars[name] = dfv
            return None

        a_type = self._current_node.var_type
        a_value = self._vars[name]

        if self._current_node.is_list:
            if not isinstance(a_value, list):
                self.continue_child = 0
                self.exception = TypeError("Expecting List for < %s > values" %
                                           name)
                return None

            for val in a_value:
                self._validate_type(name, val, a_type)
            return None

        self._validate_type(name, a_value, a_type)
        return None
Exemple #4
0
    def _on_variable_in(self, element: _VisitorElement):
        if hasattr(self._current_node, 'var_name'):
            self._current_node.var_name = element.name
            return

        try:
            var_name = element.name
            self._current_node.arguments.update(
                {self._current_argument_name: self._vars[var_name]})
        except KeyError:
            self.continue_child = 0
            self.exception = UnknownVariableException(var_name)
Exemple #5
0
    def _on_variable_in(self, element: _VisitorElement, *_args,
                        **_kwargs) -> None:
        if hasattr(self._internal_ctx.node, "var_name"):
            self._internal_ctx.node.var_name = element.name
            return

        var_name = element.name
        try:
            if self._internal_ctx.current_object_value is not None:
                self._internal_ctx.current_object_value.set_value(
                    self._vars[var_name])
                return

            self._internal_ctx.argument.value = self._vars[var_name]
            self._add_argument_to_parent()

        except KeyError:
            self._add_exception(UnknownVariableException(var_name))