20 from .argumentspec
import ArgumentSpec
24 from inspect
import getargspec, ismethod
27 return getargspec(func) + ([],
None, {})
29 from inspect
import getfullargspec, ismethod
31 if PY_VERSION >= (3, 5):
37 from java.lang
import Class
38 from java.util
import List, Map
46 def parse(self, source, name=None):
47 raise NotImplementedError
52 def parse(self, handler, name=None):
53 args, varargs, kwargs, defaults, kwonly, kwonlydefaults, annotations \
55 if ismethod(handler)
or handler.__name__ ==
'__init__':
64 defaults=self.
_get_defaults_get_defaults(args, defaults, kwonlydefaults)
66 spec.types = self.
_get_types_get_types(handler, annotations, spec)
71 defaults =
dict(zip(args[-len(default_values):], default_values))
75 defaults.update(kwonlydefaults)
79 types = getattr(handler,
'robot_types', ())
90 type_hints = typing.get_type_hints(handler)
101 mismatch = set(type_hints) - set(argument_names)
102 for name
in mismatch:
109 if defaults[arg]
is None and arg
in type_hints:
110 type_ = type_hints[arg]
112 types = type_.__args__
113 if len(types) == 2
and types[1]
is type(
None):
114 type_hints[arg] = types[0]
117 if PY_VERSION >= (3, 7)
and hasattr(type_,
'__origin__'):
118 type_ = type_.__origin__
119 return isinstance(type_,
type(typing.Union))
124 def parse(self, signatures, name=None):
127 elif len(signatures) == 1:
138 positional = len(signature.args) -
int(varargs) -
int(kwargs)
139 return self.
_format_arg_spec_format_arg_spec(name, positional, varargs=varargs,
154 return arg
is List
or isinstance(arg, Class)
and arg.isArray()
160 mina = maxa = len(signatures[0].args)
161 for sig
in signatures[1:]:
163 mina = min(argc, mina)
164 maxa = max(argc, maxa)
169 positional = [
'arg%d' % (i+1)
for i
in range(positional)]
171 defaults = {name:
'' for name
in positional[-defaults:]}
175 positional=positional,
176 varargs=
'varargs' if varargs
else None,
177 kwargs=
'kwargs' if kwargs
else None,
179 supports_named=
False)
184 def parse(self, argspec, name=None):
193 if spec.varargs
or kw_only_args:
197 if spec.varargs
or kw_only_args:
203 elif spec.defaults
and not kw_only_args:
207 self.
_add_arg_add_arg(spec, arg, kw_only_args)
211 raise DataError(
'Invalid argument specification: %s' % error)
214 raise NotImplementedError
220 raise NotImplementedError
223 raise NotImplementedError
226 raise NotImplementedError
232 raise NotImplementedError
235 arg, default = arg.split(
'=', 1)
236 arg = self.
_add_arg_add_arg(spec, arg, kw_only_arg)
237 spec.defaults[arg] = default
244 target = spec.positional
if not kw_only_arg
else spec.kwonlyargs
252 return arg.startswith(
'**')
Used when variable does not exist.
def _is_varargs(self, arg)
def _is_kw_only_separator(self, arg)
def _is_kwargs(self, arg)
def _format_varargs(self, varargs)
def _format_kwargs(self, kwargs)
def _is_kwargs_type(self, arg)
def _format_arg_spec(self, name, positional=0, defaults=0, varargs=False, kwargs=False)
def _multi_signature_arg_spec(self, signatures, name)
def parse(self, signatures, name=None)
def _single_signature_arg_spec(self, signature, name)
def _is_varargs_type(self, arg)
def _no_signatures_arg_spec(self, name)
def _get_varargs_and_kwargs_support(self, args)
def _remove_mismatching_type_hints(self, type_hints, argument_names)
def _is_union(self, type_)
def _remove_optional_none_type_hints(self, type_hints, defaults)
def _get_type_hints(self, handler, annotations, spec)
def _get_defaults(self, args, default_values, kwonlydefaults)
def parse(self, handler, name=None)
def _get_types(self, handler, annotations, spec)
def _format_arg(self, arg)
def _is_kwargs(self, arg)
def _format_kwargs(self, kwargs)
def _is_kw_only_separator(self, arg)
def _format_varargs(self, varargs)
def _is_varargs(self, arg)
def parse(self, source, name=None)
def __init__(self, type='Keyword')
def parse(self, argspec, name=None)
def _is_varargs(self, arg)
def _format_varargs(self, varargs)
def _is_kw_only_separator(self, arg)
def _add_kwargs(self, spec, kwargs)
def _add_arg(self, spec, arg, kw_only_arg=False)
def _add_varargs(self, spec, varargs)
def _format_kwargs(self, kwargs)
def _is_kwargs(self, arg)
def _add_arg_with_default(self, spec, arg, kw_only_arg=False)
def _raise_invalid_spec(self, error)
def _format_arg(self, arg)
def is_scalar_var(string)