Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-pyupgrade for
openSUSE:Leap:16.0 checked in at 2025-07-24 08:31:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:16.0/python-pyupgrade (Old)
and /work/SRC/openSUSE:Leap:16.0/.python-pyupgrade.new.8875 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pyupgrade"
Thu Jul 24 08:31:17 2025 rev:2 rq:1293740 version:3.19.1
Changes:
--------
--- /work/SRC/openSUSE:Leap:16.0/python-pyupgrade/python-pyupgrade.changes
2025-05-03 18:45:02.749755246 +0200
+++
/work/SRC/openSUSE:Leap:16.0/.python-pyupgrade.new.8875/python-pyupgrade.changes
2025-07-24 08:31:38.487404172 +0200
@@ -1,0 +2,8 @@
+Mon Apr 28 14:14:57 UTC 2025 - Dirk Müller <[email protected]>
+
+- update to 3.19.1:
+ * pyupgrade support for 3.13
+ * run pyupgrade on itself for removal of 3.13 deprecated
+ constructs
+
+-------------------------------------------------------------------
Old:
----
python-pyupgrade-3.17.0.tar.gz
New:
----
python-pyupgrade-3.19.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-pyupgrade.spec ++++++
--- /var/tmp/diff_new_pack.TzYaTM/_old 2025-07-24 08:31:38.767415814 +0200
+++ /var/tmp/diff_new_pack.TzYaTM/_new 2025-07-24 08:31:38.771415980 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-pyupgrade
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?sle15_python_module_pythons}
Name: python-pyupgrade
-Version: 3.17.0
+Version: 3.19.1
Release: 0
Summary: A tool to automatically upgrade syntax for newer versions
License: MIT
++++++ python-pyupgrade-3.17.0.tar.gz -> python-pyupgrade-3.19.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/.github/workflows/main.yml
new/pyupgrade-3.19.1/.github/workflows/main.yml
--- old/pyupgrade-3.17.0/.github/workflows/main.yml 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/.github/workflows/main.yml 2024-12-17
02:50:11.000000000 +0100
@@ -8,12 +8,12 @@
jobs:
main-windows:
- uses: asottile/workflows/.github/workflows/[email protected]
+ uses: asottile/workflows/.github/workflows/[email protected]
with:
env: '["py39"]'
os: windows-latest
main-linux:
- uses: asottile/workflows/.github/workflows/[email protected]
+ uses: asottile/workflows/.github/workflows/[email protected]
with:
env: '["py39", "py310", "py311", "py312"]'
os: ubuntu-latest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/.pre-commit-config.yaml
new/pyupgrade-3.19.1/.pre-commit-config.yaml
--- old/pyupgrade-3.17.0/.pre-commit-config.yaml 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/.pre-commit-config.yaml 2024-12-17
02:50:11.000000000 +0100
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.6.0
+ rev: v5.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
@@ -10,32 +10,32 @@
- id: name-tests-test
- id: requirements-txt-fixer
- repo: https://github.com/asottile/setup-cfg-fmt
- rev: v2.5.0
+ rev: v2.7.0
hooks:
- id: setup-cfg-fmt
- repo: https://github.com/asottile/reorder-python-imports
- rev: v3.13.0
+ rev: v3.14.0
hooks:
- id: reorder-python-imports
- args: [--py38-plus, --add-import, 'from __future__ import annotations']
+ args: [--py39-plus, --add-import, 'from __future__ import annotations']
- repo: https://github.com/asottile/add-trailing-comma
rev: v3.1.0
hooks:
- id: add-trailing-comma
- repo: https://github.com/asottile/pyupgrade
- rev: v3.17.0
+ rev: v3.19.1
hooks:
- id: pyupgrade
- args: [--py38-plus]
+ args: [--py39-plus]
- repo: https://github.com/hhatto/autopep8
rev: v2.3.1
hooks:
- id: autopep8
- repo: https://github.com/PyCQA/flake8
- rev: 7.1.0
+ rev: 7.1.1
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-mypy
- rev: v1.11.0
+ rev: v1.13.0
hooks:
- id: mypy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/README.md
new/pyupgrade-3.19.1/README.md
--- old/pyupgrade-3.17.0/README.md 2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/README.md 2024-12-17 02:50:11.000000000 +0100
@@ -21,7 +21,7 @@
```yaml
- repo: https://github.com/asottile/pyupgrade
- rev: v3.17.0
+ rev: v3.19.1
hooks:
- id: pyupgrade
```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_ast_helpers.py
new/pyupgrade-3.19.1/pyupgrade/_ast_helpers.py
--- old/pyupgrade-3.17.0/pyupgrade/_ast_helpers.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_ast_helpers.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import warnings
-from typing import Container
+from collections.abc import Container
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_data.py
new/pyupgrade-3.19.1/pyupgrade/_data.py
--- old/pyupgrade-3.17.0/pyupgrade/_data.py 2024-07-28 20:38:58.000000000
+0200
+++ new/pyupgrade-3.19.1/pyupgrade/_data.py 2024-12-17 02:50:11.000000000
+0100
@@ -3,12 +3,10 @@
import ast
import collections
import pkgutil
+from collections.abc import Iterable
from typing import Callable
-from typing import Iterable
-from typing import List
from typing import NamedTuple
from typing import Protocol
-from typing import Tuple
from typing import TypeVar
from tokenize_rt import Offset
@@ -16,7 +14,7 @@
from pyupgrade import _plugins
-Version = Tuple[int, ...]
+Version = tuple[int, ...]
class Settings(NamedTuple):
@@ -33,8 +31,8 @@
AST_T = TypeVar('AST_T', bound=ast.AST)
-TokenFunc = Callable[[int, List[Token]], None]
-ASTFunc = Callable[[State, AST_T, ast.AST], Iterable[Tuple[Offset, TokenFunc]]]
+TokenFunc = Callable[[int, list[Token]], None]
+ASTFunc = Callable[[State, AST_T, ast.AST], Iterable[tuple[Offset, TokenFunc]]]
RECORD_FROM_IMPORTS = frozenset((
'__future__',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_main.py
new/pyupgrade-3.19.1/pyupgrade/_main.py
--- old/pyupgrade-3.17.0/pyupgrade/_main.py 2024-07-28 20:38:58.000000000
+0200
+++ new/pyupgrade-3.19.1/pyupgrade/_main.py 2024-12-17 02:50:11.000000000
+0100
@@ -5,8 +5,8 @@
import re
import sys
import tokenize
-from typing import Match
-from typing import Sequence
+from collections.abc import Sequence
+from re import Match
from tokenize_rt import NON_CODING_TOKENS
from tokenize_rt import parse_string_literal
@@ -378,6 +378,10 @@
'--py312-plus',
action='store_const', dest='min_version', const=(3, 12),
)
+ parser.add_argument(
+ '--py313-plus',
+ action='store_const', dest='min_version', const=(3, 13),
+ )
args = parser.parse_args(argv)
ret = 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/collections_abc.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/collections_abc.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/collections_abc.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/collections_abc.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/constant_fold.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/constant_fold.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/constant_fold.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/constant_fold.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/datetime_utc_alias.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/datetime_utc_alias.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/datetime_utc_alias.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/datetime_utc_alias.py
2024-12-17 02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/defauldict_lambda.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/defauldict_lambda.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/defauldict_lambda.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/defauldict_lambda.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,81 +0,0 @@
-from __future__ import annotations
-
-import ast
-import functools
-from typing import Iterable
-
-from tokenize_rt import Offset
-from tokenize_rt import Token
-
-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_op
-from pyupgrade._token_helpers import parse_call_args
-
-
-def _eligible_lambda_replacement(lambda_expr: ast.Lambda) -> str | None:
- if isinstance(lambda_expr.body, ast.Constant):
- if lambda_expr.body.value == 0:
- return type(lambda_expr.body.value).__name__
- elif lambda_expr.body.value == '':
- return 'str'
- else:
- return None
- elif isinstance(lambda_expr.body, ast.List) and not lambda_expr.body.elts:
- return 'list'
- elif isinstance(lambda_expr.body, ast.Tuple) and not lambda_expr.body.elts:
- return 'tuple'
- elif isinstance(lambda_expr.body, ast.Dict) and not lambda_expr.body.keys:
- return 'dict'
- elif (
- isinstance(lambda_expr.body, ast.Call) and
- isinstance(lambda_expr.body.func, ast.Name) and
- not lambda_expr.body.args and
- not lambda_expr.body.keywords and
- lambda_expr.body.func.id in {'dict', 'list', 'set', 'tuple'}
- ):
- return lambda_expr.body.func.id
- else:
- return None
-
-
-def _fix_defaultdict_first_arg(
- i: int,
- tokens: list[Token],
- *,
- replacement: str,
-) -> None:
- start = find_op(tokens, i, '(')
- func_args, end = parse_call_args(tokens, start)
-
- tokens[slice(*func_args[0])] = [Token('CODE', replacement)]
-
-
-@register(ast.Call)
-def visit_Call(
- state: State,
- node: ast.Call,
- parent: ast.AST,
-) -> Iterable[tuple[Offset, TokenFunc]]:
- if (
- is_name_attr(
- node.func,
- state.from_imports,
- ('collections',),
- ('defaultdict',),
- ) and
- node.args and
- isinstance(node.args[0], ast.Lambda)
- ):
- replacement = _eligible_lambda_replacement(node.args[0])
- if replacement is None:
- return
-
- func = functools.partial(
- _fix_defaultdict_first_arg,
- replacement=replacement,
- )
- yield ast_to_offset(node), func
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/default_encoding.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/default_encoding.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/default_encoding.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/default_encoding.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
@@ -12,12 +12,12 @@
from pyupgrade._data import State
from pyupgrade._data import TokenFunc
from pyupgrade._string_helpers import is_codec
+from pyupgrade._token_helpers import find_call
from pyupgrade._token_helpers import find_closing_bracket
-from pyupgrade._token_helpers import find_op
def _fix_default_encoding(i: int, tokens: list[Token]) -> None:
- i = find_op(tokens, i + 1, '(')
+ i = find_call(tokens, i + 1)
j = find_closing_bracket(tokens, i)
del tokens[i + 1:j]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/defaultdict_lambda.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/defaultdict_lambda.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/defaultdict_lambda.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/defaultdict_lambda.py
2024-12-17 02:50:11.000000000 +0100
@@ -0,0 +1,81 @@
+from __future__ import annotations
+
+import ast
+import functools
+from collections.abc import Iterable
+
+from tokenize_rt import Offset
+from tokenize_rt import Token
+
+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_op
+from pyupgrade._token_helpers import parse_call_args
+
+
+def _eligible_lambda_replacement(lambda_expr: ast.Lambda) -> str | None:
+ if isinstance(lambda_expr.body, ast.Constant):
+ if lambda_expr.body.value == 0:
+ return type(lambda_expr.body.value).__name__
+ elif lambda_expr.body.value == '':
+ return 'str'
+ else:
+ return None
+ elif isinstance(lambda_expr.body, ast.List) and not lambda_expr.body.elts:
+ return 'list'
+ elif isinstance(lambda_expr.body, ast.Tuple) and not lambda_expr.body.elts:
+ return 'tuple'
+ elif isinstance(lambda_expr.body, ast.Dict) and not lambda_expr.body.keys:
+ return 'dict'
+ elif (
+ isinstance(lambda_expr.body, ast.Call) and
+ isinstance(lambda_expr.body.func, ast.Name) and
+ not lambda_expr.body.args and
+ not lambda_expr.body.keywords and
+ lambda_expr.body.func.id in {'dict', 'list', 'set', 'tuple'}
+ ):
+ return lambda_expr.body.func.id
+ else:
+ return None
+
+
+def _fix_defaultdict_first_arg(
+ i: int,
+ tokens: list[Token],
+ *,
+ replacement: str,
+) -> None:
+ start = find_op(tokens, i, '(')
+ func_args, end = parse_call_args(tokens, start)
+
+ tokens[slice(*func_args[0])] = [Token('CODE', replacement)]
+
+
+@register(ast.Call)
+def visit_Call(
+ state: State,
+ node: ast.Call,
+ parent: ast.AST,
+) -> Iterable[tuple[Offset, TokenFunc]]:
+ if (
+ is_name_attr(
+ node.func,
+ state.from_imports,
+ ('collections',),
+ ('defaultdict',),
+ ) and
+ node.args and
+ isinstance(node.args[0], ast.Lambda)
+ ):
+ replacement = _eligible_lambda_replacement(node.args[0])
+ if replacement is None:
+ return
+
+ func = functools.partial(
+ _fix_defaultdict_first_arg,
+ replacement=replacement,
+ )
+ yield ast_to_offset(node), func
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/dict_literals.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/dict_literals.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/dict_literals.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/dict_literals.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
@@ -53,6 +53,7 @@
parent: ast.AST,
) -> Iterable[tuple[Offset, TokenFunc]]:
if (
+ not isinstance(parent, ast.FormattedValue) and
isinstance(node.func, ast.Name) and
node.func.id == 'dict' and
len(node.args) == 1 and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/exceptions.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/exceptions.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/exceptions.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/exceptions.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from typing import NamedTuple
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/format_locals.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/format_locals.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/format_locals.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/format_locals.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import rfind_string_parts
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/fstrings.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/fstrings.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/fstrings.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/fstrings.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import parse_string_literal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/identity_equality.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/identity_equality.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/identity_equality.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/identity_equality.py
2024-12-17 02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/imports.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/imports.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/imports.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/imports.py 2024-12-17
02:50:11.000000000 +0100
@@ -4,8 +4,8 @@
import bisect
import collections
import functools
-from typing import Iterable
-from typing import Mapping
+from collections.abc import Iterable
+from collections.abc import Mapping
from typing import NamedTuple
from tokenize_rt import Offset
@@ -21,7 +21,7 @@
from pyupgrade._token_helpers import indented_amount
# GENERATED VIA generate-imports
-# Using reorder-python-imports==3.13.0
+# Using reorder-python-imports==3.14.0
REMOVALS = {
(3,): {
'__future__': {
@@ -223,6 +223,23 @@
('typing_extensions', 'dataclass_transform'): 'typing',
('typing_extensions', 'override'): 'typing',
},
+ (3, 13): {
+ ('typing_extensions', 'AsyncContextManager'): 'typing',
+ ('typing_extensions', 'AsyncGenerator'): 'typing',
+ ('typing_extensions', 'ContextManager'): 'typing',
+ ('typing_extensions', 'Generator'): 'typing',
+ ('typing_extensions', 'NoDefault'): 'typing',
+ ('typing_extensions', 'ParamSpec'): 'typing',
+ ('typing_extensions', 'Protocol'): 'typing',
+ ('typing_extensions', 'ReadOnly'): 'typing',
+ ('typing_extensions', 'TypeIs'): 'typing',
+ ('typing_extensions', 'TypeVar'): 'typing',
+ ('typing_extensions', 'TypeVarTuple'): 'typing',
+ ('typing_extensions', 'TypedDict'): 'typing',
+ ('typing_extensions', 'get_protocol_members'): 'typing',
+ ('typing_extensions', 'is_protocol'): 'typing',
+ ('typing_extensions', 'runtime_checkable'): 'typing',
+ },
}
REPLACE_MODS = {
'six.moves.BaseHTTPServer': 'http.server',
@@ -281,7 +298,7 @@
# END GENERATED
[email protected]_cache(maxsize=None)
[email protected]
def _for_version(
version: tuple[int, ...],
*,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/io_open.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/io_open.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/io_open.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/io_open.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/legacy.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/legacy.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/legacy.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/legacy.py 2024-12-17
02:50:11.000000000 +0100
@@ -4,9 +4,9 @@
import collections
import contextlib
import functools
+from collections.abc import Generator
+from collections.abc import Iterable
from typing import Any
-from typing import Generator
-from typing import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/lru_cache.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/lru_cache.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/lru_cache.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/lru_cache.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/metaclass_type.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/metaclass_type.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/metaclass_type.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/metaclass_type.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/mock.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/mock.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/mock.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/mock.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/native_literals.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/native_literals.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/native_literals.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/native_literals.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/new_style_classes.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/new_style_classes.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/new_style_classes.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/new_style_classes.py
2024-12-17 02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/open_mode.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/open_mode.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/open_mode.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/open_mode.py 2024-12-17
02:50:11.000000000 +0100
@@ -3,7 +3,7 @@
import ast
import functools
import itertools
-from typing import Iterable
+from collections.abc import Iterable
from typing import NamedTuple
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/percent_format.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/percent_format.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/percent_format.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/percent_format.py 2024-12-17
02:50:11.000000000 +0100
@@ -3,12 +3,11 @@
import ast
import functools
import re
-from typing import Generator
-from typing import Iterable
-from typing import Match
+from collections.abc import Generator
+from collections.abc import Iterable
+from re import Match
+from re import Pattern
from typing import Optional
-from typing import Pattern
-from typing import Tuple
from tokenize_rt import Offset
from tokenize_rt import Token
@@ -23,14 +22,14 @@
from pyupgrade._token_helpers import remove_brace
from pyupgrade._token_helpers import victims
-PercentFormatPart = Tuple[
+PercentFormatPart = tuple[
Optional[str],
Optional[str],
Optional[str],
Optional[str],
str,
]
-PercentFormat = Tuple[str, Optional[PercentFormatPart]]
+PercentFormat = tuple[str, Optional[PercentFormatPart]]
MAPPING_KEY_RE = re.compile(r'\(([^()]*)\)')
CONVERSION_FLAG_RE = re.compile('[#0+ -]*')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/set_literals.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/set_literals.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/set_literals.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/set_literals.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
@@ -50,6 +50,7 @@
parent: ast.AST,
) -> Iterable[tuple[Offset, TokenFunc]]:
if (
+ not isinstance(parent, ast.FormattedValue) and
isinstance(node.func, ast.Name) and
node.func.id == 'set' and
len(node.args) == 1 and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/shlex_join.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/shlex_join.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/shlex_join.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/shlex_join.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import NON_CODING_TOKENS
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/six_base_classes.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/six_base_classes.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/six_base_classes.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/six_base_classes.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/six_calls.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/six_calls.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/six_calls.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/six_calls.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/six_metaclasses.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/six_metaclasses.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/six_metaclasses.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/six_metaclasses.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import NON_CODING_TOKENS
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/six_remove_decorators.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/six_remove_decorators.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/six_remove_decorators.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/six_remove_decorators.py
2024-12-17 02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/six_simple.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/six_simple.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/six_simple.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/six_simple.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/subprocess_run.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/subprocess_run.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/subprocess_run.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/subprocess_run.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/type_of_primitive.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/type_of_primitive.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/type_of_primitive.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/type_of_primitive.py
2024-12-17 02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_classes.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_classes.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_classes.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_classes.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep563.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep563.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep563.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep563.py 2024-12-17
02:50:11.000000000 +0100
@@ -3,8 +3,8 @@
import ast
import functools
import sys
-from typing import Iterable
-from typing import Sequence
+from collections.abc import Iterable
+from collections.abc import Sequence
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep585.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep585.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep585.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep585.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep604.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep604.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep604.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep604.py 2024-12-17
02:50:11.000000000 +0100
@@ -3,7 +3,7 @@
import ast
import functools
import sys
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import NON_CODING_TOKENS
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep646_unpack.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep646_unpack.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep646_unpack.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep646_unpack.py
2024-12-17 02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep696_typevar_defaults.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep696_typevar_defaults.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_pep696_typevar_defaults.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_pep696_typevar_defaults.py
2024-12-17 02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_text.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_text.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/typing_text.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/typing_text.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/unittest_aliases.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/unittest_aliases.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/unittest_aliases.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/unittest_aliases.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,7 +2,7 @@
import ast
import functools
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/unpack_list_comprehension.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/unpack_list_comprehension.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/unpack_list_comprehension.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/unpack_list_comprehension.py
2024-12-17 02:50:11.000000000 +0100
@@ -1,7 +1,7 @@
from __future__ import annotations
import ast
-from typing import Iterable
+from collections.abc import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/pyupgrade/_plugins/versioned_branches.py
new/pyupgrade-3.19.1/pyupgrade/_plugins/versioned_branches.py
--- old/pyupgrade-3.17.0/pyupgrade/_plugins/versioned_branches.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_plugins/versioned_branches.py
2024-12-17 02:50:11.000000000 +0100
@@ -1,8 +1,8 @@
from __future__ import annotations
import ast
+from collections.abc import Iterable
from typing import cast
-from typing import Iterable
from tokenize_rt import Offset
from tokenize_rt import Token
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_string_helpers.py
new/pyupgrade-3.19.1/pyupgrade/_string_helpers.py
--- old/pyupgrade-3.17.0/pyupgrade/_string_helpers.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_string_helpers.py 2024-12-17
02:50:11.000000000 +0100
@@ -1,14 +1,13 @@
from __future__ import annotations
import codecs
-import re
import string
from typing import Optional
-from typing import Tuple
-NAMED_UNICODE_RE = re.compile(r'(?<!\\)(?:\\\\)*(\\N\{[^}]+\})')
+from tokenize_rt import curly_escape
+from tokenize_rt import NAMED_UNICODE_RE
-DotFormatPart = Tuple[str, Optional[str], Optional[str], Optional[str]]
+DotFormatPart = tuple[str, Optional[str], Optional[str], Optional[str]]
_stdlib_parse_format = string.Formatter().parse
@@ -54,16 +53,6 @@
return ''.join(_convert_tup(tup) for tup in parsed)
-def curly_escape(s: str) -> str:
- parts = NAMED_UNICODE_RE.split(s)
- return ''.join(
- part.replace('{', '{{').replace('}', '}}')
- if not NAMED_UNICODE_RE.fullmatch(part)
- else part
- for part in parts
- )
-
-
def is_codec(encoding: str, name: str) -> bool:
try:
return codecs.lookup(encoding).name == name
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/pyupgrade/_token_helpers.py
new/pyupgrade-3.19.1/pyupgrade/_token_helpers.py
--- old/pyupgrade-3.17.0/pyupgrade/_token_helpers.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/pyupgrade/_token_helpers.py 2024-12-17
02:50:11.000000000 +0100
@@ -2,8 +2,8 @@
import ast
import keyword
+from collections.abc import Sequence
from typing import NamedTuple
-from typing import Sequence
from tokenize_rt import NON_CODING_TOKENS
from tokenize_rt import Token
@@ -48,6 +48,20 @@
return _find_token(tokens, i, 'OP', src)
+def find_call(tokens: list[Token], i: int) -> int:
+ depth = 0
+ while depth or not tokens[i].matches(name='OP', src='('):
+ if is_open(tokens[i]): # pragma: >3.12 cover
+ depth += 1
+ elif is_close(tokens[i]):
+ # why max(...)? --
+ # ("something").method(...)
+ # ^--start target--^
+ depth = max(depth - 1, 0)
+ i += 1
+ return i
+
+
def find_end(tokens: list[Token], i: int) -> int:
while tokens[i].name != 'NEWLINE':
i += 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/setup.cfg
new/pyupgrade-3.19.1/setup.cfg
--- old/pyupgrade-3.17.0/setup.cfg 2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/setup.cfg 2024-12-17 02:50:11.000000000 +0100
@@ -1,6 +1,6 @@
[metadata]
name = pyupgrade
-version = 3.17.0
+version = 3.19.1
description = A tool to automatically upgrade syntax for newer versions.
long_description = file: README.md
long_description_content_type = text/markdown
@@ -19,7 +19,7 @@
[options]
packages = find:
install_requires =
- tokenize-rt>=5.2.0
+ tokenize-rt>=6.1.0
python_requires = >=3.9
[options.packages.find]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/tests/features/defauldict_lambda_test.py
new/pyupgrade-3.19.1/tests/features/defauldict_lambda_test.py
--- old/pyupgrade-3.17.0/tests/features/defauldict_lambda_test.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/tests/features/defauldict_lambda_test.py
1970-01-01 01:00:00.000000000 +0100
@@ -1,220 +0,0 @@
-from __future__ import annotations
-
-import pytest
-
-from pyupgrade._data import Settings
-from pyupgrade._main import _fix_plugins
-
-
[email protected](
- ('s',),
- (
- pytest.param(
- 'from collections import defaultdict as dd\n\n'
- 'dd(lambda: set())\n',
- id='not following as imports',
- ),
- pytest.param(
- 'from collections2 import defaultdict\n\n'
- 'dd(lambda: dict())\n',
- id='not following unknown import',
- ),
- pytest.param(
- 'from .collections import defaultdict\n'
- 'defaultdict(lambda: list())\n',
- id='relative imports',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: {1}))\n',
- id='non empty set',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: [1]))\n'
- 'defaultdict(lambda: list([1])))\n',
- id='non empty list',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: {1: 2})\n',
- id='non empty dict, literal',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: dict([(1,2),])))\n',
- id='non empty dict, call with args',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: dict(a=[1]))\n',
- id='non empty dict, call with kwargs',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: (1,))\n',
- id='non empty tuple, literal',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: tuple([1]))\n',
- id='non empty tuple, calls with arg',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: "AAA")\n'
- 'defaultdict(lambda: \'BBB\')\n',
- id='non empty string',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: 10)\n'
- 'defaultdict(lambda: -2)\n',
- id='non zero integer',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: 0.2)\n'
- 'defaultdict(lambda: 0.00000001)\n'
- 'defaultdict(lambda: -2.3)\n',
- id='non zero float',
- ),
- pytest.param(
- 'import collections\n'
- 'collections.defaultdict(lambda: None)\n',
- id='lambda: None is not equivalent to defaultdict()',
- ),
- ),
-)
-def test_fix_noop(s):
- assert _fix_plugins(s, settings=Settings()) == s
-
-
[email protected](
- ('s', 'expected'),
- (
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: set())\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(set)\n',
- id='call with attr, set()',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: list())\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(list)\n',
- id='call with attr, list()',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: dict())\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(dict)\n',
- id='call with attr, dict()',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: tuple())\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(tuple)\n',
- id='call with attr, tuple()',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: [])\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(list)\n',
- id='call with attr, []',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: {})\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(dict)\n',
- id='call with attr, {}',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: ())\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(tuple)\n',
- id='call with attr, ()',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: "")\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(str)\n',
- id='call with attr, empty string (double quote)',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: \'\')\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(str)\n',
- id='call with attr, empty string (single quote)',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: 0)\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(int)\n',
- id='call with attr, int',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: 0.0)\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(float)\n',
- id='call with attr, float',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: 0.0000)\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(float)\n',
- id='call with attr, long float',
- ),
- pytest.param(
- 'from collections import defaultdict\n\n'
- 'defaultdict(lambda: [], {1: []})\n',
- 'from collections import defaultdict\n\n'
- 'defaultdict(list, {1: []})\n',
- id='defauldict with kwargs',
- ),
- pytest.param(
- 'import collections\n\n'
- 'collections.defaultdict(lambda: set())\n'
- 'collections.defaultdict(lambda: list())\n'
- 'collections.defaultdict(lambda: dict())\n'
- 'collections.defaultdict(lambda: tuple())\n'
- 'collections.defaultdict(lambda: [])\n'
- 'collections.defaultdict(lambda: {})\n'
- 'collections.defaultdict(lambda: "")\n'
- 'collections.defaultdict(lambda: \'\')\n'
- 'collections.defaultdict(lambda: 0)\n'
- 'collections.defaultdict(lambda: 0.0)\n'
- 'collections.defaultdict(lambda: 0.00000)\n'
- 'collections.defaultdict(lambda: 0j)\n',
- 'import collections\n\n'
- 'collections.defaultdict(set)\n'
- 'collections.defaultdict(list)\n'
- 'collections.defaultdict(dict)\n'
- 'collections.defaultdict(tuple)\n'
- 'collections.defaultdict(list)\n'
- 'collections.defaultdict(dict)\n'
- 'collections.defaultdict(str)\n'
- 'collections.defaultdict(str)\n'
- 'collections.defaultdict(int)\n'
- 'collections.defaultdict(float)\n'
- 'collections.defaultdict(float)\n'
- 'collections.defaultdict(complex)\n',
- id='call with attr',
- ),
- ),
-)
-def test_fix_defaultdict(s, expected):
- ret = _fix_plugins(s, settings=Settings())
- assert ret == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/tests/features/default_encoding_test.py
new/pyupgrade-3.19.1/tests/features/default_encoding_test.py
--- old/pyupgrade-3.17.0/tests/features/default_encoding_test.py
2024-07-28 20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/tests/features/default_encoding_test.py
2024-12-17 02:50:11.000000000 +0100
@@ -38,6 +38,11 @@
'f"{x}(".encode()',
id='3.12+ handle open brace in fstring',
),
+ pytest.param(
+ 'f"{foo(bar)}(".encode("utf-8")',
+ 'f"{foo(bar)}(".encode()',
+ id='f-string with function call',
+ ),
),
)
def test_fix_encode(s, expected):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/tests/features/defaultdict_lambda_test.py
new/pyupgrade-3.19.1/tests/features/defaultdict_lambda_test.py
--- old/pyupgrade-3.17.0/tests/features/defaultdict_lambda_test.py
1970-01-01 01:00:00.000000000 +0100
+++ new/pyupgrade-3.19.1/tests/features/defaultdict_lambda_test.py
2024-12-17 02:50:11.000000000 +0100
@@ -0,0 +1,220 @@
+from __future__ import annotations
+
+import pytest
+
+from pyupgrade._data import Settings
+from pyupgrade._main import _fix_plugins
+
+
[email protected](
+ ('s',),
+ (
+ pytest.param(
+ 'from collections import defaultdict as dd\n\n'
+ 'dd(lambda: set())\n',
+ id='not following as imports',
+ ),
+ pytest.param(
+ 'from collections2 import defaultdict\n\n'
+ 'dd(lambda: dict())\n',
+ id='not following unknown import',
+ ),
+ pytest.param(
+ 'from .collections import defaultdict\n'
+ 'defaultdict(lambda: list())\n',
+ id='relative imports',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: {1}))\n',
+ id='non empty set',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: [1]))\n'
+ 'defaultdict(lambda: list([1])))\n',
+ id='non empty list',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: {1: 2})\n',
+ id='non empty dict, literal',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: dict([(1,2),])))\n',
+ id='non empty dict, call with args',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: dict(a=[1]))\n',
+ id='non empty dict, call with kwargs',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: (1,))\n',
+ id='non empty tuple, literal',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: tuple([1]))\n',
+ id='non empty tuple, calls with arg',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: "AAA")\n'
+ 'defaultdict(lambda: \'BBB\')\n',
+ id='non empty string',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: 10)\n'
+ 'defaultdict(lambda: -2)\n',
+ id='non zero integer',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: 0.2)\n'
+ 'defaultdict(lambda: 0.00000001)\n'
+ 'defaultdict(lambda: -2.3)\n',
+ id='non zero float',
+ ),
+ pytest.param(
+ 'import collections\n'
+ 'collections.defaultdict(lambda: None)\n',
+ id='lambda: None is not equivalent to defaultdict()',
+ ),
+ ),
+)
+def test_fix_noop(s):
+ assert _fix_plugins(s, settings=Settings()) == s
+
+
[email protected](
+ ('s', 'expected'),
+ (
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: set())\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(set)\n',
+ id='call with attr, set()',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: list())\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(list)\n',
+ id='call with attr, list()',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: dict())\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(dict)\n',
+ id='call with attr, dict()',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: tuple())\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(tuple)\n',
+ id='call with attr, tuple()',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: [])\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(list)\n',
+ id='call with attr, []',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: {})\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(dict)\n',
+ id='call with attr, {}',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: ())\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(tuple)\n',
+ id='call with attr, ()',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: "")\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(str)\n',
+ id='call with attr, empty string (double quote)',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: \'\')\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(str)\n',
+ id='call with attr, empty string (single quote)',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: 0)\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(int)\n',
+ id='call with attr, int',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: 0.0)\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(float)\n',
+ id='call with attr, float',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: 0.0000)\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(float)\n',
+ id='call with attr, long float',
+ ),
+ pytest.param(
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(lambda: [], {1: []})\n',
+ 'from collections import defaultdict\n\n'
+ 'defaultdict(list, {1: []})\n',
+ id='defauldict with kwargs',
+ ),
+ pytest.param(
+ 'import collections\n\n'
+ 'collections.defaultdict(lambda: set())\n'
+ 'collections.defaultdict(lambda: list())\n'
+ 'collections.defaultdict(lambda: dict())\n'
+ 'collections.defaultdict(lambda: tuple())\n'
+ 'collections.defaultdict(lambda: [])\n'
+ 'collections.defaultdict(lambda: {})\n'
+ 'collections.defaultdict(lambda: "")\n'
+ 'collections.defaultdict(lambda: \'\')\n'
+ 'collections.defaultdict(lambda: 0)\n'
+ 'collections.defaultdict(lambda: 0.0)\n'
+ 'collections.defaultdict(lambda: 0.00000)\n'
+ 'collections.defaultdict(lambda: 0j)\n',
+ 'import collections\n\n'
+ 'collections.defaultdict(set)\n'
+ 'collections.defaultdict(list)\n'
+ 'collections.defaultdict(dict)\n'
+ 'collections.defaultdict(tuple)\n'
+ 'collections.defaultdict(list)\n'
+ 'collections.defaultdict(dict)\n'
+ 'collections.defaultdict(str)\n'
+ 'collections.defaultdict(str)\n'
+ 'collections.defaultdict(int)\n'
+ 'collections.defaultdict(float)\n'
+ 'collections.defaultdict(float)\n'
+ 'collections.defaultdict(complex)\n',
+ id='call with attr',
+ ),
+ ),
+)
+def test_fix_defaultdict(s, expected):
+ ret = _fix_plugins(s, settings=Settings())
+ assert ret == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/pyupgrade-3.17.0/tests/features/dict_literals_test.py
new/pyupgrade-3.19.1/tests/features/dict_literals_test.py
--- old/pyupgrade-3.17.0/tests/features/dict_literals_test.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/tests/features/dict_literals_test.py 2024-12-17
02:50:11.000000000 +0100
@@ -19,6 +19,10 @@
# Don't rewrite kwargd dicts
'dict(((a, b) for a, b in y), x=1)',
'dict(((a, b) for a, b in y), **kwargs)',
+ pytest.param(
+ 'f"{dict((a, b) for a, b in y)}"',
+ id='directly inside f-string placeholder',
+ ),
),
)
def test_fix_dict_noop(s):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/tests/features/set_literals_test.py
new/pyupgrade-3.19.1/tests/features/set_literals_test.py
--- old/pyupgrade-3.17.0/tests/features/set_literals_test.py 2024-07-28
20:38:58.000000000 +0200
+++ new/pyupgrade-3.19.1/tests/features/set_literals_test.py 2024-12-17
02:50:11.000000000 +0100
@@ -14,6 +14,14 @@
# Don't touch weird looking function calls -- use autopep8 or such
# first
'set ((1, 2))',
+ pytest.param(
+ 'f"{set((1, 2))}"',
+ id='set directly inside f-string placeholder',
+ ),
+ pytest.param(
+ 'f"{set(x for x in y)}"',
+ id='set comp directly inside f-string placeholder',
+ ),
),
)
def test_fix_sets_noop(s):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/pyupgrade-3.17.0/tests/main_test.py
new/pyupgrade-3.19.1/tests/main_test.py
--- old/pyupgrade-3.17.0/tests/main_test.py 2024-07-28 20:38:58.000000000
+0200
+++ new/pyupgrade-3.19.1/tests/main_test.py 2024-12-17 02:50:11.000000000
+0100
@@ -25,6 +25,8 @@
x=version_info
def f():
global x, y
+
+f'hello snowman: \\N{SNOWMAN}'
'''
f = tmpdir.join('f.py')
f.write(s)