class Handle:
"""Object returned by callback registration methods."""
- __slots__ = ['_callback', '_args', '_cancelled', '_loop']
+ __slots__ = ['_callback', '_args', '_cancelled', '_loop', '__weakref__']
def __init__(self, callback, args, loop):
assert not isinstance(callback, Handle), 'A Handle is not a callback'
class CoroWrapper:
# Wrapper for coroutine in _DEBUG mode.
- __slots__ = ['gen', 'func', '__name__', '__doc__']
+ __slots__ = ['gen', 'func', '__name__', '__doc__', '__weakref__']
def __init__(self, gen, func):
assert inspect.isgenerator(gen), gen
import errno
import unittest
from unittest import mock
+import weakref
from test import support # find_unused_port, IPV6_ENABLED, TEST_HOME_DIR
'handle': h
})
+ def test_handle_weakref(self):
+ wd = weakref.WeakValueDictionary()
+ h = asyncio.Handle(lambda: None, (), object())
+ wd['h'] = h # Would fail without __weakref__ slot.
+
class TimerTests(unittest.TestCase):
import os.path
import types
import unittest
+import weakref
from test.script_helper import assert_python_ok
import asyncio
self.assertEqual(call((1, 2)), (1, 2))
self.assertEqual(call('spam'), 'spam')
+ def test_corowrapper_weakref(self):
+ wd = weakref.WeakValueDictionary()
+ def foo(): yield from []
+ cw = asyncio.tasks.CoroWrapper(foo(), foo)
+ wd['cw'] = cw # Would fail without __weakref__ slot.
+ cw.gen = None # Suppress warning from __del__.
+
class GatherTestsBase: