From 3759738f52bb0b15c740e302294aaf95d687c39d Mon Sep 17 00:00:00 2001 From: qutebrowser bot Date: Mon, 20 Nov 2023 04:20:33 +0000 Subject: Update dependencies --- misc/requirements/requirements-dev.txt | 8 ++++---- misc/requirements/requirements-mypy.txt | 6 +++--- misc/requirements/requirements-pylint.txt | 6 +++--- misc/requirements/requirements-pyroma.txt | 8 ++++---- misc/requirements/requirements-sphinx.txt | 6 +++--- misc/requirements/requirements-tests.txt | 10 +++++----- requirements.txt | 2 +- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/misc/requirements/requirements-dev.txt b/misc/requirements/requirements-dev.txt index fae3a3762..df7c7b847 100644 --- a/misc/requirements/requirements-dev.txt +++ b/misc/requirements/requirements-dev.txt @@ -2,7 +2,7 @@ build==1.0.3 bump2version==1.0.1 -certifi==2023.7.22 +certifi==2023.11.17 cffi==1.16.0 charset-normalizer==3.3.2 cryptography==41.0.5 @@ -24,7 +24,7 @@ packaging==23.2 pkginfo==1.9.6 ply==3.11 pycparser==2.21 -Pygments==2.16.1 +Pygments==2.17.1 PyJWT==2.8.0 Pympler==1.0.1 pyproject_hooks==1.0.0 @@ -34,7 +34,7 @@ readme-renderer==42.0 requests==2.31.0 requests-toolbelt==1.0.0 rfc3986==2.0.0 -rich==13.6.0 +rich==13.7.0 SecretStorage==3.3.3 sip==6.7.12 six==1.16.0 @@ -42,5 +42,5 @@ tomli==2.0.1 twine==4.0.2 typing_extensions==4.8.0 uritemplate==4.1.1 -# urllib3==2.0.7 +# urllib3==2.1.0 zipp==3.17.0 diff --git a/misc/requirements/requirements-mypy.txt b/misc/requirements/requirements-mypy.txt index b8c88cfc0..f1d5c8bdf 100644 --- a/misc/requirements/requirements-mypy.txt +++ b/misc/requirements/requirements-mypy.txt @@ -1,15 +1,15 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py chardet==5.2.0 -diff_cover==8.0.0 +diff_cover==8.0.1 importlib-resources==6.1.1 Jinja2==3.1.2 lxml==4.9.3 MarkupSafe==2.1.3 -mypy==1.6.1 +mypy==1.7.0 mypy-extensions==1.0.0 pluggy==1.3.0 -Pygments==2.16.1 +Pygments==2.17.1 PyQt5-stubs==5.15.6.0 tomli==2.0.1 types-colorama==0.4.15.12 diff --git a/misc/requirements/requirements-pylint.txt b/misc/requirements/requirements-pylint.txt index 38c227103..7d4dc69b7 100644 --- a/misc/requirements/requirements-pylint.txt +++ b/misc/requirements/requirements-pylint.txt @@ -1,7 +1,7 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py astroid==3.0.1 -certifi==2023.7.22 +certifi==2023.11.17 cffi==1.16.0 charset-normalizer==3.3.2 cryptography==41.0.5 @@ -20,7 +20,7 @@ python-dateutil==2.8.2 requests==2.31.0 six==1.16.0 tomli==2.0.1 -tomlkit==0.12.2 +tomlkit==0.12.3 typing_extensions==4.8.0 uritemplate==4.1.1 -# urllib3==2.0.7 +# urllib3==2.1.0 diff --git a/misc/requirements/requirements-pyroma.txt b/misc/requirements/requirements-pyroma.txt index 576c5574f..b80f5f63a 100644 --- a/misc/requirements/requirements-pyroma.txt +++ b/misc/requirements/requirements-pyroma.txt @@ -1,17 +1,17 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py build==1.0.3 -certifi==2023.7.22 +certifi==2023.11.17 charset-normalizer==3.3.2 docutils==0.20.1 idna==3.4 importlib-metadata==6.8.0 packaging==23.2 -Pygments==2.16.1 +Pygments==2.17.1 pyproject_hooks==1.0.0 pyroma==4.2 requests==2.31.0 tomli==2.0.1 -trove-classifiers==2023.11.9 -urllib3==2.0.7 +trove-classifiers==2023.11.14 +urllib3==2.1.0 zipp==3.17.0 diff --git a/misc/requirements/requirements-sphinx.txt b/misc/requirements/requirements-sphinx.txt index 3d5011d12..5de9398fb 100644 --- a/misc/requirements/requirements-sphinx.txt +++ b/misc/requirements/requirements-sphinx.txt @@ -2,7 +2,7 @@ alabaster==0.7.13 Babel==2.13.1 -certifi==2023.7.22 +certifi==2023.11.17 charset-normalizer==3.3.2 docutils==0.20.1 idna==3.4 @@ -11,7 +11,7 @@ importlib-metadata==6.8.0 Jinja2==3.1.2 MarkupSafe==2.1.3 packaging==23.2 -Pygments==2.16.1 +Pygments==2.17.1 pytz==2023.3.post1 requests==2.31.0 snowballstemmer==2.2.0 @@ -22,5 +22,5 @@ sphinxcontrib-htmlhelp==2.0.1 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 -urllib3==2.0.7 +urllib3==2.1.0 zipp==3.17.0 diff --git a/misc/requirements/requirements-tests.txt b/misc/requirements/requirements-tests.txt index 168acac36..86e13960a 100644 --- a/misc/requirements/requirements-tests.txt +++ b/misc/requirements/requirements-tests.txt @@ -3,7 +3,7 @@ attrs==23.1.0 beautifulsoup4==4.12.2 blinker==1.7.0 -certifi==2023.7.22 +certifi==2023.11.17 charset-normalizer==3.3.2 cheroot==10.0.0 click==8.1.7 @@ -13,7 +13,7 @@ execnet==2.0.2 filelock==3.13.1 Flask==3.0.0 hunter==3.6.1 -hypothesis==6.88.3 +hypothesis==6.90.0 idna==3.4 importlib-metadata==6.8.0 iniconfig==2.0.0 @@ -29,7 +29,7 @@ parse==1.19.1 parse-type==0.6.2 pluggy==1.3.0 py-cpuinfo==9.0.0 -Pygments==2.16.1 +Pygments==2.17.1 pytest==7.4.3 pytest-bdd==7.0.0 pytest-benchmark==4.0.0 @@ -47,11 +47,11 @@ requests-file==1.5.1 six==1.16.0 sortedcontainers==2.4.0 soupsieve==2.5 -tldextract==5.1.0 +tldextract==5.1.1 toml==0.10.2 tomli==2.0.1 typing_extensions==4.8.0 -urllib3==2.0.7 +urllib3==2.1.0 vulture==2.10 Werkzeug==3.0.1 zipp==3.17.0 diff --git a/requirements.txt b/requirements.txt index 9b8b4a905..f1b9a4a2a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ colorama==0.4.6 importlib-resources==6.1.1 ; python_version=="3.8.*" Jinja2==3.1.2 MarkupSafe==2.1.3 -Pygments==2.16.1 +Pygments==2.17.1 PyYAML==6.0.1 zipp==3.17.0 # Unpinned due to recompile_requirements.py limitations -- cgit v1.2.3-54-g00ecf From 4c08a3393cff1f39e779979abeec72db7f1a3d6d Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Mon, 20 Nov 2023 11:18:19 +0100 Subject: Fix/improve typing for qtutils.savefile_open Contrary to what I thought at the time when initially writing this, typing.AnyStr isn't just an alias for IO[str] | IO[bytes], but is actually a TypeVar. As per the Python docs, it should be used when there are *multiple* places where the types need to match: def concat(a: AnyStr, b: AnyStr) -> AnyStr: return a + b What we do instead is somewhat akin to "def fun() -> T:", which mypy already comments on: error: A function returning TypeVar should receive at least one argument containing the same TypeVar [type-var] def t() -> T: Not quite sure why it doesn't in this case, or why it now raises an additional error (possibly the new inferrence code or something?). Either way, with this commit the annotations are now more correctly using Union[IO[str], IO[bytes]], including typing.Literal overloads so that mypy actually knows what specific type will be returned by a call. --- qutebrowser/utils/qtutils.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/qutebrowser/utils/qtutils.py b/qutebrowser/utils/qtutils.py index 2c103c6b8..363d5607a 100644 --- a/qutebrowser/utils/qtutils.py +++ b/qutebrowser/utils/qtutils.py @@ -18,8 +18,8 @@ import enum import pathlib import operator import contextlib -from typing import (Any, AnyStr, TYPE_CHECKING, BinaryIO, IO, Iterator, - Optional, Union, Tuple, Protocol, cast, TypeVar) +from typing import (Any, TYPE_CHECKING, BinaryIO, IO, Iterator, Literal, + Optional, Union, Tuple, Protocol, cast, overload, TypeVar) from qutebrowser.qt import machinery, sip from qutebrowser.qt.core import (qVersion, QEventLoop, QDataStream, QByteArray, @@ -236,12 +236,32 @@ def deserialize_stream(stream: QDataStream, obj: _QtSerializableType) -> None: check_qdatastream(stream) +@overload +@contextlib.contextmanager +def savefile_open( + filename: str, + binary: Literal[False] = ..., + encoding: str = 'utf-8' +) -> Iterator[IO[str]]: + ... + + +@overload +@contextlib.contextmanager +def savefile_open( + filename: str, + binary: Literal[True] = ..., + encoding: str = 'utf-8' +) -> Iterator[IO[str]]: + ... + + @contextlib.contextmanager def savefile_open( filename: str, binary: bool = False, encoding: str = 'utf-8' -) -> Iterator[IO[AnyStr]]: +) -> Iterator[Union[IO[str], IO[bytes]]]: """Context manager to easily use a QSaveFile.""" f = QSaveFile(filename) cancelled = False @@ -253,7 +273,7 @@ def savefile_open( dev = cast(BinaryIO, PyQIODevice(f)) if binary: - new_f: IO[Any] = dev # FIXME:mypy Why doesn't AnyStr work? + new_f: Union[IO[str], IO[bytes]] = dev else: new_f = io.TextIOWrapper(dev, encoding=encoding) -- cgit v1.2.3-54-g00ecf