Exemple #1
0
def signature_from_str(signature: str) -> inspect.Signature:
    """Create a Signature object from string."""
    code = 'def func' + signature + ': pass'
    module = ast.parse(code)
    function = cast(ast.FunctionDef, module.body[0])  # type: ignore

    return signature_from_ast(function, code)
Exemple #2
0
def signature_from_str(signature: str) -> inspect.Signature:
    """Create a Signature object from string."""
    module = ast.parse('def func' + signature + ': pass')
    definition = cast(ast.FunctionDef, module.body[0])  # type: ignore

    # parameters
    args = definition.args
    defaults = list(args.defaults)
    params = []
    if hasattr(args, "posonlyargs"):
        posonlyargs = len(args.posonlyargs)  # type: ignore
        positionals = posonlyargs + len(args.args)
    else:
        posonlyargs = 0
        positionals = len(args.args)

    for _ in range(len(defaults), positionals):
        defaults.insert(0, Parameter.empty)

    if hasattr(args, "posonlyargs"):
        for i, arg in enumerate(args.posonlyargs):  # type: ignore
            if defaults[i] is Parameter.empty:
                default = Parameter.empty
            else:
                default = ast_unparse(defaults[i])

            annotation = ast_unparse(arg.annotation) or Parameter.empty
            params.append(Parameter(arg.arg, Parameter.POSITIONAL_ONLY,
                                    default=default, annotation=annotation))

    for i, arg in enumerate(args.args):
        if defaults[i + posonlyargs] is Parameter.empty:
            default = Parameter.empty
        else:
            default = ast_unparse(defaults[i + posonlyargs])

        annotation = ast_unparse(arg.annotation) or Parameter.empty
        params.append(Parameter(arg.arg, Parameter.POSITIONAL_OR_KEYWORD,
                                default=default, annotation=annotation))

    if args.vararg:
        annotation = ast_unparse(args.vararg.annotation) or Parameter.empty
        params.append(Parameter(args.vararg.arg, Parameter.VAR_POSITIONAL,
                                annotation=annotation))

    for i, arg in enumerate(args.kwonlyargs):
        default = ast_unparse(args.kw_defaults[i]) or Parameter.empty
        annotation = ast_unparse(arg.annotation) or Parameter.empty
        params.append(Parameter(arg.arg, Parameter.KEYWORD_ONLY, default=default,
                                annotation=annotation))

    if args.kwarg:
        annotation = ast_unparse(args.kwarg.annotation) or Parameter.empty
        params.append(Parameter(args.kwarg.arg, Parameter.VAR_KEYWORD,
                                annotation=annotation))

    return_annotation = ast_unparse(definition.returns) or Parameter.empty

    return inspect.Signature(params, return_annotation=return_annotation)
Exemple #3
0
def signature_from_str(signature: str) -> inspect.Signature:
    """Create a Signature object from string."""
    module = ast.parse('def func' + signature + ': pass')
    definition = cast(ast.FunctionDef, module.body[0])  # type: ignore

    # parameters
    args = definition.args
    params = []

    if hasattr(args, "posonlyargs"):
        for arg in args.posonlyargs:  # type: ignore
            annotation = ast_unparse(arg.annotation) or Parameter.empty
            params.append(
                Parameter(arg.arg,
                          Parameter.POSITIONAL_ONLY,
                          annotation=annotation))

    for i, arg in enumerate(args.args):
        if len(args.args) - i <= len(args.defaults):
            default = ast_unparse(args.defaults[-len(args.args) + i])
        else:
            default = Parameter.empty

        annotation = ast_unparse(arg.annotation) or Parameter.empty
        params.append(
            Parameter(arg.arg,
                      Parameter.POSITIONAL_OR_KEYWORD,
                      default=default,
                      annotation=annotation))

    if args.vararg:
        annotation = ast_unparse(args.vararg.annotation) or Parameter.empty
        params.append(
            Parameter(args.vararg.arg,
                      Parameter.VAR_POSITIONAL,
                      annotation=annotation))

    for i, arg in enumerate(args.kwonlyargs):
        default = ast_unparse(args.kw_defaults[i]) or Parameter.empty
        annotation = ast_unparse(arg.annotation) or Parameter.empty
        params.append(
            Parameter(arg.arg,
                      Parameter.KEYWORD_ONLY,
                      default=default,
                      annotation=annotation))

    if args.kwarg:
        annotation = ast_unparse(args.kwarg.annotation) or Parameter.empty
        params.append(
            Parameter(args.kwarg.arg,
                      Parameter.VAR_KEYWORD,
                      annotation=annotation))

    return_annotation = ast_unparse(definition.returns) or Parameter.empty

    return inspect.Signature(params, return_annotation=return_annotation)