Context manager support for `contextvars.Context`
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 36k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Feature or enhancement
I would like to add __enter__ and __exit__ methods to contextvars.Context such that these two are mostly equivalent:
contextvars.copy_context().run(do_something_interesting)
and:
with contextvars.copy_context():
do_something_interesting()
Pitch
This makes it possible to combine Context enter/exit with other context managers:
import contextlib
import contextvars
@contextlib.contextmanager
def foo():
with contextvars.copy_context():
set_some_context_vars()
yield
My personal motivating interest is controlling ContextVar values in pytest fixtures. For example:
import contextvars
import pytest
import module_under_test
@pytest.fixture
def clean_slate():
with contextvars.copy_context():
module_under_test._internal_state_context_var.set(None)
yield
def test_foo(clean_slate):
assert not module_under_test.is_initialized()
Previous discussion
https://stackoverflow.com/q/59264158
Linked PRs
- gh-124773
- gh-124776
- gh-99634
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par lire la documentation de contextvars.Context et les exemples d’équivalence de l’issue, puis examinez les PR liés gh-124773, gh-124776 et gh-99634 avant de commencer. Le travail est terminé lorsque Context prend en charge l’utilisation demandée comme gestionnaire de contexte et que le comportement correspond à l’exemple existant de run(), y compris la composition avec d’autres gestionnaires de contexte.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- backend
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 25/100