Spaces:
Build error
Build error
| import sys | |
| import inspect | |
| import types | |
| def has_arg(fn, arg_name): | |
| """Checks if a callable accepts a given keyword argument. | |
| Args: | |
| fn: callable to inspect | |
| arg_name: string, keyword argument name to check | |
| Returns: | |
| bool, whether `fn` accepts a `arg_name` keyword argument. | |
| """ | |
| if sys.version_info < (3,): | |
| if isinstance(fn, types.FunctionType) or isinstance(fn, types.MethodType): | |
| arg_spec = inspect.getargspec(fn) | |
| else: | |
| try: | |
| arg_spec = inspect.getargspec(fn.__call__) | |
| except AttributeError: | |
| return False | |
| return (arg_name in arg_spec.args) | |
| elif sys.version_info < (3, 6): | |
| arg_spec = inspect.getfullargspec(fn) | |
| return (arg_name in arg_spec.args or | |
| arg_name in arg_spec.kwonlyargs) | |
| else: | |
| try: | |
| signature = inspect.signature(fn) | |
| except ValueError: | |
| # handling Cython | |
| signature = inspect.signature(fn.__call__) | |
| parameter = signature.parameters.get(arg_name) | |
| if parameter is None: | |
| return False | |
| return (parameter.kind in (inspect.Parameter.POSITIONAL_OR_KEYWORD, | |
| inspect.Parameter.KEYWORD_ONLY)) | |