mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
bpo-30266: support "= None" pattern in AbstractContextManager (#1448)
contextlib.AbstractContextManager now supports anti-registration by setting __enter__ = None or __exit__ = None, following the pattern introduced in bpo-25958.
This commit is contained in:
parent
3b5cf85edc
commit
57161aac5e
3 changed files with 16 additions and 3 deletions
|
@ -1,6 +1,7 @@
|
|||
"""Utilities for with-statement contexts. See PEP 343."""
|
||||
import abc
|
||||
import sys
|
||||
import _collections_abc
|
||||
from collections import deque
|
||||
from functools import wraps
|
||||
|
||||
|
@ -25,9 +26,7 @@ class AbstractContextManager(abc.ABC):
|
|||
@classmethod
|
||||
def __subclasshook__(cls, C):
|
||||
if cls is AbstractContextManager:
|
||||
if (any("__enter__" in B.__dict__ for B in C.__mro__) and
|
||||
any("__exit__" in B.__dict__ for B in C.__mro__)):
|
||||
return True
|
||||
return _collections_abc._check_methods(C, "__enter__", "__exit__")
|
||||
return NotImplemented
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue