예제 #1
0
def _fix_file(filename: str, args: argparse.Namespace) -> int:
    if filename == '-':
        contents_bytes = sys.stdin.buffer.read()
    else:
        with open(filename, 'rb') as fb:
            contents_bytes = fb.read()

    try:
        contents_text_orig = contents_text = contents_bytes.decode()
    except UnicodeDecodeError:
        print(f'{filename} is non-utf-8 (not supported)')
        return 1

    contents_text = _fix_plugins(
        contents_text,
        settings=Settings(
            min_version=args.min_version,
            keep_percent_format=args.keep_percent_format,
        ),
    )
    contents_text = _fix_tokens(contents_text, min_version=args.min_version)
    if args.min_version >= (3, 6):
        contents_text = _fix_py36_plus(contents_text)

    if filename == '-':
        print(contents_text, end='')
    elif contents_text != contents_text_orig:
        print(f'Rewriting {filename}', file=sys.stderr)
        with open(filename, 'w', encoding='UTF-8', newline='') as f:
            f.write(contents_text)

    if args.exit_zero_even_if_changed:
        return 0
    else:
        return contents_text != contents_text_orig
예제 #2
0
def test_noop_keep_runtime_typing():
    s = '''\
from __future__ import annotations
from typing import Union
def f(x: Union[int, str]) -> None: ...
'''
    settings = Settings(min_version=(3,), keep_runtime_typing=True)
    assert _fix_plugins(s, settings=settings) == s
예제 #3
0
def test_mock_noop_keep_mock():
    """This would've been rewritten if keep_mock were False"""
    s = (
        'from mock import patch\n'
        '\n'
        'patch("func")'
    )
    settings = Settings(min_version=(3,), keep_mock=True)
    assert _fix_plugins(s, settings=settings) == s
예제 #4
0
def test_fix_typing_pep563_posonlyargs():
    s = (
        'from __future__ import annotations\n'
        'def foo(var0, /, var1: "MyClass") -> "MyClass":\n'
        '   x: "MyClass"\n'
    )
    expected = (
        'from __future__ import annotations\n'
        'def foo(var0, /, var1: MyClass) -> MyClass:\n'
        '   x: MyClass\n'
    )
    ret = _fix_plugins(s, settings=Settings(min_version=(3, 8)))
    assert ret == expected
예제 #5
0
def test_keep_runtime_typing_ignored_in_py310():
    s = '''\
from __future__ import annotations
from typing import Union
def f(x: Union[int, str]) -> None: ...
'''
    expected = '''\
from __future__ import annotations
from typing import Union
def f(x: int | str) -> None: ...
'''
    settings = Settings(min_version=(3, 10), keep_runtime_typing=True)
    assert _fix_plugins(s, settings=settings) == expected
예제 #6
0
def test_keep_runtime_typing_ignored_in_py39():
    s = '''\
from __future__ import annotations
from typing import List
def f(x: List[str]) -> None: ...
'''
    expected = '''\
from __future__ import annotations
from typing import List
def f(x: list[str]) -> None: ...
'''
    settings = Settings(min_version=(3, 9), keep_runtime_typing=True)
    assert _fix_plugins(s, settings=settings) == expected
예제 #7
0
def test_fix_maxsize_none_decorators(s, expected):
    ret = _fix_plugins(s, settings=Settings(min_version=(3, 9)))
    assert ret == expected
def test_fix_universal_newlines_to_text(s, expected):
    ret = _fix_plugins(s, settings=Settings(min_version=(3, 7)))
    assert ret == expected
예제 #9
0
def test_fix_maxsize_none_decorators_noop(s, min_version):
    assert _fix_plugins(s, settings=Settings(min_version=min_version)) == s
예제 #10
0
def test_fix_generic_types_noop(s, version):
    assert _fix_plugins(s, settings=Settings(min_version=version)) == s
def test_fix_universal_newlines_to_text_noop(s, version):
    assert _fix_plugins(s, settings=Settings(min_version=version)) == s
def test_fix_unpack_argument_list_comp_noop(s, version):
    assert _fix_plugins(s, settings=Settings(min_version=version)) == s
예제 #13
0
def test_fix_is_compare_to_literal_noop(s):
    assert _fix_plugins(s, settings=Settings()) == s
예제 #14
0
def test_fix_sets_noop(s):
    assert _fix_plugins(s, settings=Settings()) == s
예제 #15
0
def test_fix_pep584_noop(s, version):
    assert _fix_plugins(s, settings=Settings(min_version=version)) == s
예제 #16
0
def test_fix_pep604_types(s, expected):
    assert _fix_plugins(s, settings=Settings(min_version=(3, 10))) == expected
예제 #17
0
def test_fix_generic_types_future_annotations(s, expected):
    assert _fix_plugins(s, settings=Settings(min_version=(3,))) == expected
예제 #18
0
def test_fix_typing_text(s, expected):
    ret = _fix_plugins(s, settings=Settings(min_version=(3, )))
    assert ret == expected
예제 #19
0
def test_fix_typing_text_noop(s, version):
    assert _fix_plugins(s, settings=Settings(min_version=version)) == s
예제 #20
0
def test_fix_generic_types(s, expected):
    ret = _fix_plugins(s, settings=Settings(min_version=(3, 9)))
    assert ret == expected
예제 #21
0
def test_fix_no_arg_decorators_noop(s, min_version):
    assert _fix_plugins(s, settings=Settings(min_version=min_version)) == s
예제 #22
0
def test_sets_generators_trailing_commas(s, expected):
    ret = _fix_plugins(s, settings=Settings())
    assert ret == expected
예제 #23
0
def test_fix_no_arg_decorators(s, expected):
    ret = _fix_plugins(s, settings=Settings(min_version=(3, 8)))
    assert ret == expected
예제 #24
0
def test_fix_py3_only_code(s, expected):
    ret = _fix_plugins(s, settings=Settings(min_version=(3,)))
    assert ret == expected
def test_fix_unpack_argument_list_comp(s, expected):
    ret = _fix_plugins(s, settings=Settings((3, )))
    assert ret == expected
예제 #26
0
def test_fix_py2_block_noop(s):
    assert _fix_plugins(s, settings=Settings(min_version=(3,))) == s
예제 #27
0
def test_fix_is_compare_to_literal(s, expected):
    ret = _fix_plugins(s, settings=Settings())
    assert ret == expected
예제 #28
0
def test_sets(s, expected):
    ret = _fix_plugins(s, settings=Settings())
    assert ret == expected
예제 #29
0
def test_fix_pep584(s, expected):
    assert _fix_plugins(s, settings=Settings(min_version=(3, 9))) == expected
예제 #30
0
def test_fix_py2_blocks(s, expected):
    ret = _fix_plugins(s, settings=Settings(min_version=(3,)))
    assert ret == expected