diff --git a/coverage/annotate.py b/coverage/annotate.py index 46a82a81d..13d44b211 100644 --- a/coverage/annotate.py +++ b/coverage/annotate.py @@ -8,7 +8,8 @@ import os import re -from typing import Iterable, TYPE_CHECKING +from typing import TYPE_CHECKING +from collections.abc import Iterable from coverage.files import flat_rootname from coverage.misc import ensure_dir, isolate_module diff --git a/coverage/bytecode.py b/coverage/bytecode.py index 2cad4f9b2..764b29b80 100644 --- a/coverage/bytecode.py +++ b/coverage/bytecode.py @@ -6,7 +6,7 @@ from __future__ import annotations from types import CodeType -from typing import Iterator +from collections.abc import Iterator def code_objects(code: CodeType) -> Iterator[CodeType]: diff --git a/coverage/collector.py b/coverage/collector.py index 470d3a7e3..7f29f534e 100644 --- a/coverage/collector.py +++ b/coverage/collector.py @@ -12,8 +12,9 @@ from types import FrameType from typing import ( - cast, Any, Callable, Dict, List, Mapping, Set, TypeVar, + cast, Any, Callable, Dict, List, Set, TypeVar, ) +from collections.abc import Mapping from coverage import env from coverage.config import CoverageConfig @@ -420,7 +421,7 @@ def disable_plugin(self, disposition: TFileDisposition) -> None: plugin._coverage_enabled = False disposition.trace = False - @functools.lru_cache(maxsize=None) # pylint: disable=method-cache-max-size-none + @functools.cache # pylint: disable=method-cache-max-size-none def cached_mapped_file(self, filename: str) -> str: """A locally cached version of file names mapped through file_mapper.""" return self.file_mapper(filename) @@ -466,7 +467,7 @@ def flush_data(self) -> bool: # tracer.c:CTracer_record_pair for the C code that creates # these packed ints. arc_data: dict[str, list[TArc]] = {} - packed_data = cast(Dict[str, Set[int]], self.data) + packed_data = cast(dict[str, set[int]], self.data) # The list() here and in the inner loop are to get a clean copy # even as tracers are continuing to add data. @@ -482,10 +483,10 @@ def flush_data(self) -> bool: tuples.append((l1, l2)) arc_data[fname] = tuples else: - arc_data = cast(Dict[str, List[TArc]], self.data) + arc_data = cast(dict[str, list[TArc]], self.data) self.covdata.add_arcs(self.mapped_file_dict(arc_data)) else: - line_data = cast(Dict[str, Set[int]], self.data) + line_data = cast(dict[str, set[int]], self.data) self.covdata.add_lines(self.mapped_file_dict(line_data)) file_tracers = { diff --git a/coverage/config.py b/coverage/config.py index 1e799139c..357fc5af0 100644 --- a/coverage/config.py +++ b/coverage/config.py @@ -13,8 +13,9 @@ import re from typing import ( - Any, Callable, Iterable, Union, + Any, Callable, Union, ) +from collections.abc import Iterable from coverage.exceptions import ConfigError from coverage.misc import isolate_module, human_sorted_items, substitute_variables diff --git a/coverage/context.py b/coverage/context.py index 630d3d25a..977e9b4ef 100644 --- a/coverage/context.py +++ b/coverage/context.py @@ -6,7 +6,8 @@ from __future__ import annotations from types import FrameType -from typing import cast, Sequence +from typing import cast +from collections.abc import Sequence from coverage.types import TShouldStartContextFn diff --git a/coverage/control.py b/coverage/control.py index ca757e9e1..f5a633a25 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -21,8 +21,9 @@ from types import FrameType from typing import ( cast, - Any, Callable, IO, Iterable, Iterator, List, + Any, Callable, IO, List, ) +from collections.abc import Iterable, Iterator from coverage import env from coverage.annotate import AnnotateReporter @@ -784,7 +785,7 @@ def get_exclude_list(self, which: str = "exclude") -> list[str]: """ self._init() - return cast(List[str], getattr(self.config, which + "_list")) + return cast(list[str], getattr(self.config, which + "_list")) def save(self) -> None: """Save the collected coverage data to the data file.""" diff --git a/coverage/data.py b/coverage/data.py index f05568834..9baab8edd 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -17,7 +17,8 @@ import hashlib import os.path -from typing import Callable, Iterable +from typing import Callable +from collections.abc import Iterable from coverage.exceptions import CoverageException, NoDataError from coverage.files import PathAliases @@ -138,7 +139,7 @@ def combine_parallel_data( if aliases is None: map_path = None else: - map_path = functools.lru_cache(maxsize=None)(aliases.map) + map_path = functools.cache(aliases.map) file_hashes = set() combined_any = False diff --git a/coverage/debug.py b/coverage/debug.py index e4bed8b42..662d04bbd 100644 --- a/coverage/debug.py +++ b/coverage/debug.py @@ -21,8 +21,9 @@ from typing import ( overload, - Any, Callable, IO, Iterable, Iterator, Mapping, + Any, Callable, IO, ) +from collections.abc import Iterable, Iterator, Mapping from coverage.misc import human_sorted_items, isolate_module from coverage.types import AnyCallable, TWritable diff --git a/coverage/env.py b/coverage/env.py index bd5c39ec2..0f3a389d2 100644 --- a/coverage/env.py +++ b/coverage/env.py @@ -9,7 +9,8 @@ import platform import sys -from typing import Any, Iterable +from typing import Any +from collections.abc import Iterable # debug_info() at the bottom wants to show all the globals, but not imports. # Grab the global names here to know which names to not show. Nothing defined diff --git a/coverage/files.py b/coverage/files.py index 13ca9a3fe..7c59de43d 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -13,7 +13,8 @@ import re import sys -from typing import Callable, Iterable +from typing import Callable +from collections.abc import Iterable from coverage import env from coverage.exceptions import ConfigError diff --git a/coverage/html.py b/coverage/html.py index 2ee3f7d6c..20a354b12 100644 --- a/coverage/html.py +++ b/coverage/html.py @@ -15,7 +15,8 @@ import string from dataclasses import dataclass, field -from typing import Any, Iterable, TYPE_CHECKING +from typing import Any, TYPE_CHECKING +from collections.abc import Iterable import coverage from coverage.data import CoverageData, add_data_to_hash @@ -201,7 +202,7 @@ def __init__(self, fr: FileReporter, analysis: Analysis) -> None: HTML_SAFE = string.ascii_letters + string.digits + "!#$%'()*+,-./:;=?@[]^_`{|}~" -@functools.lru_cache(maxsize=None) +@functools.cache def encode_int(n: int) -> str: """Create a short HTML-safe string from an integer, using HTML_SAFE.""" if n == 0: diff --git a/coverage/inorout.py b/coverage/inorout.py index 4df54b2b4..75f48dbd9 100644 --- a/coverage/inorout.py +++ b/coverage/inorout.py @@ -17,8 +17,9 @@ from types import FrameType, ModuleType from typing import ( - cast, Any, Iterable, TYPE_CHECKING, + cast, Any, TYPE_CHECKING, ) +from collections.abc import Iterable from coverage import env from coverage.disposition import FileDisposition, disposition_init diff --git a/coverage/jsonreport.py b/coverage/jsonreport.py index ad5294df6..a7fa29e25 100644 --- a/coverage/jsonreport.py +++ b/coverage/jsonreport.py @@ -9,7 +9,8 @@ import json import sys -from typing import Any, Dict, IO, Iterable, TYPE_CHECKING +from typing import Any, Dict, IO, TYPE_CHECKING +from collections.abc import Iterable from coverage import __version__ from coverage.report_core import get_analysis_to_report @@ -23,7 +24,7 @@ # A type for data that can be JSON-serialized. -JsonObj = Dict[str, Any] +JsonObj = dict[str, Any] # "Version 1" had no format number at all. # 2: add the meta.format field. diff --git a/coverage/lcovreport.py b/coverage/lcovreport.py index 2d6398507..70507c003 100644 --- a/coverage/lcovreport.py +++ b/coverage/lcovreport.py @@ -9,7 +9,8 @@ import hashlib import sys -from typing import IO, Iterable, TYPE_CHECKING +from typing import IO, TYPE_CHECKING +from collections.abc import Iterable from coverage.plugin import FileReporter from coverage.report_core import get_analysis_to_report diff --git a/coverage/misc.py b/coverage/misc.py index 5efbd7c0f..c5ce7f4ae 100644 --- a/coverage/misc.py +++ b/coverage/misc.py @@ -21,8 +21,9 @@ from types import ModuleType from typing import ( - Any, Iterable, Iterator, Mapping, NoReturn, Sequence, TypeVar, + Any, NoReturn, TypeVar, ) +from collections.abc import Iterable, Iterator, Mapping, Sequence from coverage.exceptions import CoverageException from coverage.types import TArc @@ -301,7 +302,7 @@ def import_local_file(modname: str, modfile: str | None = None) -> ModuleType: return mod -@functools.lru_cache(maxsize=None) +@functools.cache def _human_key(s: str) -> tuple[list[str | int], str]: """Turn a string into a list of string and number chunks. diff --git a/coverage/numbits.py b/coverage/numbits.py index a4eedfa86..0975a098f 100644 --- a/coverage/numbits.py +++ b/coverage/numbits.py @@ -20,7 +20,7 @@ import sqlite3 from itertools import zip_longest -from typing import Iterable +from collections.abc import Iterable def nums_to_numbits(nums: Iterable[int]) -> bytes: diff --git a/coverage/parser.py b/coverage/parser.py index be1b91b6e..33a199188 100644 --- a/coverage/parser.py +++ b/coverage/parser.py @@ -17,9 +17,10 @@ from dataclasses import dataclass from types import CodeType from typing import ( - cast, Any, Callable, Dict, Iterable, List, Optional, Protocol, Sequence, + cast, Any, Callable, Dict, List, Optional, Protocol, Set, Tuple, ) +from collections.abc import Iterable, Sequence from coverage import env from coverage.bytecode import code_objects @@ -324,7 +325,7 @@ def fix_with_jumps(self, arcs: Iterable[TArc]) -> set[TArc]: to_remove.add(start_next) return (set(arcs) | to_add) - to_remove - @functools.lru_cache() + @functools.lru_cache def exit_counts(self) -> dict[TLineNo, int]: """Get a count of exits from that each line. @@ -515,7 +516,7 @@ def __call__( """ -TArcFragments = Dict[TArc, List[Tuple[Optional[str], Optional[str]]]] +TArcFragments = dict[TArc, list[tuple[Optional[str], Optional[str]]]] class Block: """ @@ -851,7 +852,7 @@ def node_exits(self, node: ast.AST) -> set[ArcStart]: """ node_name = node.__class__.__name__ handler = cast( - Optional[Callable[[ast.AST], Set[ArcStart]]], + Optional[Callable[[ast.AST], set[ArcStart]]], getattr(self, "_handle__" + node_name, None), ) if handler is not None: diff --git a/coverage/phystokens.py b/coverage/phystokens.py index fc8b82f35..8c29402ad 100644 --- a/coverage/phystokens.py +++ b/coverage/phystokens.py @@ -13,7 +13,7 @@ import token import tokenize -from typing import Iterable +from collections.abc import Iterable from coverage import env from coverage.types import TLineNo, TSourceTokenLines diff --git a/coverage/plugin.py b/coverage/plugin.py index 6386209c1..11c0679f8 100644 --- a/coverage/plugin.py +++ b/coverage/plugin.py @@ -118,7 +118,8 @@ def coverage_init(reg, options): import functools from types import FrameType -from typing import Any, Iterable +from typing import Any +from collections.abc import Iterable from coverage import files from coverage.misc import _needs_to_implement diff --git a/coverage/plugin_support.py b/coverage/plugin_support.py index 7b843a10b..99e3bc22b 100644 --- a/coverage/plugin_support.py +++ b/coverage/plugin_support.py @@ -10,7 +10,8 @@ import sys from types import FrameType -from typing import Any, Iterable, Iterator +from typing import Any +from collections.abc import Iterable, Iterator from coverage.exceptions import PluginError from coverage.misc import isolate_module diff --git a/coverage/python.py b/coverage/python.py index ef1174d81..e87ff43cd 100644 --- a/coverage/python.py +++ b/coverage/python.py @@ -9,7 +9,8 @@ import types import zipimport -from typing import Iterable, TYPE_CHECKING +from typing import TYPE_CHECKING +from collections.abc import Iterable from coverage import env from coverage.exceptions import CoverageException, NoSource diff --git a/coverage/pytracer.py b/coverage/pytracer.py index 8144e6566..1655391a8 100644 --- a/coverage/pytracer.py +++ b/coverage/pytracer.py @@ -253,9 +253,9 @@ def _trace( flineno: TLineNo = frame.f_lineno if self.trace_arcs: - cast(Set[TArc], self.cur_file_data).add((self.last_line, flineno)) + cast(set[TArc], self.cur_file_data).add((self.last_line, flineno)) else: - cast(Set[TLineNo], self.cur_file_data).add(flineno) + cast(set[TLineNo], self.cur_file_data).add(flineno) self.last_line = flineno elif event == "return": @@ -286,7 +286,7 @@ def _trace( real_return = True if real_return: first = frame.f_code.co_firstlineno - cast(Set[TArc], self.cur_file_data).add((self.last_line, -first)) + cast(set[TArc], self.cur_file_data).add((self.last_line, -first)) # Leaving this function, pop the filename stack. self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = ( diff --git a/coverage/report.py b/coverage/report.py index 42f7b5aec..bf04f2a86 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -7,7 +7,8 @@ import sys -from typing import Any, IO, Iterable, TYPE_CHECKING +from typing import Any, IO, TYPE_CHECKING +from collections.abc import Iterable from coverage.exceptions import ConfigError, NoDataError from coverage.misc import human_sorted_items diff --git a/coverage/report_core.py b/coverage/report_core.py index db0e7b280..477034bae 100644 --- a/coverage/report_core.py +++ b/coverage/report_core.py @@ -8,8 +8,9 @@ import sys from typing import ( - Callable, Iterable, Iterator, IO, Protocol, TYPE_CHECKING, + Callable, IO, Protocol, TYPE_CHECKING, ) +from collections.abc import Iterable, Iterator from coverage.exceptions import NoDataError, NotPython from coverage.files import prep_patterns, GlobMatcher diff --git a/coverage/results.py b/coverage/results.py index 7191dcd1a..eef88bd92 100644 --- a/coverage/results.py +++ b/coverage/results.py @@ -9,7 +9,8 @@ import dataclasses from collections.abc import Container -from typing import Iterable, TYPE_CHECKING +from typing import TYPE_CHECKING +from collections.abc import Iterable from coverage.exceptions import ConfigError from coverage.misc import nice_pair diff --git a/coverage/sqldata.py b/coverage/sqldata.py index e739c39c3..76b569285 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -21,9 +21,9 @@ import zlib from typing import ( - cast, Any, Callable, Collection, Mapping, - Sequence, + cast, Any, Callable, ) +from collections.abc import Collection, Mapping, Sequence from coverage.debug import NoDebugging, auto_repr from coverage.exceptions import CoverageException, DataError diff --git a/coverage/sqlitedb.py b/coverage/sqlitedb.py index 0a3e83755..5ae6761d0 100644 --- a/coverage/sqlitedb.py +++ b/coverage/sqlitedb.py @@ -9,7 +9,8 @@ import re import sqlite3 -from typing import cast, Any, Iterable, Iterator, Tuple +from typing import cast, Any, Tuple +from collections.abc import Iterable, Iterator from coverage.debug import auto_repr, clipped_repr, exc_one_line from coverage.exceptions import DataError @@ -188,7 +189,7 @@ def execute_one(self, sql: str, parameters: Iterable[Any] = ()) -> tuple[Any, .. if len(rows) == 0: return None elif len(rows) == 1: - return cast(Tuple[Any, ...], rows[0]) + return cast(tuple[Any, ...], rows[0]) else: raise AssertionError(f"SQL {sql!r} shouldn't return {len(rows)} rows") diff --git a/coverage/sysmon.py b/coverage/sysmon.py index ef54292f3..c489e7905 100644 --- a/coverage/sysmon.py +++ b/coverage/sysmon.py @@ -385,7 +385,7 @@ def sysmon_py_return_arcs( if last_line is not None: arc = (last_line, -code.co_firstlineno) # log(f"adding {arc=}") - cast(Set[TArc], code_info.file_data).add(arc) + cast(set[TArc], code_info.file_data).add(arc) # Leaving this function, no need for the frame any more. self.last_lines.pop(frame, None) @@ -406,7 +406,7 @@ def sysmon_py_unwind_arcs( if last_line is not None: arc = (last_line, -code.co_firstlineno) # log(f"adding {arc=}") - cast(Set[TArc], code_info.file_data).add(arc) + cast(set[TArc], code_info.file_data).add(arc) @panopticon("code", "line") @@ -414,7 +414,7 @@ def sysmon_line_lines(self, code: CodeType, line_number: int) -> MonitorReturn: """Handle sys.monitoring.events.LINE events for line coverage.""" code_info = self.code_infos[id(code)] if code_info.file_data is not None: - cast(Set[TLineNo], code_info.file_data).add(line_number) + cast(set[TLineNo], code_info.file_data).add(line_number) # log(f"adding {line_number=}") return sys.monitoring.DISABLE @@ -428,7 +428,7 @@ def sysmon_line_arcs(self, code: CodeType, line_number: int) -> MonitorReturn: last_line = self.last_lines.get(frame) if last_line is not None: arc = (last_line, line_number) - cast(Set[TArc], code_info.file_data).add(arc) + cast(set[TArc], code_info.file_data).add(arc) # log(f"adding {arc=}") self.last_lines[frame] = line_number return ret diff --git a/coverage/templite.py b/coverage/templite.py index 4e7491220..87e10ff2a 100644 --- a/coverage/templite.py +++ b/coverage/templite.py @@ -237,7 +237,7 @@ def flush_output() -> None: code.dedent() self._render_function = cast( Callable[ - [Dict[str, Any], Callable[..., Any]], + [dict[str, Any], Callable[..., Any]], str, ], code.get_globals()["render_function"], diff --git a/coverage/tomlconfig.py b/coverage/tomlconfig.py index 1ba282d08..1784f3f39 100644 --- a/coverage/tomlconfig.py +++ b/coverage/tomlconfig.py @@ -8,7 +8,8 @@ import os import re -from typing import Any, Callable, Iterable, TypeVar +from typing import Any, Callable, TypeVar +from collections.abc import Iterable from coverage import env from coverage.exceptions import ConfigError diff --git a/coverage/types.py b/coverage/types.py index bfd2a4d15..a3e8962ab 100644 --- a/coverage/types.py +++ b/coverage/types.py @@ -12,9 +12,10 @@ from types import FrameType, ModuleType from typing import ( - Any, Callable, Dict, Iterable, List, Mapping, Optional, Protocol, + Any, Callable, Dict, List, Optional, Protocol, Set, Tuple, Type, Union, TYPE_CHECKING, ) +from collections.abc import Iterable, Mapping if TYPE_CHECKING: from coverage.plugin import FileTracer @@ -32,7 +33,7 @@ FilePath = Union[str, os.PathLike] # For testing FilePath arguments FilePathClasses = [str, pathlib.Path] -FilePathType = Union[Type[str], Type[pathlib.Path]] +FilePathType = Union[type[str], type[pathlib.Path]] ## Python tracing @@ -52,7 +53,7 @@ def __call__( # Line numbers are pervasive enough that they deserve their own type. TLineNo = int -TArc = Tuple[TLineNo, TLineNo] +TArc = tuple[TLineNo, TLineNo] class TFileDisposition(Protocol): """A simple value type for recording what to do with a file.""" @@ -74,9 +75,9 @@ class TFileDisposition(Protocol): # - If measuring arcs in the C tracer, the values are sets of packed arcs (two # line numbers combined into one integer). -TTraceFileData = Union[Set[TLineNo], Set[TArc], Set[int]] +TTraceFileData = Union[set[TLineNo], set[TArc], set[int]] -TTraceData = Dict[str, TTraceFileData] +TTraceData = dict[str, TTraceFileData] # Functions passed into collectors. TShouldTraceFn = Callable[[str, FrameType], TFileDisposition] @@ -125,7 +126,7 @@ def get_stats(self) -> dict[str, int] | None: # One value read from a config file. TConfigValueIn = Optional[Union[bool, int, float, str, Iterable[str]]] -TConfigValueOut = Optional[Union[bool, int, float, str, List[str]]] +TConfigValueOut = Optional[Union[bool, int, float, str, list[str]]] # An entire config section, mapping option names to values. TConfigSectionIn = Mapping[str, TConfigValueIn] TConfigSectionOut = Mapping[str, TConfigValueOut] @@ -166,7 +167,7 @@ def get_plugin_options(self, plugin: str) -> TConfigSectionOut: TMorf = Union[ModuleType, str] -TSourceTokenLines = Iterable[List[Tuple[str, str]]] +TSourceTokenLines = Iterable[list[tuple[str, str]]] ## Plugins diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py index b346a2d78..487c2659c 100644 --- a/coverage/xmlreport.py +++ b/coverage/xmlreport.py @@ -12,7 +12,8 @@ import xml.dom.minidom from dataclasses import dataclass -from typing import Any, IO, Iterable, TYPE_CHECKING +from typing import Any, IO, TYPE_CHECKING +from collections.abc import Iterable from coverage import __version__, files from coverage.misc import isolate_module, human_sorted, human_sorted_items diff --git a/tests/conftest.py b/tests/conftest.py index fb2c5bd01..eff1d27d6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -15,7 +15,7 @@ import warnings from pathlib import Path -from typing import Iterator +from collections.abc import Iterator import pytest diff --git a/tests/coveragetest.py b/tests/coveragetest.py index 86f25a955..244a68a29 100644 --- a/tests/coveragetest.py +++ b/tests/coveragetest.py @@ -19,8 +19,9 @@ from types import ModuleType from typing import ( - Any, Collection, Iterable, Iterator, Mapping, Sequence, + Any, ) +from collections.abc import Collection, Iterable, Iterator, Mapping, Sequence import coverage from coverage import Coverage diff --git a/tests/goldtest.py b/tests/goldtest.py index 07125d753..7ca4af159 100644 --- a/tests/goldtest.py +++ b/tests/goldtest.py @@ -13,7 +13,7 @@ import re import xml.etree.ElementTree -from typing import Iterable +from collections.abc import Iterable from tests.coveragetest import TESTS_DIR from tests.helpers import os_sep diff --git a/tests/helpers.py b/tests/helpers.py index 619ac3d2f..681193ebf 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -20,8 +20,9 @@ from pathlib import Path from typing import ( - Any, Callable, Iterable, Iterator, NoReturn, TypeVar, cast, + Any, Callable, NoReturn, TypeVar, cast, ) +from collections.abc import Iterable, Iterator import flaky import pytest diff --git a/tests/mixins.py b/tests/mixins.py index b8bcc08e8..0a7f72290 100644 --- a/tests/mixins.py +++ b/tests/mixins.py @@ -14,7 +14,8 @@ import os.path import sys -from typing import Any, Callable, Iterable, Iterator, Tuple, cast +from typing import Any, Callable, Tuple, cast +from collections.abc import Iterable, Iterator import pytest @@ -138,7 +139,7 @@ def _capcapsys(self, capsys: pytest.CaptureFixture[str]) -> None: def stdouterr(self) -> tuple[str, str]: """Returns (out, err), two strings for stdout and stderr.""" - return cast(Tuple[str, str], self.capsys.readouterr()) + return cast(tuple[str, str], self.capsys.readouterr()) def stdout(self) -> str: """Returns a string, the captured stdout.""" diff --git a/tests/plugin_config.py b/tests/plugin_config.py index bb6893e3e..029e309f4 100644 --- a/tests/plugin_config.py +++ b/tests/plugin_config.py @@ -17,7 +17,7 @@ class Plugin(coverage.CoveragePlugin): def configure(self, config: TConfigurable) -> None: """Configure all the things!""" opt_name = "report:exclude_lines" - exclude_lines = cast(List[str], config.get_option(opt_name)) + exclude_lines = cast(list[str], config.get_option(opt_name)) exclude_lines.append(r"pragma: custom") exclude_lines.append(r"pragma: or whatever") config.set_option(opt_name, exclude_lines) diff --git a/tests/test_api.py b/tests/test_api.py index 58f046367..ab738e3c3 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -15,7 +15,8 @@ import sys import textwrap -from typing import cast, Callable, Iterable +from typing import cast, Callable +from collections.abc import Iterable import pytest diff --git a/tests/test_cmdline.py b/tests/test_cmdline.py index f832fcc94..0ebf27267 100644 --- a/tests/test_cmdline.py +++ b/tests/test_cmdline.py @@ -13,7 +13,8 @@ import textwrap from unittest import mock -from typing import Any, Mapping +from typing import Any +from collections.abc import Mapping import pytest diff --git a/tests/test_concurrency.py b/tests/test_concurrency.py index 94728641a..6635629f6 100644 --- a/tests/test_concurrency.py +++ b/tests/test_concurrency.py @@ -16,7 +16,7 @@ import time from types import ModuleType -from typing import Iterable +from collections.abc import Iterable from flaky import flaky import pytest diff --git a/tests/test_data.py b/tests/test_data.py index 144c145d9..46643168d 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -13,8 +13,9 @@ import threading from typing import ( - Any, Callable, Collection, Iterable, Mapping, TypeVar, Union, + Any, Callable, TypeVar, Union, ) +from collections.abc import Collection, Iterable, Mapping from unittest import mock import pytest diff --git a/tests/test_debug.py b/tests/test_debug.py index bdf98a5f7..651c7d7ea 100644 --- a/tests/test_debug.py +++ b/tests/test_debug.py @@ -11,7 +11,8 @@ import re import sys -from typing import Any, Callable, Iterable +from typing import Any, Callable +from collections.abc import Iterable import pytest diff --git a/tests/test_execfile.py b/tests/test_execfile.py index 908857942..cd12dea99 100644 --- a/tests/test_execfile.py +++ b/tests/test_execfile.py @@ -14,7 +14,8 @@ import re import sys -from typing import Any, Iterator +from typing import Any +from collections.abc import Iterator import pytest diff --git a/tests/test_files.py b/tests/test_files.py index ab42fa080..7a56aac30 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -10,7 +10,8 @@ import os.path import re -from typing import Any, Iterable, Iterator, Protocol +from typing import Any, Protocol +from collections.abc import Iterable, Iterator from unittest import mock import pytest diff --git a/tests/test_numbits.py b/tests/test_numbits.py index 44a264197..55a577475 100644 --- a/tests/test_numbits.py +++ b/tests/test_numbits.py @@ -8,7 +8,7 @@ import json import sqlite3 -from typing import Iterable +from collections.abc import Iterable from hypothesis import example, given, settings from hypothesis.strategies import sets, integers diff --git a/tests/test_report_core.py b/tests/test_report_core.py index a27568152..1d0d83b55 100644 --- a/tests/test_report_core.py +++ b/tests/test_report_core.py @@ -5,7 +5,8 @@ from __future__ import annotations -from typing import IO, Iterable +from typing import IO +from collections.abc import Iterable import pytest diff --git a/tests/test_results.py b/tests/test_results.py index ec807c560..fefe46baf 100644 --- a/tests/test_results.py +++ b/tests/test_results.py @@ -7,7 +7,8 @@ import math -from typing import Iterable, cast +from typing import cast +from collections.abc import Iterable import pytest diff --git a/tests/test_setup.py b/tests/test_setup.py index c162d253e..8e11a9c21 100644 --- a/tests/test_setup.py +++ b/tests/test_setup.py @@ -48,7 +48,7 @@ def test_more_metadata(self) -> None: sys.path.insert(0, '') from setup import setup_args - classifiers = cast(List[str], setup_args['classifiers']) + classifiers = cast(list[str], setup_args['classifiers']) assert len(classifiers) > 7 assert classifiers[-1].startswith("Development Status ::") assert "Programming Language :: Python :: %d" % sys.version_info[:1] in classifiers diff --git a/tests/test_venv.py b/tests/test_venv.py index 30c1e7610..70b2e4c4d 100644 --- a/tests/test_venv.py +++ b/tests/test_venv.py @@ -10,7 +10,8 @@ import shutil from pathlib import Path -from typing import Iterator, cast +from typing import cast +from collections.abc import Iterator import pytest diff --git a/tests/test_xml.py b/tests/test_xml.py index f105035d6..15f01b35c 100644 --- a/tests/test_xml.py +++ b/tests/test_xml.py @@ -9,7 +9,8 @@ import os.path import re -from typing import Any, Iterator +from typing import Any +from collections.abc import Iterator from xml.etree import ElementTree import pytest