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-11-03 17:25:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyupgrade (Old)
and /work/SRC/openSUSE:Factory/.python-pyupgrade.new.1890 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyupgrade"
Wed Nov 3 17:25:51 2021 rev:19 rq:928868 version:2.29.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyupgrade/python-pyupgrade.changes
2021-10-26 20:15:05.378054049 +0200
+++
/work/SRC/openSUSE:Factory/.python-pyupgrade.new.1890/python-pyupgrade.changes
2021-11-03 17:26:47.093354253 +0100
@@ -1,0 +2,13 @@
+Tue Nov 2 19:39:16 UTC 2021 - Sebastian Wagner <[email protected]>
+
+- update to version 2.29.0:
+ - Revert "Merge pull request #320 from asottile/new_class_super_v2"
+ This reverts commit b3f8c7b2e9ccb06c6028d5dd90c8f5490a49e95b, reversing
+ changes made to 41308214566af7c5589ebc7e8a760522c82dc3bc.
+ - Revert "Merge pull request #545 from asottile/skip-staticmethod"
+ This reverts commit 8768d42facdaa1ef771a5a689b11329a54afd00a, reversing
+ changes made to a2f517f0103c1f74bffbc06be510bcec4cd181ec.
+- update to version 2.28.1:
+ - don't rewrite old-super for staticmethods
+
+-------------------------------------------------------------------
Old:
----
python-pyupgrade-2.28.0.tar.gz
New:
----
python-pyupgrade-2.29.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pyupgrade.spec ++++++
--- /var/tmp/diff_new_pack.9ukluc/_old 2021-11-03 17:26:47.497354475 +0100
+++ /var/tmp/diff_new_pack.9ukluc/_new 2021-11-03 17:26:47.501354476 +0100
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-pyupgrade
-Version: 2.28.0
+Version: 2.29.0
Release: 0
Summary: A tool to automatically upgrade syntax for newer versions
License: MIT
++++++ python-pyupgrade-2.28.0.tar.gz -> python-pyupgrade-2.29.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-2.28.0/.pre-commit-config.yaml
new/pyupgrade-2.29.0/.pre-commit-config.yaml
--- old/pyupgrade-2.28.0/.pre-commit-config.yaml 2021-09-25
23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/.pre-commit-config.yaml 2021-09-28
17:15:18.000000000 +0200
@@ -34,7 +34,7 @@
- id: add-trailing-comma
args: [--py36-plus]
- repo: https://github.com/asottile/pyupgrade
- rev: v2.28.0
+ rev: v2.29.0
hooks:
- id: pyupgrade
args: [--py36-plus]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-2.28.0/README.md
new/pyupgrade-2.29.0/README.md
--- old/pyupgrade-2.28.0/README.md 2021-09-25 23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/README.md 2021-09-28 17:15:18.000000000 +0200
@@ -20,7 +20,7 @@
```yaml
- repo: https://github.com/asottile/pyupgrade
- rev: v2.28.0
+ rev: v2.29.0
hooks:
- id: pyupgrade
```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-2.28.0/pyupgrade/_ast_helpers.py
new/pyupgrade-2.29.0/pyupgrade/_ast_helpers.py
--- old/pyupgrade-2.28.0/pyupgrade/_ast_helpers.py 2021-09-25
23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/pyupgrade/_ast_helpers.py 2021-09-28
17:15:18.000000000 +0200
@@ -1,12 +1,8 @@
import ast
import warnings
-from typing import Any
from typing import Container
from typing import Dict
-from typing import Iterable
from typing import Set
-from typing import Tuple
-from typing import Type
from typing import Union
from tokenize_rt import Offset
@@ -61,43 +57,3 @@
any(gen.is_async for gen in node.generators) or
contains_await(node)
)
-
-
-def _all_isinstance(
- vals: Iterable[Any],
- tp: Union[Type[Any], Tuple[Type[Any], ...]],
-) -> bool:
- return all(isinstance(v, tp) for v in vals)
-
-
-def _fields_same(n1: ast.AST, n2: ast.AST) -> bool:
- for (a1, v1), (a2, v2) in zip(ast.iter_fields(n1), ast.iter_fields(n2)):
- # ignore ast attributes, they'll be covered by walk
- if a1 != a2:
- return False
- elif _all_isinstance((v1, v2), ast.AST):
- continue
- elif _all_isinstance((v1, v2), (list, tuple)):
- if len(v1) != len(v2):
- return False
- # ignore sequences which are all-ast, they'll be covered by walk
- elif _all_isinstance(v1, ast.AST) and _all_isinstance(v2, ast.AST):
- continue
- elif v1 != v2:
- return False
- elif v1 != v2:
- return False
- return True
-
-
-def targets_same(node1: ast.AST, node2: ast.AST) -> bool:
- for t1, t2 in zip(ast.walk(node1), ast.walk(node2)):
- # ignore `ast.Load` / `ast.Store`
- if _all_isinstance((t1, t2), ast.expr_context):
- continue
- elif type(t1) != type(t2):
- return False
- elif not _fields_same(t1, t2):
- return False
- else:
- return True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-2.28.0/pyupgrade/_plugins/legacy.py
new/pyupgrade-2.29.0/pyupgrade/_plugins/legacy.py
--- old/pyupgrade-2.28.0/pyupgrade/_plugins/legacy.py 2021-09-25
23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/pyupgrade/_plugins/legacy.py 2021-09-28
17:15:18.000000000 +0200
@@ -2,19 +2,21 @@
import collections
import contextlib
import functools
+from typing import Any
from typing import Dict
from typing import Generator
from typing import Iterable
from typing import List
from typing import Set
from typing import Tuple
+from typing import Type
+from typing import Union
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 targets_same
from pyupgrade._data import register
from pyupgrade._data import State
from pyupgrade._data import TokenFunc
@@ -24,7 +26,6 @@
from pyupgrade._token_helpers import find_token
FUNC_TYPES = (ast.Lambda, ast.FunctionDef, ast.AsyncFunctionDef)
-NON_LAMBDA_FUNC_TYPES = (ast.FunctionDef, ast.AsyncFunctionDef)
def _fix_yield(i: int, tokens: List[Token]) -> None:
@@ -35,13 +36,44 @@
tokens[i:block.end] = [Token('CODE', f'yield from {container}\n')]
-def _is_simple_base(base: ast.AST) -> bool:
- return (
- isinstance(base, ast.Name) or (
- isinstance(base, ast.Attribute) and
- _is_simple_base(base.value)
- )
- )
+def _all_isinstance(
+ vals: Iterable[Any],
+ tp: Union[Type[Any], Tuple[Type[Any], ...]],
+) -> bool:
+ return all(isinstance(v, tp) for v in vals)
+
+
+def _fields_same(n1: ast.AST, n2: ast.AST) -> bool:
+ for (a1, v1), (a2, v2) in zip(ast.iter_fields(n1), ast.iter_fields(n2)):
+ # ignore ast attributes, they'll be covered by walk
+ if a1 != a2:
+ return False
+ elif _all_isinstance((v1, v2), ast.AST):
+ continue
+ elif _all_isinstance((v1, v2), (list, tuple)):
+ if len(v1) != len(v2):
+ return False
+ # ignore sequences which are all-ast, they'll be covered by walk
+ elif _all_isinstance(v1, ast.AST) and _all_isinstance(v2, ast.AST):
+ continue
+ elif v1 != v2:
+ return False
+ elif v1 != v2:
+ return False
+ return True
+
+
+def _targets_same(target: ast.AST, yield_value: ast.AST) -> bool:
+ for t1, t2 in zip(ast.walk(target), ast.walk(yield_value)):
+ # ignore `ast.Load` / `ast.Store`
+ if _all_isinstance((t1, t2), ast.expr_context):
+ continue
+ elif type(t1) != type(t2):
+ return False
+ elif not _fields_same(t1, t2):
+ return False
+ else:
+ return True
class Scope:
@@ -60,7 +92,6 @@
def __init__(self) -> None:
self._scopes: List[Scope] = []
self.super_offsets: Set[Offset] = set()
- self.old_super_offsets: Set[Tuple[Offset, str]] = set()
self.yield_offsets: Set[Offset] = set()
@contextlib.contextmanager
@@ -106,6 +137,7 @@
len(node.args) == 2 and
isinstance(node.args[0], ast.Name) and
isinstance(node.args[1], ast.Name) and
+ # there are at least two scopes
len(self._scopes) >= 2 and
# the second to last scope is the class in arg1
isinstance(self._scopes[-2].node, ast.ClassDef) and
@@ -116,29 +148,6 @@
node.args[1].id == self._scopes[-1].node.args.args[0].arg
):
self.super_offsets.add(ast_to_offset(node))
- elif (
- # base.funcname(funcarg1, ...)
- isinstance(node.func, ast.Attribute) and
- len(node.args) >= 1 and
- isinstance(node.args[0], ast.Name) and
- len(self._scopes) >= 2 and
- # last stack is a function whose first argument is the first
- # argument of this function
- isinstance(self._scopes[-1].node, NON_LAMBDA_FUNC_TYPES) and
- node.func.attr == self._scopes[-1].node.name and
- node.func.attr != '__new__' and
- len(self._scopes[-1].node.args.args) >= 1 and
- node.args[0].id == self._scopes[-1].node.args.args[0].arg and
- # the function is an attribute of the contained class name
- isinstance(self._scopes[-2].node, ast.ClassDef) and
- len(self._scopes[-2].node.bases) == 1 and
- _is_simple_base(self._scopes[-2].node.bases[0]) and
- targets_same(
- self._scopes[-2].node.bases[0],
- node.func.value,
- )
- ):
- self.old_super_offsets.add((ast_to_offset(node), node.func.attr))
self.generic_visit(node)
@@ -150,7 +159,7 @@
isinstance(node.body[0], ast.Expr) and
isinstance(node.body[0].value, ast.Yield) and
node.body[0].value.value is not None and
- targets_same(node.target, node.body[0].value.value) and
+ _targets_same(node.target, node.body[0].value.value) and
not node.orelse
):
offset = ast_to_offset(node)
@@ -189,10 +198,5 @@
for offset in visitor.super_offsets:
yield offset, super_func
- for offset, func_name in visitor.old_super_offsets:
- template = f'super().{func_name}({{rest}})'
- callback = functools.partial(find_and_replace_call, template=template)
- yield offset, callback
-
for offset in visitor.yield_offsets:
yield offset, _fix_yield
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-2.28.0/setup.cfg
new/pyupgrade-2.29.0/setup.cfg
--- old/pyupgrade-2.28.0/setup.cfg 2021-09-25 23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/setup.cfg 2021-09-28 17:15:18.000000000 +0200
@@ -1,6 +1,6 @@
[metadata]
name = pyupgrade
-version = 2.28.0
+version = 2.29.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.28.0/tests/ast_helpers_test.py
new/pyupgrade-2.29.0/tests/ast_helpers_test.py
--- old/pyupgrade-2.28.0/tests/ast_helpers_test.py 2021-09-25
23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/tests/ast_helpers_test.py 1970-01-01
01:00:00.000000000 +0100
@@ -1,19 +0,0 @@
-import ast
-
-from pyupgrade._ast_helpers import _fields_same
-from pyupgrade._ast_helpers import targets_same
-
-
-def test_targets_same():
- assert targets_same(ast.parse('global a, b'), ast.parse('global a, b'))
- assert not targets_same(ast.parse('global a'), ast.parse('global b'))
-
-
-def _get_body(expr):
- body = ast.parse(expr).body[0]
- assert isinstance(body, ast.Expr)
- return body.value
-
-
-def test_fields_same():
- assert not _fields_same(_get_body('x'), _get_body('1'))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-2.28.0/tests/features/super_test.py
new/pyupgrade-2.29.0/tests/features/super_test.py
--- old/pyupgrade-2.28.0/tests/features/super_test.py 2021-09-25
23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/tests/features/super_test.py 2021-09-28
17:15:18.000000000 +0200
@@ -122,107 +122,3 @@
)
def test_fix_super(s, expected):
assert _fix_plugins(s, settings=Settings(min_version=(3,))) == expected
-
-
[email protected](
- 's',
- (
- pytest.param(
- 'class C(B):\n'
- ' def f(self):\n'
- ' B.f(notself)\n',
- id='old style super, first argument is not first function arg',
- ),
- pytest.param(
- 'class C(B1, B2):\n'
- ' def f(self):\n'
- ' B1.f(self)\n',
- # TODO: is this safe to rewrite? I don't think so
- id='old-style super, multiple inheritance first class',
- ),
- pytest.param(
- 'class C(B1, B2):\n'
- ' def f(self):\n'
- ' B2.f(self)\n',
- # TODO: is this safe to rewrite? I don't think so
- id='old-style super, multiple inheritance not-first class',
- ),
- pytest.param(
- 'class C(Base):\n'
- ' def f(self):\n'
- ' return [Base.f(self) for _ in ()]\n',
- id='super in comprehension',
- ),
- pytest.param(
- 'class C(Base):\n'
- ' def f(self):\n'
- ' def g():\n'
- ' Base.f(self)\n'
- ' g()\n',
- id='super in nested functions',
- ),
- pytest.param(
- 'class C(not_simple()):\n'
- ' def f(self):\n'
- ' not_simple().f(self)\n',
- id='not a simple base',
- ),
- pytest.param(
- 'class C(a().b):\n'
- ' def f(self):\n'
- ' a().b.f(self)\n',
- id='non simple attribute base',
- ),
- pytest.param(
- 'class C:\n'
- ' @classmethod\n'
- ' def make(cls, instance):\n'
- ' ...\n'
- 'class D(C):\n'
- ' def find(self):\n'
- ' return C.make(self)\n',
- ),
- pytest.param(
- 'class C(tuple):\n'
- ' def __new__(cls, arg):\n'
- ' return tuple.__new__(cls, (arg,))\n',
- id='super() does not work properly for __new__',
- ),
- ),
-)
-def test_old_style_class_super_noop(s):
- assert _fix_plugins(s, settings=Settings(min_version=(3,))) == s
-
-
[email protected](
- ('s', 'expected'),
- (
- (
- 'class C(B):\n'
- ' def f(self):\n'
- ' B.f(self)\n'
- ' B.f(self, arg, arg)\n',
- 'class C(B):\n'
- ' def f(self):\n'
- ' super().f()\n'
- ' super().f(arg, arg)\n',
- ),
- pytest.param(
- 'class C(B):\n'
- ' def f(self, a):\n'
- ' B.f(\n'
- ' self,\n'
- ' a,\n'
- ' )\n',
-
- 'class C(B):\n'
- ' def f(self, a):\n'
- ' super().f(\n'
- ' a,\n'
- ' )\n',
- id='multi-line super call',
- ),
- ),
-)
-def test_old_style_class_super(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.28.0/tests/features/yield_from_test.py
new/pyupgrade-2.29.0/tests/features/yield_from_test.py
--- old/pyupgrade-2.28.0/tests/features/yield_from_test.py 2021-09-25
23:35:49.000000000 +0200
+++ new/pyupgrade-2.29.0/tests/features/yield_from_test.py 2021-09-28
17:15:18.000000000 +0200
@@ -1,7 +1,11 @@
+import ast
+
import pytest
from pyupgrade._data import Settings
from pyupgrade._main import _fix_plugins
+from pyupgrade._plugins.legacy import _fields_same
+from pyupgrade._plugins.legacy import _targets_same
@pytest.mark.parametrize(
@@ -211,3 +215,18 @@
)
def test_fix_yield_from_noop(s):
assert _fix_plugins(s, settings=Settings(min_version=(3,))) == s
+
+
+def test_targets_same():
+ assert _targets_same(ast.parse('global a, b'), ast.parse('global a, b'))
+ assert not _targets_same(ast.parse('global a'), ast.parse('global b'))
+
+
+def _get_body(expr):
+ body = ast.parse(expr).body[0]
+ assert isinstance(body, ast.Expr)
+ return body.value
+
+
+def test_fields_same():
+ assert not _fields_same(_get_body('x'), _get_body('1'))