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-07-21 19:06:40 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyupgrade (Old) and /work/SRC/openSUSE:Factory/.python-pyupgrade.new.2632 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyupgrade" Wed Jul 21 19:06:40 2021 rev:13 rq:907474 version:2.20.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyupgrade/python-pyupgrade.changes 2021-06-27 19:00:43.656405775 +0200 +++ /work/SRC/openSUSE:Factory/.python-pyupgrade.new.2632/python-pyupgrade.changes 2021-07-21 19:07:55.527452627 +0200 @@ -1,0 +2,9 @@ +Sat Jul 3 20:31:13 UTC 2021 - Sebastian Wagner <sebix+novell....@sebix.at> + +- Update to version 2.20.0: + - stricter mypy settings + - remove unused type ignore + - fix six.with_metaclass and trailing commas + - rewrite cElementTree to ElementTree + +------------------------------------------------------------------- Old: ---- python-pyupgrade-2.19.4.tar.gz New: ---- python-pyupgrade-2.20.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyupgrade.spec ++++++ --- /var/tmp/diff_new_pack.5jT8GN/_old 2021-07-21 19:07:55.911453293 +0200 +++ /var/tmp/diff_new_pack.5jT8GN/_new 2021-07-21 19:07:55.915453301 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-pyupgrade -Version: 2.19.4 +Version: 2.20.0 Release: 0 Summary: A tool to automatically upgrade syntax for newer versions License: MIT ++++++ python-pyupgrade-2.19.4.tar.gz -> python-pyupgrade-2.20.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/.pre-commit-config.yaml new/pyupgrade-2.20.0/.pre-commit-config.yaml --- old/pyupgrade-2.19.4/.pre-commit-config.yaml 2021-06-11 16:50:16.000000000 +0200 +++ new/pyupgrade-2.20.0/.pre-commit-config.yaml 2021-07-03 21:01:26.000000000 +0200 @@ -34,11 +34,11 @@ - id: add-trailing-comma args: [--py36-plus] - repo: https://github.com/asottile/pyupgrade - rev: v2.19.4 + rev: v2.20.0 hooks: - id: pyupgrade args: [--py36-plus] - repo: https://github.com/pre-commit/mirrors-mypy - rev: v0.812 + rev: v0.910 hooks: - id: mypy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/README.md new/pyupgrade-2.20.0/README.md --- old/pyupgrade-2.19.4/README.md 2021-06-11 16:50:16.000000000 +0200 +++ new/pyupgrade-2.20.0/README.md 2021-07-03 21:01:26.000000000 +0200 @@ -20,7 +20,7 @@ ```yaml - repo: https://github.com/asottile/pyupgrade - rev: v2.19.4 + rev: v2.20.0 hooks: - id: pyupgrade ``` @@ -451,6 +451,19 @@ ``` +###??Rewrite `xml.etree.cElementTree` to `xml.etree.ElementTree` + +Availability: +- `--py3-plus` is passed on the commandline. + +```diff +-import xml.etree.cElementTree as ET ++import xml.etree.ElementTree as ET +-from xml.etree.cElementTree import XML ++from xml.etree.ElementTree import XML +``` + + ### `typing.NamedTuple` / `typing.TypedDict` py36+ syntax Availability: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/pyupgrade/_main.py new/pyupgrade-2.20.0/pyupgrade/_main.py --- old/pyupgrade-2.19.4/pyupgrade/_main.py 2021-06-11 16:50:16.000000000 +0200 +++ new/pyupgrade-2.20.0/pyupgrade/_main.py 2021-07-03 21:01:26.000000000 +0200 @@ -805,7 +805,7 @@ elif token.offset in visitor.named_tuples and token.name == 'NAME': call = visitor.named_tuples[token.offset] types: Dict[str, ast.expr] = { - tup.elts[0].s: tup.elts[1] # type: ignore # (checked above) + tup.elts[0].s: tup.elts[1] for tup in call.args[1].elts # type: ignore # (checked above) } end, attrs = _typed_class_replacement(tokens, i, call, types) @@ -823,7 +823,7 @@ elif token.offset in visitor.dict_typed_dicts and token.name == 'NAME': call = visitor.dict_typed_dicts[token.offset] types = { - k.s: v # type: ignore # (checked above) + k.s: v for k, v in zip( call.args[1].keys, # type: ignore # (checked above) call.args[1].values, # type: ignore # (checked above) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/pyupgrade/_plugins/c_element_tree.py new/pyupgrade-2.20.0/pyupgrade/_plugins/c_element_tree.py --- old/pyupgrade-2.19.4/pyupgrade/_plugins/c_element_tree.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pyupgrade-2.20.0/pyupgrade/_plugins/c_element_tree.py 2021-07-03 21:01:26.000000000 +0200 @@ -0,0 +1,50 @@ +import ast +from typing import Iterable +from typing import List +from typing import Tuple + +from tokenize_rt import Offset +from tokenize_rt import Token + +from pyupgrade._ast_helpers import ast_to_offset +from pyupgrade._data import register +from pyupgrade._data import State +from pyupgrade._data import TokenFunc +from pyupgrade._token_helpers import find_token + + +def _replace_celementtree_with_elementtree( + i: int, + tokens: List[Token], +) -> None: + j = find_token(tokens, i, 'cElementTree') + tokens[j] = tokens[j]._replace(src='ElementTree') + + +@register(ast.ImportFrom) +def visit_ImportFrom( + state: State, + node: ast.ImportFrom, + parent: ast.AST, +) -> Iterable[Tuple[Offset, TokenFunc]]: + if ( + state.settings.min_version >= (3,) and + node.module == 'xml.etree.cElementTree' and + node.level == 0 + ): + yield ast_to_offset(node), _replace_celementtree_with_elementtree + + +@register(ast.Import) +def visit_Import( + state: State, + node: ast.Import, + parent: ast.AST, +) -> Iterable[Tuple[Offset, TokenFunc]]: + if ( + state.settings.min_version >= (3,) and + len(node.names) == 1 and + node.names[0].name == 'xml.etree.cElementTree' and + node.names[0].asname is not None + ): + yield ast_to_offset(node), _replace_celementtree_with_elementtree diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/pyupgrade/_token_helpers.py new/pyupgrade-2.20.0/pyupgrade/_token_helpers.py --- old/pyupgrade-2.19.4/pyupgrade/_token_helpers.py 2021-06-11 16:50:16.000000000 +0200 +++ new/pyupgrade-2.20.0/pyupgrade/_token_helpers.py 2021-07-03 21:01:26.000000000 +0200 @@ -410,7 +410,15 @@ ): start_rest += 1 - rest = tokens_to_src(tokens[start_rest:end - 1]) + # Remove trailing comma + end_rest = end - 1 + while ( + tokens[end_rest - 1].name == 'OP' and + tokens[end_rest - 1].src == ',' + ): + end_rest -= 1 + + rest = tokens_to_src(tokens[start_rest:end_rest]) src = tmpl.format(args=arg_strs, rest=rest) tokens[start:end] = [Token('CODE', src)] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/setup.cfg new/pyupgrade-2.20.0/setup.cfg --- old/pyupgrade-2.19.4/setup.cfg 2021-06-11 16:50:16.000000000 +0200 +++ new/pyupgrade-2.20.0/setup.cfg 2021-07-03 21:01:26.000000000 +0200 @@ -1,6 +1,6 @@ [metadata] name = pyupgrade -version = 2.19.4 +version = 2.20.0 description = A tool to automatically upgrade syntax for newer versions. long_description = file: README.md long_description_content_type = text/markdown @@ -47,6 +47,8 @@ disallow_incomplete_defs = true disallow_untyped_defs = true no_implicit_optional = true +warn_redundant_casts = true +warn_unused_ignores = true [mypy-testing.*] disallow_untyped_defs = false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/tests/features/c_element_tree_test.py new/pyupgrade-2.20.0/tests/features/c_element_tree_test.py --- old/pyupgrade-2.19.4/tests/features/c_element_tree_test.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pyupgrade-2.20.0/tests/features/c_element_tree_test.py 2021-07-03 21:01:26.000000000 +0200 @@ -0,0 +1,57 @@ +import pytest + +from pyupgrade._data import Settings +from pyupgrade._main import _fix_plugins + + +@pytest.mark.parametrize( + ('s', 'version'), + ( + pytest.param( + 'import xml.etree.cElementTree as ET', + (2, 7), + id='not Python3+', + ), + pytest.param( + 'import contextlib, xml.etree.ElementTree as ET\n', + (3,), + id='does not rewrite multiple imports', + ), + pytest.param( + 'from .xml.etree.cElementTree import XML\n', + (3,), + id='leave relative imports alone', + ), + pytest.param( + 'import xml.etree.cElementTree', + (3,), + id='import without alias', + ), + ), +) +def test_c_element_tree_noop(s, version): + assert _fix_plugins(s, settings=Settings(min_version=version)) == s + + +@pytest.mark.parametrize( + ('s', 'expected'), + ( + pytest.param( + 'from xml.etree.cElementTree import XML\n', + 'from xml.etree.ElementTree import XML\n', + id='relative import func', + ), + pytest.param( + 'from xml.etree.cElementTree import XML, Element\n', + 'from xml.etree.ElementTree import XML, Element\n', + id='import multiple objects', + ), + pytest.param( + 'import xml.etree.cElementTree as ET', + 'import xml.etree.ElementTree as ET', + id='import with alias', + ), + ), +) +def test_fix_c_element_tree(s, expected): + assert _fix_plugins(s, settings=Settings(min_version=(3,))) == expected diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyupgrade-2.19.4/tests/features/six_test.py new/pyupgrade-2.20.0/tests/features/six_test.py --- old/pyupgrade-2.19.4/tests/features/six_test.py 2021-06-11 16:50:16.000000000 +0200 +++ new/pyupgrade-2.20.0/tests/features/six_test.py 2021-07-03 21:01:26.000000000 +0200 @@ -216,6 +216,13 @@ id='elide object base in with_metaclass', ), pytest.param( + 'class C(six.with_metaclass(M, B,)): pass', + + 'class C(B, metaclass=M): pass', + + id='with_metaclass and trailing comma', + ), + pytest.param( '@six.add_metaclass(M)\n' 'class C: pass\n',