Skip to content

Commit

Permalink
bpo-23819: asyncio: Replace AssertionError with TypeError where it ma…
Browse files Browse the repository at this point in the history
…kes sense (GH-29894)
  • Loading branch information
kumaraditya303 committed Dec 6, 2021
1 parent 8518ee3 commit 265918b
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 9 deletions.
4 changes: 4 additions & 0 deletions Lib/asyncio/base_events.py
Expand Up @@ -706,6 +706,8 @@ def call_later(self, delay, callback, *args, context=None):
Any positional arguments after the callback will be passed to
the callback when it is called.
"""
if delay is None:
raise TypeError('delay must not be None')
timer = self.call_at(self.time() + delay, callback, *args,
context=context)
if timer._source_traceback:
Expand All @@ -717,6 +719,8 @@ def call_at(self, when, callback, *args, context=None):
Absolute time corresponds to the event loop's time() method.
"""
if when is None:
raise TypeError("when cannot be None")
self._check_closed()
if self._debug:
self._check_thread()
Expand Down
7 changes: 4 additions & 3 deletions Lib/asyncio/events.py
Expand Up @@ -101,7 +101,6 @@ class TimerHandle(Handle):
__slots__ = ['_scheduled', '_when']

def __init__(self, when, callback, args, loop, context=None):
assert when is not None
super().__init__(callback, args, loop, context)
if self._source_traceback:
del self._source_traceback[-1]
Expand Down Expand Up @@ -661,7 +660,8 @@ def get_event_loop(self):
def set_event_loop(self, loop):
"""Set the event loop."""
self._local._set_called = True
assert loop is None or isinstance(loop, AbstractEventLoop)
if loop is not None and not isinstance(loop, AbstractEventLoop):
raise TypeError(f"loop must be an instance of AbstractEventLoop or None, not '{type(loop).__name__}'")
self._local._loop = loop

def new_event_loop(self):
Expand Down Expand Up @@ -745,7 +745,8 @@ def set_event_loop_policy(policy):
If policy is None, the default policy is restored."""
global _event_loop_policy
assert policy is None or isinstance(policy, AbstractEventLoopPolicy)
if policy is not None and not isinstance(policy, AbstractEventLoopPolicy):
raise TypeError(f"policy must be an instance of AbstractEventLoopPolicy or None, not '{type(policy).__name__}'")
_event_loop_policy = policy


Expand Down
4 changes: 4 additions & 0 deletions Lib/test/test_asyncio/test_base_events.py
Expand Up @@ -255,6 +255,8 @@ def cb():
self.assertIsInstance(h, asyncio.TimerHandle)
self.assertIn(h, self.loop._scheduled)
self.assertNotIn(h, self.loop._ready)
with self.assertRaises(TypeError, msg="delay must not be None"):
self.loop.call_later(None, cb)

def test_call_later_negative_delays(self):
calls = []
Expand Down Expand Up @@ -286,6 +288,8 @@ def cb():
# tolerate a difference of +800 ms because some Python buildbots
# are really slow
self.assertLessEqual(dt, 0.9, dt)
with self.assertRaises(TypeError, msg="when cannot be None"):
self.loop.call_at(None, cb)

def check_thread(self, loop, debug):
def cb():
Expand Down
8 changes: 2 additions & 6 deletions Lib/test/test_asyncio/test_events.py
Expand Up @@ -2322,10 +2322,6 @@ def callback(*args):
self.assertIsNone(h._callback)
self.assertIsNone(h._args)

# when cannot be None
self.assertRaises(AssertionError,
asyncio.TimerHandle, None, callback, args,
self.loop)

def test_timer_repr(self):
self.loop.get_debug.return_value = False
Expand Down Expand Up @@ -2592,7 +2588,7 @@ def test_set_event_loop(self):
policy = asyncio.DefaultEventLoopPolicy()
old_loop = policy.get_event_loop()

self.assertRaises(AssertionError, policy.set_event_loop, object())
self.assertRaises(TypeError, policy.set_event_loop, object())

loop = policy.new_event_loop()
policy.set_event_loop(loop)
Expand All @@ -2608,7 +2604,7 @@ def test_get_event_loop_policy(self):

def test_set_event_loop_policy(self):
self.assertRaises(
AssertionError, asyncio.set_event_loop_policy, object())
TypeError, asyncio.set_event_loop_policy, object())

old_policy = asyncio.get_event_loop_policy()

Expand Down
@@ -0,0 +1 @@
Replaced asserts with exceptions in asyncio, patch by Kumar Aditya.

0 comments on commit 265918b

Please sign in to comment.