| 234 | return inspect.getcallargs(func, *self.args, **self.kwargs) |
| 235 | |
| 236 | def set_arg(self, name, val): |
| 237 | func = self._get_func() |
| 238 | if name in self.kwargs: |
| 239 | new_kwargs = self.kwargs |
| 240 | new_kwargs[name] = val |
| 241 | self.set_args_kwargs(*self.args, **new_kwargs) |
| 242 | else: |
| 243 | arg_spec = inspect.getfullargspec(func) |
| 244 | if name in arg_spec.args: |
| 245 | ind = arg_spec.args.index(name) |
| 246 | new_args = list(self.args) |
| 247 | new_args[ind] = val |
| 248 | self.set_args_kwargs(*new_args) |
| 249 | elif name == arg_spec.varargs: |
| 250 | assert arg_spec.varargs is not None |
| 251 | assert len(self.args) >= len(arg_spec.args) |
| 252 | val = (val,) if not isinstance(val, Sequence) else val |
| 253 | self.set_args_kwargs(*self.args[0 : len(arg_spec.args)], *val) |
| 254 | else: |
| 255 | assert ( |
| 256 | arg_spec.varkw is not None |
| 257 | ), "func {} does't have argument named {}".format(func, name) |
| 258 | new_kwargs = self.kwargs |
| 259 | new_kwargs[name] = val |
| 260 | self.set_args_kwargs(*self.args, **new_kwargs) |
| 261 | |
| 262 | @property |
| 263 | def return_val(self): |