Пример #1
0
def test_accepts_complex_arg_annotations():
    assert parse_function_definition(
        'def Foo(arg: Tuple[str, int]) -> None: ...'
    ) == FunctionDefinition(
        name='Foo',
        args=[
            ArgumentDefinition(name='arg'),
        ]
    )
Пример #2
0
def func_def():
    func_code = """def foo(a: str,
                b: int,
                c: str="c",
                d: int=4,
                e: str="e",
                f: int=6) -> None: ...
    """

    return parse_function_definition(func_code)
Пример #3
0
def test_accepts_complex_return_annotations():
    assert parse_function_definition(
        'def Foo() -> Single[Value[bool]]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.SINGLE,
            inner_format=ReturnValueInnerFormat.VALUE
        )
    )
    assert parse_function_definition(
        'def Foo() -> Single[Value[Optional[str]]]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.SINGLE,
            inner_format=ReturnValueInnerFormat.VALUE
        )
    )
Пример #4
0
def test_returns_inner_dict():
    assert parse_function_definition(
        'def Foo() -> Single[Dict]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.SINGLE,
            inner_format=ReturnValueInnerFormat.DICT
        )
    )
Пример #5
0
def test_returns_outer_iterator():
    assert parse_function_definition(
        'def Foo() -> Iterator[Tuple]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.ITERATOR,
            inner_format=ReturnValueInnerFormat.TUPLE
        )
    )
Пример #6
0
def test_returns_outer_single():
    assert parse_function_definition(
        'def Foo() -> Single[Tuple]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.SINGLE,
            inner_format=ReturnValueInnerFormat.TUPLE
        )
    )
Пример #7
0
def test_returns_outer_list():
    assert parse_function_definition(
        'def Foo() -> List[Tuple]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.LIST,
            inner_format=ReturnValueInnerFormat.TUPLE
        )
    )
Пример #8
0
def test_args():
    assert parse_function_definition(
        'def Foo(a: int, b: str, c: float) -> None: ...'
    ) == FunctionDefinition(
        name='Foo',
        args=[
            ArgumentDefinition(name='a'),
            ArgumentDefinition(name='b'),
            ArgumentDefinition(name='c'),
        ]
    )
Пример #9
0
def test_args_unannotated():
    assert parse_function_definition(
        'def Foo(a, b, c) -> None: ...'
    ) == FunctionDefinition(
        name='Foo',
        args=[
            ArgumentDefinition(name='a'),
            ArgumentDefinition(name='b'),
            ArgumentDefinition(name='c'),
        ]
    )
Пример #10
0
def test_default_args():
    assert parse_function_definition(
        'def Foo(a: int, b: int=2, c: int=3) -> None: ...'
    ) == FunctionDefinition(
        name='Foo',
        args=[
            ArgumentDefinition(name='a'),
            ArgumentDefinition(name='b', has_default=True, default=2),
            ArgumentDefinition(name='c', has_default=True, default=3),
        ]
    )
Пример #11
0
def test_returns_outer_dict():
    assert parse_function_definition(
        'def Foo() -> Dict[0, Tuple]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.DICT,
            inner_format=ReturnValueInnerFormat.TUPLE,
            outer_dict_by=0
        )
    )

    assert parse_function_definition(
        'def Foo() -> Dict["colname", Tuple]: ...'
    ) == FunctionDefinition(
        name='Foo',
        returns=ReturnValueDefinition(
            outer_format=ReturnValueOuterFormat.DICT,
            inner_format=ReturnValueInnerFormat.TUPLE,
            outer_dict_by='colname'
        )
    )
Пример #12
0
def test_incorrect_default_arguments():
    with pytest.raises(SyntaxError):
        parse_function_definition('def foo(a=1,b): ...')
Пример #13
0
def test_syntax_requires_body_ellipsis():
    with pytest.raises(SyntaxError):
        parse_function_definition('def A() -> None: 1')

    with pytest.raises(SyntaxError):
        parse_function_definition('def A() -> None:\n    ...\n    ...')
Пример #14
0
def test_syntax_requires_single_statement():
    with pytest.raises(SyntaxError):
        parse_function_definition('def A() -> None: ...\ndef B() -> None: ...')
Пример #15
0
def test_simple():
    assert parse_function_definition(
        'def Foo() -> None: ...'
    ) == FunctionDefinition(
        name='Foo'
    )
Пример #16
0
def test_syntax_requires_returns_dict_nargs():
    with pytest.raises(SyntaxError):
        parse_function_definition('def A() -> Dict[1, 2, Value]: ...')

    with pytest.raises(SyntaxError):
        parse_function_definition('def A() -> Dict[Value]: ...')
Пример #17
0
def test_syntax_requires_returns_dict_colref_modifier():
    with pytest.raises(SyntaxError):
        parse_function_definition('def A() -> Dict[+1, Value]: ...')
Пример #18
0
def test_syntax_requires_returns_row_corrent():
    with pytest.raises(TypeError):
        parse_function_definition('def A() -> List[BadType]: ...')
Пример #19
0
def test_syntax_requires_returns_row_subscript_name():
    with pytest.raises(SyntaxError):
        parse_function_definition('def A() -> Single[1[1]]: ...')
Пример #20
0
def test_syntax_requires_returns_rows_corrent():
    with pytest.raises(TypeError):
        parse_function_definition('def Foo() -> BadType[List]: ...')
Пример #21
0
def test_syntax_requires_function_definition():
    with pytest.raises(SyntaxError):
        parse_function_definition('foo = 1')
Пример #22
0
def test_syntax_requires_constant_default_arg():
    with pytest.raises(SyntaxError):
        parse_function_definition('def A(foo=1+1) -> None: ...')
Пример #23
0
def test_syntax_requires_returns():
    with pytest.raises(SyntaxError):
        parse_function_definition('def A(): ...')
Пример #24
0
 def flush() -> None:
     nonlocal current_annotation, current_text, res
     if current_annotation and current_text:
         res.append(Query(parse_function_definition(current_annotation), current_text))