mirror of https://github.com/python/cpython
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
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -44,6 +44,16 @@ class TestAbstractContextManager(unittest.TestCase):
|
|||
|
||||
self.assertTrue(issubclass(DefaultEnter, AbstractContextManager))
|
||||
|
||||
class NoEnter(ManagerFromScratch):
|
||||
__enter__ = None
|
||||
|
||||
self.assertFalse(issubclass(NoEnter, AbstractContextManager))
|
||||
|
||||
class NoExit(ManagerFromScratch):
|
||||
__exit__ = None
|
||||
|
||||
self.assertFalse(issubclass(NoExit, AbstractContextManager))
|
||||
|
||||
|
||||
class ContextManagerTestCase(unittest.TestCase):
|
||||
|
||||
|
|
|
@ -410,6 +410,10 @@ Library
|
|||
- bpo-30048: Fixed ``Task.cancel()`` can be ignored when the task is
|
||||
running coroutine and the coroutine returned without any more ``await``.
|
||||
|
||||
- bpo-30266: contextlib.AbstractContextManager now supports anti-registration
|
||||
by setting __enter__ = None or __exit__ = None, following the pattern
|
||||
introduced in bpo-25958. Patch by Jelle Zijlstra.
|
||||
|
||||
- bpo-30340: Enhanced regular expressions optimization. This increased
|
||||
the performance of matching some patterns up to 25 times.
|
||||
|
||||
|
|
Loading…
Reference in New Issue