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

AssertionError only with versions 2.4.1 and 2.4.2 #100

Closed
rgeronimi opened this issue Sep 30, 2024 · 14 comments · Fixed by #101
Closed

AssertionError only with versions 2.4.1 and 2.4.2 #100

rgeronimi opened this issue Sep 30, 2024 · 14 comments · Fixed by #101
Labels
bug Something isn't working

Comments

@rgeronimi
Copy link

rgeronimi commented Sep 30, 2024

Describe the bug
Running the most recent versions of aiohappyeyeballs (2.4.2) with aiohttp triggers an AssertionError within aiohappyeyeballs:

Traceback (most recent call last):
  File "/opt/homebrew/Caskroom/miniforge/base/envs/work/lib/python3.12/site-packages/aiohappyeyeballs/_staggered.py", line 85, in run_one_coro
    assert winner_index is None  # noqa: S101
           ^^^^^^^^^^^^^^^^^^^^
AssertionError

Running the exact same code with aiohappyeyeballs 2.4.1 or 2.4.0 triggers no such bug.

To Reproduce
No clear steps, as this is generated by a crawler with a lot of URIs. Could try to extract a simple case if this is necessary.

Additional context
Python artifacts:

  • python 3.12.6
  • aiohttp 3.10.8
  • aiohappyeyeballs 2.4.2

Installed through miniforge:

  • conda-forge
  • mamba 1.5.10
  • conda 24.7.1

OS:

  • MacOS Sequoia 15.0
@rgeronimi rgeronimi added the bug Something isn't working label Sep 30, 2024
@rgeronimi rgeronimi changed the title AssertionError AssertionError only with version 2.4.2 Sep 30, 2024
@webknjaz
Copy link
Member

Bisecting would be useful, if course. It sounds it might be necessary to use a fuzzer to reproduce. I wonder if writing hypothesis tests could reveal some corner cases...

@rgeronimi
Copy link
Author

I did bisect, and it's definitely 2.4.2 - the new classes added there are causing this.

@bdraco
Copy link
Member

bdraco commented Sep 30, 2024

It would be great if you could come up with a minimum reproducer. This code is copied from cpython main so we will need to let them know as well.

@webknjaz
Copy link
Member

Within 2.4.2, do we have a specific commit causing this?

@webknjaz
Copy link
Member

Also, is this serious enough to yank the version from PyPI?

@rgeronimi
Copy link
Author

rgeronimi commented Sep 30, 2024

As far as I am concerned, I had to rollback to 2.4.1. I just can't use 2.4.2, it crashes immediately, again and again. Unfortunately, I can't today dig into this (extracting a reproducible case) but clearly 2.4.2 is not functional, at least for aiohttp client use cases similar to mine (crawling a few websites, only a few hundred pages per day).
Note: I make a very standard use of aiohttp or python asyncio library and runtime. No hack, no side threads, no calls to undocumented APIs, nothing out of what is stated in the aiohttp documentation. This code has been very stable over the last 2 years.

@rgeronimi
Copy link
Author

rgeronimi commented Sep 30, 2024

Within 2.4.2, do we have a specific commit causing this?

2.4.2 is made of 2 commits:
v2.4.1...v2.4.2

The second one (04dbbe5) is dedicated only to updating the version numbers from 2.4.1 to 2.4.2.
So it is the first commit (#95) which is responsible for the bug

@rgeronimi
Copy link
Author

rgeronimi commented Sep 30, 2024

I made a big mistake (sorry for that I relied on the conda installer and did not see it did not have 2.4.1 available) - I thought I had tested 2.4.1 successfully but my package installer (conda forge) had installed 2.4.0.

After re-running everything, it is indeed 2.4.1 which is faulty. It has several commits so I don't know yet which one is wrong (I will have to bisect)

@bdraco
Copy link
Member

bdraco commented Sep 30, 2024

Even if we revert, we end up with the code that is going out in the next cpython 3.12 since that’s where it comes from

I don’t see a solution other than rolling our own to fix the problem

@bdraco
Copy link
Member

bdraco commented Sep 30, 2024

I can reproduce with the tests I added in #101

tests/test_staggered.py::test_multiple_winners FAILED                                                                                                                                             [ 66%]
tests/test_staggered.py::test_multiple_winners_eager_task_factory FAILED                                                                                                                          [100%]/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/coverage/inorout.py:507: CoverageWarning: Module aiohappyeyeballs was never imported. (module-not-imported)
  self.warn(f"Module {pkg} was never imported.", slug="module-not-imported")
/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/coverage/control.py:883: CoverageWarning: No data was collected. (no-data-collected)
  self._warn("No data was collected.", slug="no-data-collected")
WARNING: Failed to generate report: No data to report.

/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pytest_cov/plugin.py:308: CovReportWarning: Failed to generate report: No data to report.

  warnings.warn(CovReportWarning(message))


=============================================================================================== FAILURES ================================================================================================
_________________________________________________________________________________________ test_multiple_winners _________________________________________________________________________________________
  + Exception Group Traceback (most recent call last):
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 341, in from_call
  |     result: Optional[TResult] = func()
  |                                 ^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 262, in <lambda>
  |     lambda: ihook(item=item, **kwds), when=when, reraise=reraise
  |             ^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in __call__
  |     return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
  |     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 152, in _multicall
  |     return outcome.get_result()
  |            ^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_result.py", line 114, in get_result
  |     raise exc.with_traceback(exc.__traceback__)
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
  |     res = hook_impl.function(*args)
  |           ^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 177, in pytest_runtest_call
  |     raise e
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 169, in pytest_runtest_call
  |     item.runtest()
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pytest_asyncio/plugin.py", line 431, in runtest
  |     super().runtest()
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/python.py", line 1792, in runtest
  |     self.ihook.pytest_pyfunc_call(pyfuncitem=self)
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in __call__
  |     return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
  |     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 152, in _multicall
  |     return outcome.get_result()
  |            ^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_result.py", line 114, in get_result
  |     raise exc.with_traceback(exc.__traceback__)
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
  |     res = hook_impl.function(*args)
  |           ^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/python.py", line 194, in pytest_pyfunc_call
  |     result = testfunction(**testargs)
  |              ^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pytest_asyncio/plugin.py", line 879, in inner
  |     _loop.run_until_complete(task)
  |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
  |     return future.result()
  |            ^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/aiohappyeyeballs/tests/test_staggered.py", line 49, in test_multiple_winners
  |     winner, index, excs = await task
  |                           ^^^^^^^^^^
  |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 91, in staggered_race
  |     async with tg:
  |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/taskgroups.py", line 145, in __aexit__
  |     raise me from None
  | ExceptionGroup: unhandled errors in a TaskGroup (3 sub-exceptions)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 79, in run_one_coro
    |     assert winner_index is None
    |            ^^^^^^^^^^^^^^^^^^^^
    | AssertionError
    +---------------- 2 ----------------
    | Traceback (most recent call last):
    |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 79, in run_one_coro
    |     assert winner_index is None
    |            ^^^^^^^^^^^^^^^^^^^^
    | AssertionError
    +---------------- 3 ----------------
    | Traceback (most recent call last):
    |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 79, in run_one_coro
    |     assert winner_index is None
    |            ^^^^^^^^^^^^^^^^^^^^
    | AssertionError
    +------------------------------------
_______________________________________________________________________________ test_multiple_winners_eager_task_factory ________________________________________________________________________________
  + Exception Group Traceback (most recent call last):
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 341, in from_call
  |     result: Optional[TResult] = func()
  |                                 ^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 262, in <lambda>
  |     lambda: ihook(item=item, **kwds), when=when, reraise=reraise
  |             ^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in __call__
  |     return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
  |     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 152, in _multicall
  |     return outcome.get_result()
  |            ^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_result.py", line 114, in get_result
  |     raise exc.with_traceback(exc.__traceback__)
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
  |     res = hook_impl.function(*args)
  |           ^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 177, in pytest_runtest_call
  |     raise e
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/runner.py", line 169, in pytest_runtest_call
  |     item.runtest()
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/python.py", line 1792, in runtest
  |     self.ihook.pytest_pyfunc_call(pyfuncitem=self)
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_hooks.py", line 493, in __call__
  |     return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_manager.py", line 115, in _hookexec
  |     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 152, in _multicall
  |     return outcome.get_result()
  |            ^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_result.py", line 114, in get_result
  |     raise exc.with_traceback(exc.__traceback__)
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pluggy/_callers.py", line 77, in _multicall
  |     res = hook_impl.function(*args)
  |           ^^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/_pytest/python.py", line 194, in pytest_pyfunc_call
  |     result = testfunction(**testargs)
  |              ^^^^^^^^^^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/aiohappyeyeballs/tests/test_staggered.py", line 86, in test_multiple_winners_eager_task_factory
  |     loop.run_until_complete(run())
  |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
  |     return future.result()
  |            ^^^^^^^^^^^^^^^
  |   File "/Users/bdraco/aiohappyeyeballs/tests/test_staggered.py", line 79, in run
  |     winner, index, excs = await task
  |                           ^^^^^^^^^^
  |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 91, in staggered_race
  |     async with tg:
  |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/taskgroups.py", line 145, in __aexit__
  |     raise me from None
  | ExceptionGroup: unhandled errors in a TaskGroup (3 sub-exceptions)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 79, in run_one_coro
    |     assert winner_index is None
    |            ^^^^^^^^^^^^^^^^^^^^
    | AssertionError
    +---------------- 2 ----------------
    | Traceback (most recent call last):
    |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 79, in run_one_coro
    |     assert winner_index is None
    |            ^^^^^^^^^^^^^^^^^^^^
    | AssertionError
    +---------------- 3 ----------------
    | Traceback (most recent call last):
    |   File "/opt/homebrew/Cellar/python@3.12/3.12.4/Frameworks/Python.framework/Versions/3.12/lib/python3.12/asyncio/staggered.py", line 79, in run_one_coro
    |     assert winner_index is None
    |            ^^^^^^^^^^^^^^^^^^^^
    | AssertionError
    +------------------------------------
=========================================================================================== warnings summary ============================================================================================
../Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pytest_cov/plugin.py:256
  /Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pytest_cov/plugin.py:256: PytestDeprecationWarning: The hookimpl CovPlugin.pytest_configure_node uses old-style configuration options (marks or attributes).
  Please use the pytest.hookimpl(optionalhook=True) decorator instead
   to configure the hooks.
   See https://docs.pytest.org/en/latest/deprecations.html#configuring-hook-specs-impls-using-markers
    def pytest_configure_node(self, node):

../Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pytest_cov/plugin.py:265
  /Users/bdraco/Library/Caches/pypoetry/virtualenvs/aiohappyeyeballs-Qn8ZZ1SN-py3.12/lib/python3.12/site-packages/pytest_cov/plugin.py:265: PytestDeprecationWarning: The hookimpl CovPlugin.pytest_testnodedown uses old-style configuration options (marks or attributes).
  Please use the pytest.hookimpl(optionalhook=True) decorator instead
   to configure the hooks.
   See https://docs.pytest.org/en/latest/deprecations.html#configuring-hook-specs-impls-using-markers
    def pytest_testnodedown(self, node, error):

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html

---------- coverage: platform darwin, python 3.12.4-final-0 ----------

======================================================================================== short test summary info ========================================================================================
FAILED tests/test_staggered.py::test_multiple_winners - ExceptionGroup: unhandled errors in a TaskGroup (3 sub-exceptions)
FAILED tests/test_staggered.py::test_multiple_winners_eager_task_factory - ExceptionGroup: unhandled errors in a TaskGroup (3 sub-exceptions)

@webknjaz
Copy link
Member

webknjaz commented Oct 1, 2024

I've marked 2.4.2 as yanked on PyPI.

@rgeronimi
Copy link
Author

I've marked 2.4.2 as yanked on PyPI.

2.4.1 is also contaminated by this bug (see analysis - and my initial mistake - above)

@rgeronimi rgeronimi changed the title AssertionError only with version 2.4.2 AssertionError only with versions 2.4.1 and 2.4.2 Oct 1, 2024
@webknjaz
Copy link
Member

webknjaz commented Oct 1, 2024

@bdraco deduced that it's not possible

@bdraco
Copy link
Member

bdraco commented Oct 1, 2024

The assertion line referenced in the opening text does not appear in 2.4.1

v2.4.0...v2.4.1

_staggered.py is not in 2.4.1
https://github.com/aio-libs/aiohappyeyeballs/tree/v2.4.1/src/aiohappyeyeballs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants