coros.event and queue simplifed exception raising: use getcurrent().throw function, keep exception as a tuple
This commit is contained in:
@@ -167,9 +167,7 @@ class event(object):
|
|||||||
finally:
|
finally:
|
||||||
self._waiters.pop(api.getcurrent(), None)
|
self._waiters.pop(api.getcurrent(), None)
|
||||||
if self._exc is not None:
|
if self._exc is not None:
|
||||||
if isinstance(self._exc, tuple):
|
api.getcurrent().throw(*self._exc)
|
||||||
raise self._exc[0], self._exc[1], self._exc[2]
|
|
||||||
raise self._exc
|
|
||||||
return self._result
|
return self._result
|
||||||
|
|
||||||
def cancel(self, waiter):
|
def cancel(self, waiter):
|
||||||
@@ -244,18 +242,16 @@ class event(object):
|
|||||||
"""
|
"""
|
||||||
assert self._result is NOT_USED, 'Trying to re-send() an already-triggered event.'
|
assert self._result is NOT_USED, 'Trying to re-send() an already-triggered event.'
|
||||||
self._result = result
|
self._result = result
|
||||||
|
if exc is not None and not isinstance(exc, tuple):
|
||||||
|
exc = (exc, )
|
||||||
self._exc = exc
|
self._exc = exc
|
||||||
hub = api.get_hub()
|
hub = api.get_hub()
|
||||||
if exc is None:
|
if exc is None:
|
||||||
for waiter in self._waiters:
|
for waiter in self._waiters:
|
||||||
hub.schedule_call(0, waiter.switch, self._result)
|
hub.schedule_call(0, waiter.switch, self._result)
|
||||||
else:
|
else:
|
||||||
if isinstance(self._exc, tuple):
|
for waiter in self._waiters:
|
||||||
for waiter in self._waiters:
|
hub.schedule_call(0, waiter.throw, *self._exc)
|
||||||
hub.schedule_call(0, waiter.throw, *self._exc)
|
|
||||||
else:
|
|
||||||
for waiter in self._waiters:
|
|
||||||
hub.schedule_call(0, waiter.throw, self._exc)
|
|
||||||
|
|
||||||
def send_exception(self, *args):
|
def send_exception(self, *args):
|
||||||
# the arguments and the same as for greenlet.throw
|
# the arguments and the same as for greenlet.throw
|
||||||
@@ -491,13 +487,7 @@ class multievent(object):
|
|||||||
if self.items:
|
if self.items:
|
||||||
result, exc = self.items.popleft()
|
result, exc = self.items.popleft()
|
||||||
if exc is not None:
|
if exc is not None:
|
||||||
if isinstance(exc, tuple):
|
api.getcurrent().throw(*exc)
|
||||||
if len(exc)==1:
|
|
||||||
exc += (None, None,)
|
|
||||||
elif len(exc)==2:
|
|
||||||
exc += (None, )
|
|
||||||
raise exc[0], exc[1], exc[2]
|
|
||||||
raise exc
|
|
||||||
return result
|
return result
|
||||||
else:
|
else:
|
||||||
self._waiters[api.getcurrent()] = True
|
self._waiters[api.getcurrent()] = True
|
||||||
@@ -513,12 +503,10 @@ class multievent(object):
|
|||||||
for waiter in self._waiters:
|
for waiter in self._waiters:
|
||||||
hub.schedule_call(0, waiter.switch, result)
|
hub.schedule_call(0, waiter.switch, result)
|
||||||
else:
|
else:
|
||||||
if isinstance(exc, tuple):
|
if not isinstance(exc, tuple):
|
||||||
for waiter in self._waiters:
|
exc = (exc, )
|
||||||
hub.schedule_call(0, waiter.throw, *exc)
|
for waiter in self._waiters:
|
||||||
else:
|
hub.schedule_call(0, waiter.throw, *exc)
|
||||||
for waiter in self._waiters:
|
|
||||||
hub.schedule_call(0, waiter.throw, exc)
|
|
||||||
else:
|
else:
|
||||||
self.items.append((result, exc))
|
self.items.append((result, exc))
|
||||||
|
|
||||||
@@ -1232,6 +1220,8 @@ class queue(object):
|
|||||||
will raise that exception.
|
will raise that exception.
|
||||||
Otherwise, the corresponding wait() will return result (default None).
|
Otherwise, the corresponding wait() will return result (default None).
|
||||||
"""
|
"""
|
||||||
|
if exc is not None and not isinstance(exc, tuple):
|
||||||
|
exc = (exc, )
|
||||||
self.items.append((result, exc))
|
self.items.append((result, exc))
|
||||||
self.sem.release()
|
self.sem.release()
|
||||||
|
|
||||||
@@ -1249,13 +1239,7 @@ class queue(object):
|
|||||||
self.sem.acquire()
|
self.sem.acquire()
|
||||||
result, exc = self.items.popleft()
|
result, exc = self.items.popleft()
|
||||||
if exc is not None:
|
if exc is not None:
|
||||||
if isinstance(exc, tuple):
|
api.getcurrent().throw(*exc)
|
||||||
if len(exc)==1:
|
|
||||||
exc += (None, None,)
|
|
||||||
elif len(exc)==2:
|
|
||||||
exc += (None, )
|
|
||||||
raise exc[0], exc[1], exc[2]
|
|
||||||
raise exc
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def ready(self):
|
def ready(self):
|
||||||
|
Reference in New Issue
Block a user