Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-pyupgrade for openSUSE:Factory checked in at 2021-05-10 15:38:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyupgrade (Old) and /work/SRC/openSUSE:Factory/.python-pyupgrade.new.2988 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyupgrade" Mon May 10 15:38:39 2021 rev:9 rq:891802 version:2.14.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyupgrade/python-pyupgrade.changes 2021-05-02 18:39:14.108150348 +0200 +++ /work/SRC/openSUSE:Factory/.python-pyupgrade.new.2988/python-pyupgrade.changes 2021-05-10 15:41:10.965132527 +0200 @@ -1,0 +2,8 @@ +Sun May 2 07:38:55 UTC 2021 - Sebastian Wagner <sebix+novell....@sebix.at> + +- update to version 2.14.0: + - replace universal_newlines with text if py37+ + - upgrade subprocess.run(universal_newlines=True) to subprocess.run(text=True) in --py37-plus + - reorder_python_imports: v2.4.0 ??? v2.5.0 + +------------------------------------------------------------------- Old: ---- python-pyupgrade-2.13.0.tar.gz New: ---- python-pyupgrade-2.14.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyupgrade.spec ++++++ --- /var/tmp/diff_new_pack.St8uRv/_old 2021-05-10 15:41:11.381130900 +0200 +++ /var/tmp/diff_new_pack.St8uRv/_new 2021-05-10 15:41:11.385130883 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-pyupgrade -Version: 2.13.0 +Version: 2.14.0 Release: 0 Summary: A tool to automatically upgrade syntax for newer versions License: MIT ++++++ python-pyupgrade-2.13.0.tar.gz -> python-pyupgrade-2.14.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.13.0/.pre-commit-config.yaml new/pyupgrade-2.14.0/.pre-commit-config.yaml --- old/pyupgrade-2.13.0/.pre-commit-config.yaml 2021-04-20 23:21:45.000000000 +0200 +++ new/pyupgrade-2.14.0/.pre-commit-config.yaml 2021-05-01 22:38:32.000000000 +0200 @@ -24,7 +24,7 @@ hooks: - id: autopep8 - repo: https://github.com/asottile/reorder_python_imports - rev: v2.4.0 + rev: v2.5.0 hooks: - id: reorder-python-imports args: [--py3-plus] @@ -34,7 +34,7 @@ - id: add-trailing-comma args: [--py36-plus] - repo: https://github.com/asottile/pyupgrade - rev: v2.13.0 + rev: v2.14.0 hooks: - id: pyupgrade args: [--py36-plus] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.13.0/README.md new/pyupgrade-2.14.0/README.md --- old/pyupgrade-2.13.0/README.md 2021-04-20 23:21:45.000000000 +0200 +++ new/pyupgrade-2.14.0/README.md 2021-05-01 22:38:32.000000000 +0200 @@ -20,7 +20,7 @@ ```yaml - repo: https://github.com/asottile/pyupgrade - rev: v2.13.0 + rev: v2.14.0 hooks: - id: pyupgrade ``` @@ -462,6 +462,18 @@ if it would make the expression longer or if the substitution parameters are anything but simple names or dotted names (as this can decrease readability). + +### `subprocess.run`: replace `universal_newlines` with `text` + +Availability: +- `--py37-plus` is passed on the commandline. + +```diff +-output = subprocess.run(['foo'], universal_newlines=True) ++output = subprocess.run(['foo'], text=True) +``` + + ### remove parentheses from `@functools.lru_cache()` Availability: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.13.0/pyupgrade/_data.py new/pyupgrade-2.14.0/pyupgrade/_data.py --- old/pyupgrade-2.13.0/pyupgrade/_data.py 2021-04-20 23:21:45.000000000 +0200 +++ new/pyupgrade-2.14.0/pyupgrade/_data.py 2021-05-01 22:38:32.000000000 +0200 @@ -49,6 +49,7 @@ 'select', 'six', 'socket', + 'subprocess', 'sys', 'typing', )) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.13.0/pyupgrade/_plugins/universal_newlines_to_text.py new/pyupgrade-2.14.0/pyupgrade/_plugins/universal_newlines_to_text.py --- old/pyupgrade-2.13.0/pyupgrade/_plugins/universal_newlines_to_text.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pyupgrade-2.14.0/pyupgrade/_plugins/universal_newlines_to_text.py 2021-05-01 22:38:32.000000000 +0200 @@ -0,0 +1,61 @@ +import ast +import functools +from typing import Iterable +from typing import List +from typing import Tuple + +from tokenize_rt import Offset +from tokenize_rt import Token +from tokenize_rt import tokens_to_src + +from pyupgrade._ast_helpers import ast_to_offset +from pyupgrade._ast_helpers import is_name_attr +from pyupgrade._data import register +from pyupgrade._data import State +from pyupgrade._data import TokenFunc +from pyupgrade._token_helpers import find_open_paren +from pyupgrade._token_helpers import parse_call_args + + +def _replace_universal_newlines_with_text( + i: int, + tokens: List[Token], + *, + arg_idx: int, +) -> None: + j = find_open_paren(tokens, i) + func_args, _ = parse_call_args(tokens, j) + src = tokens_to_src(tokens[slice(*func_args[arg_idx])]) + new_src = src.replace('universal_newlines', 'text', 1) + tokens[slice(*func_args[arg_idx])] = [Token('SRC', new_src)] + + +@register(ast.Call) +def visit_Call( + state: State, + node: ast.Call, + parent: ast.AST, +) -> Iterable[Tuple[Offset, TokenFunc]]: + if ( + state.settings.min_version >= (3, 7) and + is_name_attr( + node.func, + state.from_imports, + 'subprocess', + ('run',), + ) + ): + kwarg_idx = next( + ( + n + for n, keyword in enumerate(node.keywords) + if keyword.arg == 'universal_newlines' + ), + None, + ) + if kwarg_idx is not None: + func = functools.partial( + _replace_universal_newlines_with_text, + arg_idx=len(node.args) + kwarg_idx, + ) + yield ast_to_offset(node), func diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.13.0/setup.cfg new/pyupgrade-2.14.0/setup.cfg --- old/pyupgrade-2.13.0/setup.cfg 2021-04-20 23:21:45.000000000 +0200 +++ new/pyupgrade-2.14.0/setup.cfg 2021-05-01 22:38:32.000000000 +0200 @@ -1,6 +1,6 @@ [metadata] name = pyupgrade -version = 2.13.0 +version = 2.14.0 description = A tool to automatically upgrade syntax for newer versions. long_description = file: README.md long_description_content_type = text/markdown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.13.0/tests/features/universal_newlines_to_text_test.py new/pyupgrade-2.14.0/tests/features/universal_newlines_to_text_test.py --- old/pyupgrade-2.13.0/tests/features/universal_newlines_to_text_test.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pyupgrade-2.14.0/tests/features/universal_newlines_to_text_test.py 2021-05-01 22:38:32.000000000 +0200 @@ -0,0 +1,77 @@ +import pytest + +from pyupgrade._data import Settings +from pyupgrade._main import _fix_plugins + + +@pytest.mark.parametrize( + ('s', 'version'), + ( + pytest.param( + 'import subprocess\n' + 'subprocess.run(["foo"], universal_newlines=True)\n', + (3,), + id='not Python3.7+', + ), + pytest.param( + 'from foo import run\n' + 'run(["foo"], universal_newlines=True)\n', + (3, 7), + id='run imported, but not from subprocess', + ), + pytest.param( + 'from subprocess import run\n' + 'run(["foo"], shell=True)\n', + (3, 7), + id='universal_newlines not used', + ), + ), +) +def test_fix_universal_newlines_to_text_noop(s, version): + assert _fix_plugins(s, settings=Settings(min_version=version)) == s + + +@pytest.mark.parametrize( + ('s', 'expected'), + ( + pytest.param( + 'import subprocess\n' + 'subprocess.run(["foo"], universal_newlines=True)\n', + + 'import subprocess\n' + 'subprocess.run(["foo"], text=True)\n', + + id='subprocess.run attribute', + ), + pytest.param( + 'from subprocess import run\n' + 'run(["foo"], universal_newlines=True)\n', + + 'from subprocess import run\n' + 'run(["foo"], text=True)\n', + + id='run imported from subprocess', + ), + pytest.param( + 'from subprocess import run\n' + 'run(["foo"], universal_newlines=universal_newlines)\n', + + 'from subprocess import run\n' + 'run(["foo"], text=universal_newlines)\n', + + id='universal_newlines appears as value', + ), + pytest.param( + 'from subprocess import run\n' + 'run(["foo"], *foo, universal_newlines=universal_newlines)\n', + + 'from subprocess import run\n' + 'run(["foo"], *foo, text=universal_newlines)\n', + + id='with starargs', + ), + ), +) +def test_fix_universal_newlines_to_text(s, expected): + ret = _fix_plugins(s, settings=Settings(min_version=(3, 7))) + assert ret == expected