Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

anyio can't be imported #397

Closed
2 tasks done
jolaf opened this issue Sep 8, 2023 · 19 comments
Closed
2 tasks done

anyio can't be imported #397

jolaf opened this issue Sep 8, 2023 · 19 comments
Labels

Comments

@jolaf
Copy link
Contributor

jolaf commented Sep 8, 2023

Things to check first

  • I have searched the existing issues and didn't find my bug already reported there

  • I have checked that my bug is still present in the latest release

Typeguard version

4.1.3

Python version

3.10.12

What happened?

Ubuntu 22.04.3 Python 3.10.12:

Traceback (most recent call last):
  File "/tmp/test.py", line 4, in <module>
    import_module('anyio')
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "/home/jolaf/.local/lib/python3.10/site-packages/typeguard/_importhook.py", line 98, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/jolaf/.local/lib/python3.10/site-packages/anyio/__init__.py", line 101, in <module>
    from ._core._fileio import AsyncFile, Path, open_file, wrap_file
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "/home/jolaf/.local/lib/python3.10/site-packages/typeguard/_importhook.py", line 98, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 879, in exec_module
  File "<frozen importlib._bootstrap_external>", line 1017, in get_code
  File "/home/jolaf/.local/lib/python3.10/site-packages/typeguard/_importhook.py", line 87, in source_to_code
    return _call_with_frames_removed(
  File "/home/jolaf/.local/lib/python3.10/site-packages/typeguard/_importhook.py", line 47, in _call_with_frames_removed
    return f(*args, **kwargs)
TypeError: required field "slice" missing from Subscript

Windows 10 Python 3.11.5:

Traceback (most recent call last):
  File "C:\Temp\test.py", line 4, in <module>
    import_module('anyio')
  File "C:\Python311\Lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "C:\Python311\Lib\site-packages\typeguard\_importhook.py", line 98, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 940, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "C:\Python311\Lib\site-packages\anyio\__init__.py", line 21, in <module>
    from ._core._fileio import AsyncFile as AsyncFile
  File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
  File "C:\Python311\Lib\site-packages\typeguard\_importhook.py", line 98, in exec_module
    super().exec_module(module)
  File "<frozen importlib._bootstrap_external>", line 936, in exec_module
  File "<frozen importlib._bootstrap_external>", line 1074, in get_code
  File "C:\Python311\Lib\site-packages\typeguard\_importhook.py", line 75, in source_to_code
    tree = TypeguardTransformer().visit(tree)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\ast.py", line 418, in visit
    return visitor(node)
           ^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 612, in visit_Module
    self.generic_visit(node)
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 508, in generic_visit
    node = super().generic_visit(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\ast.py", line 494, in generic_visit
    value = self.visit(value)
            ^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\ast.py", line 418, in visit
    return visitor(node)
           ^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 657, in visit_ClassDef
    self.generic_visit(node)
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 508, in generic_visit
    node = super().generic_visit(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\ast.py", line 494, in generic_visit
    value = self.visit(value)
            ^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\ast.py", line 418, in visit
    return visitor(node)
           ^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 923, in visit_AsyncFunctionDef
    return self.visit_FunctionDef(node)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 735, in visit_FunctionDef
    annotation = self._convert_annotation(deepcopy(arg.annotation))
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 596, in _convert_annotation
    new_annotation = cast(expr, AnnotationTransformer(self).visit(annotation))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 353, in visit
    new_node = super().visit(node)
               ^^^^^^^^^^^^^^^^^^^
  File "C:\Python311\Lib\ast.py", line 418, in visit
    return visitor(node)
           ^^^^^^^^^^^^^
  File "C:\Python311\Lib\site-packages\typeguard\_transformer.py", line 380, in visit_BinOp
    if self._memo.name_matches(node.left, *anytype_names):
                               ^^^^^^^^^
AttributeError: 'BinOp' object has no attribute 'left'

How can we reproduce the bug?

test.py:

from importlib import import_module
from typeguard import install_import_hook
with install_import_hook(('anyio',)):
    import_module('anyio')
$ pip install anyio
$ python3 test.py
@jolaf jolaf added the bug label Sep 8, 2023
@agronholm
Copy link
Owner

I'm hoping this can be narrowed down to a specific annotation.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

It's not annotation, it crashes at
from ._core._fileio import AsyncFile, Path, open_file, wrap_file

@agronholm
Copy link
Owner

Then it's some annotation in the anyio._core._fileio module that's causing this.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

Added a different crash on the same test on latest Python on Windows.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

I'm not sure I now have the time to dig in other people's code.

@agronholm
Copy link
Owner

The second one was fixed in 041b0e3.

@agronholm
Copy link
Owner

If I install typeguard from master, I don't see this crash, at least against the latest AnyIO.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

I've just tried with the current master, the first crash is still there.

Can it be a version of Python is important?

@agronholm
Copy link
Owner

I tried with 3.10.12, and didn't experience the crash.

@agronholm
Copy link
Owner

Maybe you could try to nuke your __pycache__ and try again?

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

I'm definitely running on master, latest commit is 6e96b75.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

I run straight from src directory in my working copy.

@agronholm
Copy link
Owner

Ok, so if you create a new virtualenv and install both packages, and run your test script (named test.py here):

python3.10 -m venv venv
venv/bin/pip install anyio git+https://github.com/agronholm/typeguard.git
venv/bin/python test.py

What happens? I get no errors.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

Oh, it turned out I didn't have the latest anyio.
On latest one there's no crash indeed.
For me, crash happens on anyio==3.6.2.

@agronholm
Copy link
Owner

Yes, I can reproduce it too on 3.6.2. I will investigate this. But to fix your immediate problem, can you upgrade? The problem doesn't occur on 3.7.1 either.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 8, 2023

Thank you very much!

Yes, upgrading helps.

@agronholm
Copy link
Owner

Found the offending annotation: Union[Iterable[ReadableBuffer], Iterable[str]]. The first union element does it, and it has to be in a union to trigger the problem.

@agronholm
Copy link
Owner

I have a failing unit test for this now.

@jolaf
Copy link
Contributor Author

jolaf commented Sep 9, 2023

Thanks!

kai687 added a commit to kai687/sphinxawesome-codelinter that referenced this issue Mar 25, 2024
Bumps [typeguard](https://github.com/agronholm/typeguard) from 4.1.5 to
4.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/agronholm/typeguard/releases">typeguard's
releases</a>.</em></p>
<blockquote>
<h2>4.2.1</h2>
<ul>
<li>Fixed missing <code>typing_extensions</code> dependency for Python
3.12 (<a
href="https://github.com/agronholm/typeguard/issues/444">#444</a>)</li>
<li>Fixed deprecation warning in the test suite on Python 3.13 (<a
href="https://github.com/agronholm/typeguard/issues/444">#444</a>)</li>
</ul>
<h2>4.2.0</h2>
<ul>
<li>Added support for specifying options for the pytest plugin via
pytest config files (<a
href="https://github.com/agronholm/typeguard/issues/440">#440</a>)</li>
<li>Avoid creating reference cycles when type checking unions (PR by
Shantanu)</li>
<li>Fixed <code>Optional[...]</code> being removed from the AST if it
was located within a subscript (<a
href="https://github.com/agronholm/typeguard/issues/442">#442</a>)</li>
<li>Fixed <code>TypedDict</code> from <code>typing_extensions</code> not
being recognized as one (<a
href="https://github.com/agronholm/typeguard/issues/443">#443</a>)</li>
<li>Fixed <code>typing</code> types (<code>dict[str, int]</code>,
<code>List[str]</code>, etc.) not passing checks against
<code>type</code> or <code>Type</code> (<a
href="https://github.com/agronholm/typeguard/issues/432">#432</a>,
PR by Yongxin Wang)</li>
<li>Fixed detection of optional fields (<code>NotRequired[...]</code>)
in <code>TypedDict</code> when using forward references (<a
href="https://github.com/agronholm/typeguard/issues/424">#424</a>)</li>
<li>Fixed mapping checks against Django's <code>MultiValueDict</code>
(<a
href="https://github.com/agronholm/typeguard/issues/419">#419</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/agronholm/typeguard/blob/master/docs/versionhistory.rst">typeguard's
changelog</a>.</em></p>
<blockquote>
<h1>Version history</h1>
<p>This library adheres to
<code>Semantic Versioning 2.0
&lt;https://semver.org/#semantic-versioning-200&gt;</code>_.</p>
<p><strong>4.2.1</strong> (2023-03-24)</p>
<ul>
<li>Fixed missing <code>typing_extensions</code> dependency for Python
3.12
(<code>[#444](agronholm/typeguard#444)
&lt;https://github.com/agronholm/typeguard/issues/444&gt;</code>_)</li>
<li>Fixed deprecation warning in the test suite on Python 3.13
(<code>[#444](agronholm/typeguard#444)
&lt;https://github.com/agronholm/typeguard/issues/444&gt;</code>_)</li>
</ul>
<p><strong>4.2.0</strong> (2023-03-23)</p>
<ul>
<li>Added support for specifying options for the pytest plugin via
pytest config files
(<code>[#440](agronholm/typeguard#440)
&lt;https://github.com/agronholm/typeguard/issues/440&gt;</code>_)</li>
<li>Avoid creating reference cycles when type checking unions (PR by
Shantanu)</li>
<li>Fixed <code>Optional[...]</code> being removed from the AST if it
was located within a
subscript
(<code>[#442](agronholm/typeguard#442)
&lt;https://github.com/agronholm/typeguard/issues/442&gt;</code>_)</li>
<li>Fixed <code>TypedDict</code> from <code>typing_extensions</code> not
being recognized as one
(<code>[#443](agronholm/typeguard#443)
&lt;https://github.com/agronholm/typeguard/issues/443&gt;</code>_)</li>
<li>Fixed <code>typing</code> types (<code>dict[str, int]</code>,
<code>List[str]</code>, etc.) not passing checks
against <code>type</code> or <code>Type</code>
(<code>[#432](agronholm/typeguard#432)
&lt;https://github.com/agronholm/typeguard/issues/432&gt;</code>_, PR by
Yongxin Wang)</li>
<li>Fixed detection of optional fields (<code>NotRequired[...]</code>)
in <code>TypedDict</code> when using
forward references
(<code>[#424](agronholm/typeguard#424)
&lt;https://github.com/agronholm/typeguard/issues/424&gt;</code>_)</li>
<li>Fixed mapping checks against Django's <code>MultiValueDict</code>
(<code>[#419](agronholm/typeguard#419)
&lt;https://github.com/agronholm/typeguard/issues/419&gt;</code>_)</li>
</ul>
<p><strong>4.1.5</strong> (2023-09-11)</p>
<ul>
<li>Fixed <code>Callable</code> erroneously rejecting a callable that
has the requested amount of
positional arguments but they have defaults
(<code>[#400](agronholm/typeguard#400)
&lt;https://github.com/agronholm/typeguard/issues/400&gt;</code>_)</li>
<li>Fixed a regression introduced in v4.1.4 where the elements of
<code>Literal</code> got quotes
removed from them by the AST transformer
(<code>[#399](agronholm/typeguard#399)
&lt;https://github.com/agronholm/typeguard/issues/399&gt;</code>_)</li>
</ul>
<p><strong>4.1.4</strong> (2023-09-10)</p>
<ul>
<li>Fixed <code>AttributeError</code> where the transformer removed
elements from a PEP 604 union
(<code>[#384](agronholm/typeguard#384)
&lt;https://github.com/agronholm/typeguard/issues/384&gt;</code>_)</li>
<li>Fixed <code>AttributeError: 'Subscript' object has no attribute
'slice'</code> when
encountering an annotation with a subscript containing an ignored type
(imported
within an <code>if TYPE_CHECKING:</code> block)
(<code>[#397](agronholm/typeguard#397)
&lt;https://github.com/agronholm/typeguard/issues/397&gt;</code>_)</li>
<li>Fixed type checking not being skipped when the target is a union
(PEP 604 or
<code>typing.Union</code>) where one of the elements is an ignored type
(shadowed by an
argument, variable assignment or an <code>if TYPE_CHECKING</code>
import)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/agronholm/typeguard/commit/b707a58b3b83e1fb1d2ce38457b6abc157201295"><code>b707a58</code></a>
Added release date</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/8ba593325b2afbe40c4cfe4536230b434b5902d2"><code>8ba5933</code></a>
Added changelog entry for <a
href="https://github.com/agronholm/typeguard/issues/444">#444</a></li>
<li><a
href="https://github.com/agronholm/typeguard/commit/79f968fbcd15a8e5b5be2c05cd4421d654a8505e"><code>79f968f</code></a>
Skip AnyStr tests on Python 3.13+</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/a0f4594ba58db3083481ffa0ca981da6e338b6f1"><code>a0f4594</code></a>
Fixed deprecation warning about <code>@no_type_check_decorator</code> on
Python 3.13</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/286f86d9268e079e01185b98cebc63e66909096d"><code>286f86d</code></a>
Updated the typing_extensions dependency</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/afebd5dcb49df979167e07e0ba65a8f7c50370c5"><code>afebd5d</code></a>
Updated GitHub actions</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/5eae2642c8859bc8706d80c55cb99c3740921332"><code>5eae264</code></a>
Added release date</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/d51d8bcfe26c4983eeff601067aa7febc5add00f"><code>d51d8bc</code></a>
Fixed pytest plugin tests</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/ded1a04f0c990c1e901a9d0734a63337a76f3e5b"><code>ded1a04</code></a>
Added support for specifying options for the pytest plugin via pytest
config ...</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/3c8d46f68ec6ced8e89d57f5f3b8fcabb8ab2773"><code>3c8d46f</code></a>
Fixed mapping checks against Django's MultiValueDict</li>
<li>Additional commits viewable in <a
href="https://github.com/agronholm/typeguard/compare/4.1.5...4.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typeguard&package-manager=pip&previous-version=4.1.5&new-version=4.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>
seumoose added a commit to seumoose/example-python-package that referenced this issue Apr 17, 2024
Bumps [typeguard](https://github.com/agronholm/typeguard) from 4.1.5 to
4.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/agronholm/typeguard/releases">typeguard's
releases</a>.</em></p>
<blockquote>
<h2>4.2.1</h2>
<ul>
<li>Fixed missing <code>typing_extensions</code> dependency for Python
3.12 (<a
href="https://github.com/agronholm/typeguard/issues/444">#444</a>)</li>
<li>Fixed deprecation warning in the test suite on Python 3.13 (<a
href="https://github.com/agronholm/typeguard/issues/444">#444</a>)</li>
</ul>
<h2>4.2.0</h2>
<ul>
<li>Added support for specifying options for the pytest plugin via
pytest config files (<a
href="https://github.com/agronholm/typeguard/issues/440">#440</a>)</li>
<li>Avoid creating reference cycles when type checking unions (PR by
Shantanu)</li>
<li>Fixed <code>Optional[...]</code> being removed from the AST if it
was located within a subscript (<a
href="https://github.com/agronholm/typeguard/issues/442">#442</a>)</li>
<li>Fixed <code>TypedDict</code> from <code>typing_extensions</code> not
being recognized as one (<a
href="https://github.com/agronholm/typeguard/issues/443">#443</a>)</li>
<li>Fixed <code>typing</code> types (<code>dict[str, int]</code>,
<code>List[str]</code>, etc.) not passing checks against
<code>type</code> or <code>Type</code> (<a
href="https://github.com/agronholm/typeguard/issues/432">#432</a>,
PR by Yongxin Wang)</li>
<li>Fixed detection of optional fields (<code>NotRequired[...]</code>)
in <code>TypedDict</code> when using forward references (<a
href="https://github.com/agronholm/typeguard/issues/424">#424</a>)</li>
<li>Fixed mapping checks against Django's <code>MultiValueDict</code>
(<a
href="https://github.com/agronholm/typeguard/issues/419">#419</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/agronholm/typeguard/blob/master/docs/versionhistory.rst">typeguard's
changelog</a>.</em></p>
<blockquote>
<h1>Version history</h1>
<p>This library adheres to
<code>Semantic Versioning 2.0
&lt;https://semver.org/#semantic-versioning-200&gt;</code>_.</p>
<p><strong>4.2.1</strong> (2023-03-24)</p>
<ul>
<li>Fixed missing <code>typing_extensions</code> dependency for Python
3.12
(<code>[#444](agronholm/typeguard#444)
&lt;https://github.com/agronholm/typeguard/issues/444&gt;</code>_)</li>
<li>Fixed deprecation warning in the test suite on Python 3.13
(<code>[#444](agronholm/typeguard#444)
&lt;https://github.com/agronholm/typeguard/issues/444&gt;</code>_)</li>
</ul>
<p><strong>4.2.0</strong> (2023-03-23)</p>
<ul>
<li>Added support for specifying options for the pytest plugin via
pytest config files
(<code>[#440](agronholm/typeguard#440)
&lt;https://github.com/agronholm/typeguard/issues/440&gt;</code>_)</li>
<li>Avoid creating reference cycles when type checking unions (PR by
Shantanu)</li>
<li>Fixed <code>Optional[...]</code> being removed from the AST if it
was located within a
subscript
(<code>[#442](agronholm/typeguard#442)
&lt;https://github.com/agronholm/typeguard/issues/442&gt;</code>_)</li>
<li>Fixed <code>TypedDict</code> from <code>typing_extensions</code> not
being recognized as one
(<code>[#443](agronholm/typeguard#443)
&lt;https://github.com/agronholm/typeguard/issues/443&gt;</code>_)</li>
<li>Fixed <code>typing</code> types (<code>dict[str, int]</code>,
<code>List[str]</code>, etc.) not passing checks
against <code>type</code> or <code>Type</code>
(<code>[#432](agronholm/typeguard#432)
&lt;https://github.com/agronholm/typeguard/issues/432&gt;</code>_, PR by
Yongxin Wang)</li>
<li>Fixed detection of optional fields (<code>NotRequired[...]</code>)
in <code>TypedDict</code> when using
forward references
(<code>[#424](agronholm/typeguard#424)
&lt;https://github.com/agronholm/typeguard/issues/424&gt;</code>_)</li>
<li>Fixed mapping checks against Django's <code>MultiValueDict</code>
(<code>[#419](agronholm/typeguard#419)
&lt;https://github.com/agronholm/typeguard/issues/419&gt;</code>_)</li>
</ul>
<p><strong>4.1.5</strong> (2023-09-11)</p>
<ul>
<li>Fixed <code>Callable</code> erroneously rejecting a callable that
has the requested amount of
positional arguments but they have defaults
(<code>[#400](agronholm/typeguard#400)
&lt;https://github.com/agronholm/typeguard/issues/400&gt;</code>_)</li>
<li>Fixed a regression introduced in v4.1.4 where the elements of
<code>Literal</code> got quotes
removed from them by the AST transformer
(<code>[#399](agronholm/typeguard#399)
&lt;https://github.com/agronholm/typeguard/issues/399&gt;</code>_)</li>
</ul>
<p><strong>4.1.4</strong> (2023-09-10)</p>
<ul>
<li>Fixed <code>AttributeError</code> where the transformer removed
elements from a PEP 604 union
(<code>[#384](agronholm/typeguard#384)
&lt;https://github.com/agronholm/typeguard/issues/384&gt;</code>_)</li>
<li>Fixed <code>AttributeError: 'Subscript' object has no attribute
'slice'</code> when
encountering an annotation with a subscript containing an ignored type
(imported
within an <code>if TYPE_CHECKING:</code> block)
(<code>[#397](agronholm/typeguard#397)
&lt;https://github.com/agronholm/typeguard/issues/397&gt;</code>_)</li>
<li>Fixed type checking not being skipped when the target is a union
(PEP 604 or
<code>typing.Union</code>) where one of the elements is an ignored type
(shadowed by an
argument, variable assignment or an <code>if TYPE_CHECKING</code>
import)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/agronholm/typeguard/commit/b707a58b3b83e1fb1d2ce38457b6abc157201295"><code>b707a58</code></a>
Added release date</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/8ba593325b2afbe40c4cfe4536230b434b5902d2"><code>8ba5933</code></a>
Added changelog entry for <a
href="https://github.com/agronholm/typeguard/issues/444">#444</a></li>
<li><a
href="https://github.com/agronholm/typeguard/commit/79f968fbcd15a8e5b5be2c05cd4421d654a8505e"><code>79f968f</code></a>
Skip AnyStr tests on Python 3.13+</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/a0f4594ba58db3083481ffa0ca981da6e338b6f1"><code>a0f4594</code></a>
Fixed deprecation warning about <code>@no_type_check_decorator</code> on
Python 3.13</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/286f86d9268e079e01185b98cebc63e66909096d"><code>286f86d</code></a>
Updated the typing_extensions dependency</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/afebd5dcb49df979167e07e0ba65a8f7c50370c5"><code>afebd5d</code></a>
Updated GitHub actions</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/5eae2642c8859bc8706d80c55cb99c3740921332"><code>5eae264</code></a>
Added release date</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/d51d8bcfe26c4983eeff601067aa7febc5add00f"><code>d51d8bc</code></a>
Fixed pytest plugin tests</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/ded1a04f0c990c1e901a9d0734a63337a76f3e5b"><code>ded1a04</code></a>
Added support for specifying options for the pytest plugin via pytest
config ...</li>
<li><a
href="https://github.com/agronholm/typeguard/commit/3c8d46f68ec6ced8e89d57f5f3b8fcabb8ab2773"><code>3c8d46f</code></a>
Fixed mapping checks against Django's MultiValueDict</li>
<li>Additional commits viewable in <a
href="https://github.com/agronholm/typeguard/compare/4.1.5...4.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=typeguard&package-manager=pip&previous-version=4.1.5&new-version=4.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Seumas Goddard <22810975+seumoose@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants