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-06-27 18:59:20
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pyupgrade (Old)
 and      /work/SRC/openSUSE:Factory/.python-pyupgrade.new.2625 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pyupgrade"

Sun Jun 27 18:59:20 2021 rev:12 rq:902589 version:2.19.4

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pyupgrade/python-pyupgrade.changes        
2021-06-02 22:11:43.292136018 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pyupgrade.new.2625/python-pyupgrade.changes  
    2021-06-27 19:00:43.656405775 +0200
@@ -1,0 +2,14 @@
+Sun Jun 20 08:51:13 UTC 2021 - Sebastian Wagner <[email protected]>
+
+- update to version 2.19.1
+ - unpack argument list comprehensions
+ - revert string join for potential perf reasons
+- update to version 2.19.2
+ - replace open modes with string flags
+- update to version 2.19.3
+ - ignore unrelated calls to .encode(...)
+ - fix elif -> else when indented
+- update to version 2.19.4
+ - fix __metaclass__ = type replacement without extra newline
+
+-------------------------------------------------------------------

Old:
----
  python-pyupgrade-2.18.3.tar.gz

New:
----
  python-pyupgrade-2.19.4.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pyupgrade.spec ++++++
--- /var/tmp/diff_new_pack.RxIYA8/_old  2021-06-27 19:00:44.064406311 +0200
+++ /var/tmp/diff_new_pack.RxIYA8/_new  2021-06-27 19:00:44.064406311 +0200
@@ -19,7 +19,7 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-pyupgrade
-Version:        2.18.3
+Version:        2.19.4
 Release:        0
 Summary:        A tool to automatically upgrade syntax for newer versions
 License:        MIT

++++++ python-pyupgrade-2.18.3.tar.gz -> python-pyupgrade-2.19.4.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyupgrade-2.18.3/.pre-commit-config.yaml 
new/pyupgrade-2.19.4/.pre-commit-config.yaml
--- old/pyupgrade-2.18.3/.pre-commit-config.yaml        2021-05-25 
04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/.pre-commit-config.yaml        2021-06-11 
16:50:16.000000000 +0200
@@ -34,7 +34,7 @@
     -   id: add-trailing-comma
         args: [--py36-plus]
 -   repo: https://github.com/asottile/pyupgrade
-    rev: v2.18.3
+    rev: v2.19.4
     hooks:
     -   id: pyupgrade
         args: [--py36-plus]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyupgrade-2.18.3/README.md 
new/pyupgrade-2.19.4/README.md
--- old/pyupgrade-2.18.3/README.md      2021-05-25 04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/README.md      2021-06-11 16:50:16.000000000 +0200
@@ -20,7 +20,7 @@
 
 ```yaml
 -   repo: https://github.com/asottile/pyupgrade
-    rev: v2.18.3
+    rev: v2.19.4
     hooks:
     -   id: pyupgrade
 ```
@@ -440,6 +440,17 @@
 ```
 
 
+### Unpacking argument list comprehensions
+
+Availability:
+- `--py3-plus` is passed on the commandline.
+
+```diff
+-foo(*[i for i in bar])
++foo(*(i for i in bar))
+```
+
+
 ### `typing.NamedTuple` / `typing.TypedDict` py36+ syntax
 
 Availability:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyupgrade-2.18.3/pyupgrade/_main.py 
new/pyupgrade-2.19.4/pyupgrade/_main.py
--- old/pyupgrade-2.18.3/pyupgrade/_main.py     2021-05-25 04:35:17.000000000 
+0200
+++ new/pyupgrade-2.19.4/pyupgrade/_main.py     2021-06-11 16:50:16.000000000 
+0200
@@ -323,6 +323,10 @@
 
 
 def _fix_encode_to_binary(tokens: List[Token], i: int) -> None:
+    parts = rfind_string_parts(tokens, i - 2)
+    if not parts:
+        return
+
     # .encode()
     if (
             i + 2 < len(tokens) and
@@ -352,10 +356,6 @@
     else:
         return
 
-    parts = rfind_string_parts(tokens, i - 2)
-    if not parts:
-        return
-
     for part in parts:
         prefix, rest = parse_string_literal(tokens[part].src)
         escapes = set(ESCAPE_RE.findall(rest))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyupgrade-2.18.3/pyupgrade/_plugins/generator_expressions_pep289.py 
new/pyupgrade-2.19.4/pyupgrade/_plugins/generator_expressions_pep289.py
--- old/pyupgrade-2.18.3/pyupgrade/_plugins/generator_expressions_pep289.py     
2021-05-25 04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/pyupgrade/_plugins/generator_expressions_pep289.py     
2021-06-11 16:50:16.000000000 +0200
@@ -13,6 +13,7 @@
 from pyupgrade._data import TokenFunc
 from pyupgrade._token_helpers import find_closing_bracket
 from pyupgrade._token_helpers import find_comprehension_opening_bracket
+from pyupgrade._token_helpers import replace_list_comp_brackets
 
 
 ALLOWED_FUNCS = frozenset((
@@ -40,27 +41,6 @@
         tokens[j] = Token('PLACEHOLDER', '')
 
 
-def _replace_list_comp_brackets(i: int, tokens: List[Token]) -> None:
-    start = find_comprehension_opening_bracket(i, tokens)
-    end = find_closing_bracket(tokens, start)
-    tokens[end] = Token('OP', ')')
-    tokens[start] = Token('OP', '(')
-
-
-def _func_condition(func: ast.expr) -> bool:
-    return (
-        (
-            isinstance(func, ast.Name) and
-            func.id in ALLOWED_FUNCS
-        ) or
-        (
-            isinstance(func, ast.Attribute) and
-            isinstance(func.value, ast.Str) and
-            func.attr == 'join'
-        )
-    )
-
-
 @register(ast.Call)
 def visit_Call(
         state: State,
@@ -68,11 +48,12 @@
         parent: ast.AST,
 ) -> Iterable[Tuple[Offset, TokenFunc]]:
     if (
-            _func_condition(node.func) and
+            isinstance(node.func, ast.Name) and
+            node.func.id in ALLOWED_FUNCS and
             node.args and
             isinstance(node.args[0], ast.ListComp)
     ):
         if len(node.args) == 1 and not node.keywords:
             yield ast_to_offset(node.args[0]), _delete_list_comp_brackets
         else:
-            yield ast_to_offset(node.args[0]), _replace_list_comp_brackets
+            yield ast_to_offset(node.args[0]), replace_list_comp_brackets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyupgrade-2.18.3/pyupgrade/_plugins/metaclass_type.py 
new/pyupgrade-2.19.4/pyupgrade/_plugins/metaclass_type.py
--- old/pyupgrade-2.18.3/pyupgrade/_plugins/metaclass_type.py   2021-05-25 
04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/pyupgrade/_plugins/metaclass_type.py   2021-06-11 
16:50:16.000000000 +0200
@@ -15,7 +15,7 @@
 
 def _remove_metaclass_type(i: int, tokens: List[Token]) -> None:
     j = find_end(tokens, i)
-    del tokens[i:j + 1]
+    del tokens[i:j]
 
 
 @register(ast.Assign)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyupgrade-2.18.3/pyupgrade/_plugins/open_mode.py 
new/pyupgrade-2.19.4/pyupgrade/_plugins/open_mode.py
--- old/pyupgrade-2.18.3/pyupgrade/_plugins/open_mode.py        2021-05-25 
04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/pyupgrade/_plugins/open_mode.py        2021-06-11 
16:50:16.000000000 +0200
@@ -34,7 +34,7 @@
     func_args, end = parse_call_args(tokens, j)
     mode = tokens_to_src(tokens[slice(*func_args[arg_idx])])
     mode_stripped = mode.split('=')[-1]
-    mode_stripped = mode_stripped.strip().strip('"\'')
+    mode_stripped = ast.literal_eval(mode_stripped.strip())
     if mode_stripped in U_MODE_REMOVE:
         delete_argument(arg_idx, tokens, func_args)
     elif mode_stripped in U_MODE_REPLACE_R:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyupgrade-2.18.3/pyupgrade/_plugins/unpacking_argument_list_comprehensions.py
 
new/pyupgrade-2.19.4/pyupgrade/_plugins/unpacking_argument_list_comprehensions.py
--- 
old/pyupgrade-2.18.3/pyupgrade/_plugins/unpacking_argument_list_comprehensions.py
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyupgrade-2.19.4/pyupgrade/_plugins/unpacking_argument_list_comprehensions.py
   2021-06-11 16:50:16.000000000 +0200
@@ -0,0 +1,24 @@
+import ast
+from typing import Iterable
+from typing import Tuple
+
+from tokenize_rt import Offset
+
+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 replace_list_comp_brackets
+
+
+@register(ast.Starred)
+def visit_Starred(
+        state: State,
+        node: ast.Starred,
+        parent: ast.AST,
+) -> Iterable[Tuple[Offset, TokenFunc]]:
+    if (
+        state.settings.min_version >= (3,) and
+        isinstance(node.value, ast.ListComp)
+    ):
+        yield ast_to_offset(node.value), replace_list_comp_brackets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyupgrade-2.18.3/pyupgrade/_token_helpers.py 
new/pyupgrade-2.19.4/pyupgrade/_token_helpers.py
--- old/pyupgrade-2.18.3/pyupgrade/_token_helpers.py    2021-05-25 
04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/pyupgrade/_token_helpers.py    2021-06-11 
16:50:16.000000000 +0200
@@ -218,7 +218,10 @@
                 tokens[i] = tokens[i]._replace(src=tokens[i].src[diff:])
 
     def replace_condition(self, tokens: List[Token], new: List[Token]) -> None:
-        tokens[self.start:self.colon] = new
+        start = self.start
+        while tokens[start].name == 'UNIMPORTANT_WS':
+            start += 1
+        tokens[start:self.colon] = new
 
     def _trim_end(self, tokens: List[Token]) -> 'Block':
         """the tokenizer reports the end of the block at the beginning of
@@ -474,3 +477,10 @@
         return i
     else:  # pragma: no cover (<py38)
         return i
+
+
+def replace_list_comp_brackets(i: int, tokens: List[Token]) -> None:
+    start = find_comprehension_opening_bracket(i, tokens)
+    end = find_closing_bracket(tokens, start)
+    tokens[end] = Token('OP', ')')
+    tokens[start] = Token('OP', '(')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyupgrade-2.18.3/setup.cfg 
new/pyupgrade-2.19.4/setup.cfg
--- old/pyupgrade-2.18.3/setup.cfg      2021-05-25 04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/setup.cfg      2021-06-11 16:50:16.000000000 +0200
@@ -1,6 +1,6 @@
 [metadata]
 name = pyupgrade
-version = 2.18.3
+version = 2.19.4
 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.18.3/tests/features/binary_literals_test.py 
new/pyupgrade-2.19.4/tests/features/binary_literals_test.py
--- old/pyupgrade-2.18.3/tests/features/binary_literals_test.py 2021-05-25 
04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/tests/features/binary_literals_test.py 2021-06-11 
16:50:16.000000000 +0200
@@ -21,6 +21,7 @@
         'x.encode()',
         # the codec / string is an f-string
         'str.encode(f"{c}")', '"foo".encode(f"{c}")',
+        pytest.param('wat.encode(b"unrelated")', id='unrelated .encode(...)'),
     ),
 )
 def test_binary_literals_noop(s):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyupgrade-2.18.3/tests/features/generator_expressions_pep289_test.py 
new/pyupgrade-2.19.4/tests/features/generator_expressions_pep289_test.py
--- old/pyupgrade-2.18.3/tests/features/generator_expressions_pep289_test.py    
2021-05-25 04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/tests/features/generator_expressions_pep289_test.py    
2021-06-11 16:50:16.000000000 +0200
@@ -16,9 +16,13 @@
             id='Non-supported function',
         ),
         pytest.param('frozenset()', id='no arguments'),
+        pytest.param(
+            '"".join([[i for _ in range(2)] for i in range(3)])\n',
+            id='string join (left alone for perf reasons)',
+        ),
     ),
 )
-def test_fix_typing_text_noop(s):
+def test_fix_generator_expressions_noop(s):
     assert _fix_plugins(s, settings=Settings()) == s
 
 
@@ -72,16 +76,9 @@
             id='Nested list comprehension\n',
         ),
         pytest.param(
-            '"".join([[i for _ in range(2)] for i in range(3)])\n',
-
-            '"".join([i for _ in range(2)] for i in range(3))\n',
+            'sum([[i for _ in range(2)] for i in range(3)],)\n',
 
-            id='Join function',
-        ),
-        pytest.param(
-            '"".join([[i for _ in range(2)] for i in range(3)],)\n',
-
-            '"".join([i for _ in range(2)] for i in range(3))\n',
+            'sum([i for _ in range(2)] for i in range(3))\n',
 
             id='Trailing comma after list comprehension',
         ),
@@ -102,6 +99,6 @@
         ),
     ),
 )
-def test_fix_typing_text(s, expected):
+def test_fix_generator_expressions(s, expected):
     ret = _fix_plugins(s, settings=Settings())
     assert ret == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyupgrade-2.18.3/tests/features/metaclass_type_test.py 
new/pyupgrade-2.19.4/tests/features/metaclass_type_test.py
--- old/pyupgrade-2.18.3/tests/features/metaclass_type_test.py  2021-05-25 
04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/tests/features/metaclass_type_test.py  2021-06-11 
16:50:16.000000000 +0200
@@ -52,6 +52,12 @@
             '',
             id='module-scope assignment across newline',
         ),
+        pytest.param(
+            '__metaclass__ = type\n'
+            'a = 1\n',
+            'a = 1\n',
+            id='replace with code after it',
+        ),
     ),
 )
 def test_fix_metaclass_type_assignment(s, expected):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pyupgrade-2.18.3/tests/features/open_mode_test.py 
new/pyupgrade-2.19.4/tests/features/open_mode_test.py
--- old/pyupgrade-2.18.3/tests/features/open_mode_test.py       2021-05-25 
04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/tests/features/open_mode_test.py       2021-06-11 
16:50:16.000000000 +0200
@@ -62,6 +62,7 @@
             'open(mode="r", encoding="UTF-8", file="t.py")',
             'open(encoding="UTF-8", file="t.py")',
         ),
+        pytest.param('open(f, u"r")', 'open(f)', id='string with u flag'),
     ),
 )
 def test_fix_open_mode(s, expected):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyupgrade-2.18.3/tests/features/unpacking_argument_list_comprehensions_test.py
 
new/pyupgrade-2.19.4/tests/features/unpacking_argument_list_comprehensions_test.py
--- 
old/pyupgrade-2.18.3/tests/features/unpacking_argument_list_comprehensions_test.py
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/pyupgrade-2.19.4/tests/features/unpacking_argument_list_comprehensions_test.py
  2021-06-11 16:50:16.000000000 +0200
@@ -0,0 +1,75 @@
+import pytest
+
+from pyupgrade._data import Settings
+from pyupgrade._main import _fix_plugins
+
+
[email protected](
+    ('s', 'version'),
+    (
+        pytest.param(
+            'foo(*[i for i in bar])\n',
+            (2, 7),
+            id='Not Python3+',
+        ),
+        pytest.param(
+            '2*3',
+            (3,),
+            id='Multiplication star',
+        ),
+        pytest.param(
+            '2**3',
+            (3,),
+            id='Power star',
+        ),
+        pytest.param(
+            'foo([i for i in bar])',
+            (3,),
+            id='List comp, no star',
+        ),
+        pytest.param(
+            'foo(*bar)',
+            (3,),
+            id='Starred, no list comp',
+        ),
+    ),
+)
+def test_fix_unpack_argument_list_comp_noop(s, version):
+    assert _fix_plugins(s, settings=Settings(min_version=version)) == s
+
+
[email protected](
+    ('s', 'expected'),
+    (
+        pytest.param(
+            'foo(*[i for i in bar])\n',
+
+            'foo(*(i for i in bar))\n',
+
+            id='Starred list comprehension',
+        ),
+        pytest.param(
+            'foo(\n'
+            '    *\n'
+            '        [i for i in bar]\n'
+            '    )\n',
+
+            'foo(\n'
+            '    *\n'
+            '        (i for i in bar)\n'
+            '    )\n',
+
+            id='Multiline starred list comprehension',
+        ),
+        pytest.param(
+            'foo(*[i for i in bar], qux, quox=None)\n',
+
+            'foo(*(i for i in bar), qux, quox=None)\n',
+
+            id='Single line, including other args',
+        ),
+    ),
+)
+def test_fix_unpack_argument_list_comp(s, expected):
+    ret = _fix_plugins(s, settings=Settings((3,)))
+    assert ret == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pyupgrade-2.18.3/tests/features/versioned_branches_test.py 
new/pyupgrade-2.19.4/tests/features/versioned_branches_test.py
--- old/pyupgrade-2.18.3/tests/features/versioned_branches_test.py      
2021-05-25 04:35:17.000000000 +0200
+++ new/pyupgrade-2.19.4/tests/features/versioned_branches_test.py      
2021-06-11 16:50:16.000000000 +0200
@@ -415,6 +415,21 @@
 
             id='elif six.PY3 no else',
         ),
+        pytest.param(
+            'def f():\n'
+            '    if True:\n'
+            '        print(1)\n'
+            '    elif six.PY3:\n'
+            '        print(3)\n',
+
+            'def f():\n'
+            '    if True:\n'
+            '        print(1)\n'
+            '    else:\n'
+            '        print(3)\n',
+
+            id='elif six.PY3 no else, indented',
+        ),
     ),
 )
 def test_fix_py2_blocks(s, expected):

Reply via email to