Use Callable from collections.abc as well

Did run with ruff pretending to use Python 3.10,
because otherwise it won't reformat those:

    ruff check --select 'UP035' --fix --config 'target-version = "py310"' --unsafe-fixes

This is because collections.abc.Callable inside Optional[...] and Union[...] is
broken with Python 3.9.0 and 3.9.1:

https://github.com/asottile/pyupgrade/issues/677
https://github.com/astral-sh/ruff/issues/2690
https://github.com/python/cpython/issues/87131

However, pylint can detect problematic usages (of which we only have one),
so we might as well use the new thing everywhere possible for consistency.

Also see #7098
This commit is contained in:
Florian Bruhin 2024-10-13 16:13:08 +02:00
parent 97104b2000
commit eb8121ffd5
33 changed files with 70 additions and 58 deletions

View File

@ -35,8 +35,8 @@ Possible values:
import inspect
from typing import Any, Callable, Protocol, Optional, cast
from collections.abc import Iterable
from typing import Any, Protocol, Optional, cast
from collections.abc import Iterable, Callable
from qutebrowser.utils import qtutils
from qutebrowser.commands import command, cmdexc

View File

@ -7,7 +7,8 @@
"""Hooks for extensions."""
import importlib
from typing import Callable, Any
from typing import Any
from collections.abc import Callable
from qutebrowser.extensions import loader

View File

@ -9,8 +9,8 @@ import pathlib
import itertools
import functools
import dataclasses
from typing import (cast, TYPE_CHECKING, Any, Callable, Optional, Union)
from collections.abc import Iterable, Sequence
from typing import (cast, TYPE_CHECKING, Any, Optional, Union)
from collections.abc import Iterable, Sequence, Callable
from qutebrowser.qt import machinery
from qutebrowser.qt.core import (pyqtSignal, pyqtSlot, QUrl, QObject, QSizeF, Qt,

View File

@ -7,7 +7,8 @@
import os.path
import shlex
import functools
from typing import cast, Callable, Union, Optional
from typing import cast, Union, Optional
from collections.abc import Callable
from qutebrowser.qt.widgets import QApplication, QTabBar
from qutebrowser.qt.core import Qt, QUrl, QEvent, QUrlQuery

View File

@ -5,8 +5,8 @@
"""The ListView to display downloads in."""
import functools
from typing import Callable, Union
from collections.abc import MutableSequence
from typing import Union
from collections.abc import MutableSequence, Callable
from qutebrowser.qt.core import pyqtSlot, QSize, Qt
from qutebrowser.qt.widgets import QListView, QSizePolicy, QMenu, QStyleFactory

View File

@ -12,8 +12,15 @@ import html
import enum
import dataclasses
from string import ascii_lowercase
from typing import (TYPE_CHECKING, Callable, Optional)
from collections.abc import Iterable, Iterator, Mapping, MutableSequence, Sequence
from typing import (TYPE_CHECKING, Optional)
from collections.abc import (
Iterable,
Iterator,
Mapping,
MutableSequence,
Sequence,
Callable,
)
from qutebrowser.qt.core import pyqtSignal, pyqtSlot, QObject, Qt, QUrl
from qutebrowser.qt.widgets import QLabel

View File

@ -18,8 +18,8 @@ import textwrap
import urllib
import collections
import secrets
from typing import TypeVar, Callable, Optional, Union
from collections.abc import Sequence
from typing import TypeVar, Optional, Union
from collections.abc import Sequence, Callable
from qutebrowser.qt.core import QUrlQuery, QUrl

View File

@ -10,8 +10,8 @@ import html
import enum
import netrc
import tempfile
from typing import Callable, Optional
from collections.abc import Mapping, Iterable, Iterator
from typing import Optional
from collections.abc import Mapping, Iterable, Iterator, Callable
from qutebrowser.qt.core import QUrl, pyqtBoundSignal

View File

@ -5,8 +5,8 @@
"""QtWebEngine specific part of the web element API."""
from typing import (
TYPE_CHECKING, Any, Callable, Optional, Union)
from collections.abc import Iterator
TYPE_CHECKING, Any, Optional, Union)
from collections.abc import Iterator, Callable
from qutebrowser.qt.core import QRect, QEventLoop
from qutebrowser.qt.widgets import QApplication

View File

@ -19,8 +19,7 @@ import email.mime.multipart
import email.message
import quopri
import dataclasses
from typing import Callable
from collections.abc import MutableMapping
from collections.abc import MutableMapping, Callable
from qutebrowser.qt.core import QUrl

View File

@ -9,9 +9,8 @@ import collections
import traceback
import typing
import dataclasses
from typing import (Any, Union, Optional,
Callable)
from collections.abc import MutableMapping, MutableSequence
from typing import (Any, Union, Optional)
from collections.abc import MutableMapping, MutableSequence, Callable
from qutebrowser.api import cmdutils
from qutebrowser.commands import cmdexc, argparser

View File

@ -7,8 +7,8 @@
import traceback
import re
import contextlib
from typing import TYPE_CHECKING, Callable
from collections.abc import Iterator, Mapping, MutableMapping
from typing import TYPE_CHECKING
from collections.abc import Iterator, Mapping, MutableMapping, Callable
from qutebrowser.qt.core import pyqtSlot, QUrl, QObject

View File

@ -4,8 +4,7 @@
"""Utility functions for completion models."""
from typing import Callable
from collections.abc import Sequence
from collections.abc import Sequence, Callable
from qutebrowser.utils import usertypes
from qutebrowser.misc import objects

View File

@ -11,8 +11,8 @@ import os
import signal
import logging
import pathlib
from typing import Optional, Callable
from collections.abc import Sequence
from typing import Optional
from collections.abc import Sequence, Callable
try:
import hunter

View File

@ -5,8 +5,8 @@
"""Bridge to provide readline-like shortcuts for QLineEdits."""
import os
from typing import Optional, Any, Callable
from collections.abc import Iterable, MutableMapping
from typing import Optional, Any
from collections.abc import Iterable, MutableMapping, Callable
from qutebrowser.qt.widgets import QApplication, QLineEdit

View File

@ -4,7 +4,7 @@
"""Scrolling-related commands."""
from typing import Callable
from collections.abc import Callable
from qutebrowser.api import cmdutils, apitypes

View File

@ -7,8 +7,8 @@
import copy
import contextlib
import functools
from typing import (TYPE_CHECKING, Any, Callable, Optional, cast)
from collections.abc import Iterator, Mapping, MutableMapping, MutableSequence
from typing import (TYPE_CHECKING, Any, Optional, cast)
from collections.abc import Iterator, Mapping, MutableMapping, MutableSequence, Callable
from qutebrowser.qt.core import pyqtSignal, QObject, QUrl

View File

@ -36,9 +36,9 @@ import functools
import operator
import json
import dataclasses
from typing import (Any, Callable, Optional, Union)
from typing import Any, Optional, Union
from re import Pattern
from collections.abc import Iterable, Iterator, Sequence
from collections.abc import Iterable, Iterator, Sequence, Callable
import yaml
from qutebrowser.qt.core import QUrl, Qt

View File

@ -8,6 +8,9 @@ import os
import sys
import argparse
import pathlib
# Using deprecated typing.Callable as a WORKAROUND because
# collections.abc.Callable inside Optional[...]/Union[...]
# is broken on Python 3.9.0 and 3.9.1
from typing import Any, Optional, Union, Callable
from collections.abc import Iterator, Sequence

View File

@ -8,7 +8,8 @@ import re
import argparse
import functools
import dataclasses
from typing import Any, Callable, Optional, Union
from typing import Any, Optional, Union
from collections.abc import Callable
from qutebrowser.qt.core import QUrl, pyqtSlot, qVersion
from qutebrowser.qt.gui import QFont

View File

@ -6,7 +6,8 @@
import enum
import dataclasses
from typing import Callable, Optional
from typing import Optional
from collections.abc import Callable
from qutebrowser.qt.core import QUrl

View File

@ -10,8 +10,8 @@ import pathlib
import importlib
import argparse
import dataclasses
from typing import Callable, Optional
from collections.abc import Iterator
from typing import Optional
from collections.abc import Iterator, Callable
from qutebrowser.qt.core import pyqtSlot

View File

@ -6,8 +6,8 @@
import functools
import dataclasses
from typing import Callable, Union, cast
from collections.abc import Mapping, MutableMapping
from typing import Union, cast
from collections.abc import Mapping, MutableMapping, Callable
from qutebrowser.qt import machinery
from qutebrowser.qt.core import pyqtSlot, pyqtSignal, Qt, QObject, QEvent

View File

@ -9,8 +9,8 @@ dependencies as possible to avoid cyclic dependencies.
"""
import weakref
from typing import Any, Callable, Optional, TypeVar
from collections.abc import Mapping
from typing import Any, Optional, TypeVar
from collections.abc import Mapping, Callable
from qutebrowser.utils import log

View File

@ -6,8 +6,8 @@
import dataclasses
import time
from typing import Any, Callable, Optional
from collections.abc import Mapping, Sequence
from typing import Any, Optional
from collections.abc import Mapping, Sequence, Callable
from qutebrowser.qt.core import QObject

View File

@ -9,7 +9,7 @@ https://github.com/python-qt-tools/PyQt5-stubs/blob/5.15.6.0/PyQt5-stubs/QtCore.
"""
# flake8: noqa
# pylint: disable=invalid-name,missing-class-docstring,too-many-arguments,redefined-builtin,unused-argument
# pylint: disable=invalid-name,missing-class-docstring,too-many-arguments,redefined-builtin,unused-argument,deprecated-typing-alias
import typing
from PyQt6.QtCore import QObject, pyqtSignal

View File

@ -12,8 +12,8 @@ import functools
import datetime
import types
from typing import (
Any, Callable, Optional, Union)
from collections.abc import Mapping, MutableSequence, Sequence
Any, Optional, Union)
from collections.abc import Mapping, MutableSequence, Sequence, Callable
from qutebrowser.qt.core import Qt, QEvent, QMetaMethod, QObject, pyqtBoundSignal

View File

@ -10,8 +10,8 @@ import inspect
import os.path
import collections
import enum
from typing import Any, Callable, Optional, Union
from collections.abc import MutableMapping
from typing import Any, Optional, Union
from collections.abc import MutableMapping, Callable
import qutebrowser
from qutebrowser.utils import log, utils

View File

@ -10,8 +10,8 @@ import posixpath
import functools
import contextlib
import html
from typing import Any, Callable
from collections.abc import Iterator
from typing import Any
from collections.abc import Iterator, Callable
import jinja2
import jinja2.nodes

View File

@ -10,8 +10,8 @@
import dataclasses
import traceback
from typing import Any, Callable, Union, Optional
from collections.abc import Iterable
from typing import Any, Union, Optional
from collections.abc import Iterable, Callable
from qutebrowser.qt.core import pyqtSignal, pyqtBoundSignal, QObject

View File

@ -7,9 +7,9 @@
import collections
import functools
from typing import (TYPE_CHECKING, Any, Callable,
from typing import (TYPE_CHECKING, Any,
Optional, Union)
from collections.abc import MutableMapping, MutableSequence, Sequence
from collections.abc import MutableMapping, MutableSequence, Sequence, Callable
from qutebrowser.qt.core import QObject, QTimer
from qutebrowser.qt.widgets import QApplication

View File

@ -19,10 +19,10 @@ import contextlib
import shlex
import sysconfig
import mimetypes
from typing import (Any, Callable, IO,
from typing import (Any, IO,
Optional, Union,
TypeVar, Protocol)
from collections.abc import Iterator, Sequence
from collections.abc import Iterator, Sequence, Callable
from qutebrowser.qt.core import QUrl, QVersionNumber, QRect, QPoint
from qutebrowser.qt.gui import QClipboard, QDesktopServices

View File

@ -6,7 +6,8 @@
"""Fake objects/stubs."""
from typing import Any, Callable
from typing import Any
from collections.abc import Callable
from unittest import mock
import contextlib
import shutil