Pastebin

Paste #2000: No description

< previous paste - next paste>

Pasted by chrivers

Download View as text

        PRINT_ARG_SPLITTING = False

        error = spye.MetacallException(self.func_name)
        out = spye.drv_output

        names_args = self.names_posargs + self.names_optargs
        names_validated = []

        posargs, optargs, varargs = args[:self.min_args], args[self.min_args:self.max_args], args[self.max_args:]

        if PRINT_ARG_SPLITTING:
            out.print_minute("Args splitting: min = %s, max = %s, %s -> posargs = %s, optargs = %s, varargs = %s, kwargs = [%s]",
                             self.min_args, self.max_args, list(args), list(posargs), list(optargs), list(varargs),
                             ", ".join(("%s -> %s" % (key, kwargs[key]) for key in kwargs)))

        validated_args = []

        out.print_minute("Checking %d positional arguments: [%s]", len(posargs), posargs)
        for i in range(len(posargs)):
            name = self.names_posargs[i]
            if name in kwargs:
                error.add("Positional argument also given as keyword argument: [%s]", name)
                raise error
            else:
                if name in self.arguments:
                    validated_args.append(arguments[name].validate(posargs[i]))
                else:
                    validated_args.append(posargs[i])
                names_validated.append(name)

        out.print_minute("Checking %d optional arguments: [%s]", len(optargs), optargs)
        for i in range(len(optargs)):
            name = self.names_optargs[i]
            if name in kwargs:
                error.add("Optional argument also given as keyword argument: [%s]", name)
                raise error
            else:
                if name in self.arguments:
                    validated_args.append(arguments[name].validate(optargs[i]))
                else:
                    validated_args.append(optargs[i])
                names_validated.append(name)

        num_args = len(posargs) + len(optargs)
        out.print_minute("Checking %d remaining arguments: [%s]",
                         self.max_args - num_args, ", ".join(names_args[num_args:self.max_args]))
        defaults_used = 0

        for i in range(num_args, self.max_args):
            name = names_args[i]
            if name in kwargs:
                if name in self.arguments:
                    validated_args.append(arguments[name].validate(kwargs[name]))
                else:
                    validated_args.append(kwargs[name])
                del kwargs[name]
                names_validated.append(name)
            else:
                if i - self.min_args >= 0:
                    defaults_used += 1
                    validated_args.append(self.defaults[i - self.min_args])

        if self.has_varargs and "*" in self.arguments:
            validated_varargs = self.arguments["*"].validate(varargs)
        else:
            validated_varargs = list(varargs)

        user_args = len(validated_args) - defaults_used
        if (user_args < self.min_args) or ((user_args > self.max_args) and not self.has_varargs):
            msg = "%d parameter%s given" % (user_args, ["s", ""][user_args == 1])
            if names_validated:
                msg += " (%s)" % ", ".join(names_validated)
            if self.has_varargs:
                msg += ", at least %d expected" % self.min_args
            else:
                if self.min_args <> self.max_args:
                    msg += ", between %d and %d expected" % (self.min_args, self.max_args)
                else:
                    msg += ", %d expected" % (self.max_args)

            msg += " (%s)" % self.str_params()

            error.add("%s", msg)
            raise error

        if not self.has_varargs and varargs:
            error.add("Variable arguments not accepted but [%s] given", ", ".join(map(repr, varargs)))

        if not self.has_kwargs and kwargs:
            error.add("Keyword arguments not accepted but [%s] given", ", ".join(kwargs.keys()))

        for i, arg in enumerate(validated_args):
            if hasattr(arg, 'valid') and not arg.valid:
                error.add("Argument %d (\"%s\") is not valid: %s", i+1, arg_names[i+1], arg.error)

        for i, arg in enumerate(validated_varargs):
            if hasattr(arg, 'valid') and not arg.valid:
                error.add("Optional argument %d of %d in \"%s\" is not valid: %s", i+1, len(validated_varargs), "*" + self.names_optargs[self.max_args - len(self.names_posargs)], arg.error)

        if error:
            return validated_args + validated_varargs, kwargs
        else:
            raise error

New Paste


Do not write anything in this field if you're a human.

Go to most recent paste.