in src/sagemaker/remote_function/client.py [0:0]
def _validate_submit_args(func, *args, **kwargs):
"""Validates input args passed to submit method."""
full_arg_spec = inspect.getfullargspec(func)
# args related validations
is_accepting_variable_positional_args = full_arg_spec.varargs is not None
num_default_positional_args = len(full_arg_spec.defaults) if full_arg_spec.defaults else 0
minimum_num_expected_positional_args = len(full_arg_spec.args) - num_default_positional_args
if not is_accepting_variable_positional_args and len(args) > len(full_arg_spec.args):
raise TypeError(
f"{func.__name__}() takes {len(full_arg_spec.args)} positional "
+ f"{'arguments' if len(full_arg_spec.args) > 1 else 'argument'} but {len(args)} "
+ f"{'were' if len(args) > 1 else 'was'} given."
)
if len(args) < minimum_num_expected_positional_args:
missing_positional_args = full_arg_spec.args[
len(args) : minimum_num_expected_positional_args
]
missing_args = list(filter(lambda arg: arg not in kwargs, missing_positional_args))
if missing_args:
missing_args_str = (
", ".join(map(lambda x: f"'{x}'", missing_args[:-1]))
+ f", and '{missing_args[-1]}'"
if len(missing_args) > 1
else f"'{missing_args[0]}'"
)
raise TypeError(
f"{func.__name__}() missing {len(missing_args)} required positional "
+ f"{'arguments' if len(missing_args) > 1 else 'argument'}: {missing_args_str}"
)
# kwargs related validations
for k in kwargs:
if k in full_arg_spec.args and len(args) > full_arg_spec.args.index(k):
raise TypeError(f"{func.__name__}() got multiple values for argument '{k}'")
if k not in full_arg_spec.kwonlyargs and k not in full_arg_spec.args:
raise TypeError(f"{func.__name__}() got an unexpected keyword argument '{k}'")
missing_kwargs = [
k
for k in full_arg_spec.kwonlyargs
if k not in full_arg_spec.kwonlydefaults and k not in kwargs
]
if missing_kwargs:
missing_kwargs_string = (
", ".join(map(lambda x: f"'{x}'", missing_kwargs[:-1]))
+ f", and '{missing_kwargs[-1]}'"
if len(missing_kwargs) > 1
else f"'{missing_kwargs[0]}'"
)
raise TypeError(
f"{func.__name__}() missing {len(missing_kwargs)} required keyword-only "
+ f"{'arguments' if len(missing_kwargs) > 1 else 'argument'}: "
+ f"{missing_kwargs_string}"
)