bpo-34622: Extract asyncio exceptions into a separate module (GH-9141) · python/cpython@0baa72f (original) (raw)
1
1
`"""A Future class similar to the one in PEP 3148."""
`
2
2
``
3
3
`all = (
`
4
``
`-
'CancelledError', 'TimeoutError', 'InvalidStateError',
`
5
4
`'Future', 'wrap_future', 'isfuture',
`
6
5
`)
`
7
6
``
`@@ -12,12 +11,10 @@
`
12
11
``
13
12
`from . import base_futures
`
14
13
`from . import events
`
``
14
`+
from . import exceptions
`
15
15
`from . import format_helpers
`
16
16
``
17
17
``
18
``
`-
CancelledError = base_futures.CancelledError
`
19
``
`-
InvalidStateError = base_futures.InvalidStateError
`
20
``
`-
TimeoutError = base_futures.TimeoutError
`
21
18
`isfuture = base_futures.isfuture
`
22
19
``
23
20
``
`@@ -170,9 +167,9 @@ def result(self):
`
170
167
` the future is done and has an exception set, this exception is raised.
`
171
168
` """
`
172
169
`if self._state == _CANCELLED:
`
173
``
`-
raise CancelledError
`
``
170
`+
raise exceptions.CancelledError
`
174
171
`if self._state != _FINISHED:
`
175
``
`-
raise InvalidStateError('Result is not ready.')
`
``
172
`+
raise exceptions.InvalidStateError('Result is not ready.')
`
176
173
`self.__log_traceback = False
`
177
174
`if self._exception is not None:
`
178
175
`raise self._exception
`
`@@ -187,9 +184,9 @@ def exception(self):
`
187
184
` InvalidStateError.
`
188
185
` """
`
189
186
`if self._state == _CANCELLED:
`
190
``
`-
raise CancelledError
`
``
187
`+
raise exceptions.CancelledError
`
191
188
`if self._state != _FINISHED:
`
192
``
`-
raise InvalidStateError('Exception is not set.')
`
``
189
`+
raise exceptions.InvalidStateError('Exception is not set.')
`
193
190
`self.__log_traceback = False
`
194
191
`return self._exception
`
195
192
``
`@@ -231,7 +228,7 @@ def set_result(self, result):
`
231
228
` InvalidStateError.
`
232
229
` """
`
233
230
`if self._state != _PENDING:
`
234
``
`-
raise InvalidStateError('{}: {!r}'.format(self._state, self))
`
``
231
`+
raise exceptions.InvalidStateError(f'{self._state}: {self!r}')
`
235
232
`self._result = result
`
236
233
`self._state = _FINISHED
`
237
234
`self.__schedule_callbacks()
`
`@@ -243,7 +240,7 @@ def set_exception(self, exception):
`
243
240
` InvalidStateError.
`
244
241
` """
`
245
242
`if self._state != _PENDING:
`
246
``
`-
raise InvalidStateError('{}: {!r}'.format(self._state, self))
`
``
243
`+
raise exceptions.InvalidStateError(f'{self._state}: {self!r}')
`
247
244
`if isinstance(exception, type):
`
248
245
`exception = exception()
`
249
246
`if type(exception) is StopIteration:
`
`@@ -288,6 +285,18 @@ def _set_result_unless_cancelled(fut, result):
`
288
285
`fut.set_result(result)
`
289
286
``
290
287
``
``
288
`+
def _convert_future_exc(exc):
`
``
289
`+
exc_class = type(exc)
`
``
290
`+
if exc_class is concurrent.futures.CancelledError:
`
``
291
`+
return exceptions.CancelledError(*exc.args)
`
``
292
`+
elif exc_class is concurrent.futures.TimeoutError:
`
``
293
`+
return exceptions.TimeoutError(*exc.args)
`
``
294
`+
elif exc_class is concurrent.futures.InvalidStateError:
`
``
295
`+
return exceptions.InvalidStateError(*exc.args)
`
``
296
`+
else:
`
``
297
`+
return exc
`
``
298
+
``
299
+
291
300
`def _set_concurrent_future_state(concurrent, source):
`
292
301
`"""Copy state from a future to a concurrent.futures.Future."""
`
293
302
`assert source.done()
`
`@@ -297,7 +306,7 @@ def _set_concurrent_future_state(concurrent, source):
`
297
306
`return
`
298
307
`exception = source.exception()
`
299
308
`if exception is not None:
`
300
``
`-
concurrent.set_exception(exception)
`
``
309
`+
concurrent.set_exception(_convert_future_exc(exception))
`
301
310
`else:
`
302
311
`result = source.result()
`
303
312
`concurrent.set_result(result)
`
`@@ -317,7 +326,7 @@ def _copy_future_state(source, dest):
`
317
326
`else:
`
318
327
`exception = source.exception()
`
319
328
`if exception is not None:
`
320
``
`-
dest.set_exception(exception)
`
``
329
`+
dest.set_exception(_convert_future_exc(exception))
`
321
330
`else:
`
322
331
`result = source.result()
`
323
332
`dest.set_result(result)
`