mirror of
https://github.com/python/cpython
synced 2024-09-18 20:01:39 +00:00
gh-105726: Add __slots__
to AbstractContextManager
and AbstractAsyncContextManager
(#106771)
Co-authored-by: Kumar Aditya <kumaraditya@python.org>
This commit is contained in:
parent
cc25ca16ee
commit
55408f86d7
|
@ -20,6 +20,8 @@ class AbstractContextManager(abc.ABC):
|
|||
|
||||
__class_getitem__ = classmethod(GenericAlias)
|
||||
|
||||
__slots__ = ()
|
||||
|
||||
def __enter__(self):
|
||||
"""Return `self` upon entering the runtime context."""
|
||||
return self
|
||||
|
@ -42,6 +44,8 @@ class AbstractAsyncContextManager(abc.ABC):
|
|||
|
||||
__class_getitem__ = classmethod(GenericAlias)
|
||||
|
||||
__slots__ = ()
|
||||
|
||||
async def __aenter__(self):
|
||||
"""Return `self` upon entering the runtime context."""
|
||||
return self
|
||||
|
|
|
@ -24,6 +24,16 @@ def __exit__(self, *args):
|
|||
manager = DefaultEnter()
|
||||
self.assertIs(manager.__enter__(), manager)
|
||||
|
||||
def test_slots(self):
|
||||
class DefaultContextManager(AbstractContextManager):
|
||||
__slots__ = ()
|
||||
|
||||
def __exit__(self, *args):
|
||||
super().__exit__(*args)
|
||||
|
||||
with self.assertRaises(AttributeError):
|
||||
DefaultContextManager().var = 42
|
||||
|
||||
def test_exit_is_abstract(self):
|
||||
class MissingExit(AbstractContextManager):
|
||||
pass
|
||||
|
|
|
@ -37,6 +37,18 @@ async def __aexit__(self, *args):
|
|||
async with manager as context:
|
||||
self.assertIs(manager, context)
|
||||
|
||||
@_async_test
|
||||
async def test_slots(self):
|
||||
class DefaultAsyncContextManager(AbstractAsyncContextManager):
|
||||
__slots__ = ()
|
||||
|
||||
async def __aexit__(self, *args):
|
||||
await super().__aexit__(*args)
|
||||
|
||||
with self.assertRaises(AttributeError):
|
||||
manager = DefaultAsyncContextManager()
|
||||
manager.var = 42
|
||||
|
||||
@_async_test
|
||||
async def test_async_gen_propagates_generator_exit(self):
|
||||
# A regression test for https://bugs.python.org/issue33786.
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
Added ``__slots__`` to :class:`contextlib.AbstractContextManager` and :class:`contextlib.AbstractAsyncContextManager`
|
||||
so that child classes can use ``__slots__``.
|
||||
|
Loading…
Reference in a new issue