def getfuncargnames(function, *, name: str='', is_method=False, cls=None):
    "Returns the names of a function's mandatory arguments.\n\n    This should return the names of all function arguments that:\n        * Aren't bound to an instance or type as in instance or class methods.\n        * Don't have default values.\n        * Aren't bound with functools.partial.\n        * Aren't replaced with mocks.\n\n    The is_method and cls arguments indicate that the function should\n    be treated as a bound method even though it's not unless, only in\n    the case of cls, the function is a static method.\n\n    The name parameter should be the original name in which the function was collected.\n\n    @RonnyPfannschmidt: This function should be refactored when we\n    revisit fixtures. The fixture mechanism should ask the node for\n    the fixture names, and not try to obtain directly from the\n    function object well after collection has occurred.\n    "
    try:
        parameters = signature(function).parameters
    except (ValueError, TypeError) as e:
        fail('Could not determine arguments of {!r}: {}'.format(function, e), pytrace=False)
    arg_names = tuple((p.name for p in parameters.values() if (((p.kind is Parameter.POSITIONAL_OR_KEYWORD) or (p.kind is Parameter.KEYWORD_ONLY)) and (p.default is Parameter.empty))))
    if (not name):
        name = function.__name__
    if (is_method or (cls and (not isinstance(cls.__dict__.get(name, None), staticmethod)))):
        arg_names = arg_names[1:]
    if hasattr(function, '__wrapped__'):
        arg_names = arg_names[num_mock_patch_args(function):]
    return arg_names
Returns the names of a function's mandatory arguments.

This should return the names of all function arguments that:
    * Aren't bound to an instance or type as in instance or class methods.
    * Don't have default values.
    * Aren't bound with functools.partial.
    * Aren't replaced with mocks.

The is_method and cls arguments indicate that the function should
be treated as a bound method even though it's not unless, only in
the case of cls, the function is a static method.

The name parameter should be the original name in which the function was collected.

@RonnyPfannschmidt: This function should be refactored when we
revisit fixtures. The fixture mechanism should ask the node for
the fixture names, and not try to obtain directly from the
function object well after collection has occurred.
def getfuncargnames(function, *, name: str=, is_method=False, cls=None):
    "Returns the names of a function's mandatory arguments.\n\n    This should return the names of all function arguments that:\n        * Aren't bound to an instance or type as in instance or class methods.\n        * Don't have default values.\n        * Aren't bound with functools.partial.\n        * Aren't replaced with mocks.\n\n    The is_method and cls arguments indicate that the function should\n    be treated as a bound method even though it's not unless, only in\n    the case of cls, the function is a static method.\n\n    The name parameter should be the original name in which the function was collected.\n\n    @RonnyPfannschmidt: This function should be refactored when we\n    revisit fixtures. The fixture mechanism should ask the node for\n    the fixture names, and not try to obtain directly from the\n    function object well after collection has occurred.\n    "
    try:
        parameters = signature(function).parameters
    except (ValueError, TypeError) as e:
        fail('Could not determine arguments of {!r}: {}'.format(function, e), pytrace=False)
    arg_names = tuple((p.name for p in parameters.values() if (((p.kind is Parameter.POSITIONAL_OR_KEYWORD) or (p.kind is Parameter.KEYWORD_ONLY)) and (p.default is Parameter.empty))))
    if (not name):
        name = function.__name__
    if (is_method or (cls and (not isinstance(cls.__dict__.get(name, None), staticmethod)))):
        arg_names = arg_names[1:]
    if hasattr(function, '__wrapped__'):
        arg_names = arg_names[num_mock_patch_args(function):]
    return arg_names