-
Notifications
You must be signed in to change notification settings - Fork 137
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
Fixed debugger quit not working when inside a task group #778
Conversation
from collections.abc import Iterator | ||
from contextlib import ExitStack, contextmanager | ||
from inspect import isasyncgenfunction, iscoroutinefunction | ||
from typing import Any, Dict, Tuple, cast | ||
|
||
import pytest | ||
import sniffio | ||
from _pytest.outcomes import Exit |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's publicly available at pytest.exit.Exception
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pytest.exit
is a function, not a module.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh, I misunderstood. The exception is somehow attached to the function?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The type annotation is off the charts https://github.com/pytest-dev/pytest/blob/9a444d113658be6ccb8dc9f57ed118a1ef17c94c/src/_pytest/outcomes.py#L105
runner.run_test(pyfuncitem.obj, testargs) | ||
except ExceptionGroup as excgrp: | ||
for exc in iterate_exceptions(excgrp): | ||
if isinstance(exc, (Exit, KeyboardInterrupt, SystemExit)): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Technically I feel this is a pytest bug and should be fixed there
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Eventually, yes, but for the time being I feel this is a big quality-of-life improvement to the AnyIO testing experience.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah definitely
Thanks! |
Changes
If you set a breakpoint inside a task group, quitting the debugger won't exit the pytest test session, but instead fails the current test. These changes find the exit exception in an exception group, and raise just that, ignoring the rest of the exceptions (if any).
Checklist
If this is a user-facing code change, like a bugfix or a new feature, please ensure that
you've fulfilled the following conditions (where applicable):
tests/
) added which would fail without your patchdocs/
, in case of behavior changes or newfeatures)
docs/versionhistory.rst
).If this is a trivial change, like a typo fix or a code reformatting, then you can ignore
these instructions.
Updating the changelog
If there are no entries after the last release, use
**UNRELEASED**
as the version.If, say, your patch fixes issue #123, the entry should look like this:
* Fix big bad boo-boo in task groups (#123 <https://github.com/agronholm/anyio/issues/123>_; PR by @yourgithubaccount)
If there's no issue linked, just link to your pull request instead by updating the
changelog after you've created the PR.