11"""A Future class similar to the one in PEP 3148."""
22
33__all__ = (
4- 'CancelledError' , 'TimeoutError' , 'InvalidStateError' ,
54 'Future' , 'wrap_future' , 'isfuture' ,
65)
76
1211
1312from . import base_futures
1413from . import events
14+ from . import exceptions
1515from . import format_helpers
1616
1717
18- CancelledError = base_futures .CancelledError
19- InvalidStateError = base_futures .InvalidStateError
20- TimeoutError = base_futures .TimeoutError
2118isfuture = base_futures .isfuture
2219
2320
@@ -170,9 +167,9 @@ def result(self):
170167 the future is done and has an exception set, this exception is raised.
171168 """
172169 if self ._state == _CANCELLED :
173- raise CancelledError
170+ raise exceptions . CancelledError
174171 if self ._state != _FINISHED :
175- raise InvalidStateError ('Result is not ready.' )
172+ raise exceptions . InvalidStateError ('Result is not ready.' )
176173 self .__log_traceback = False
177174 if self ._exception is not None :
178175 raise self ._exception
@@ -187,9 +184,9 @@ def exception(self):
187184 InvalidStateError.
188185 """
189186 if self ._state == _CANCELLED :
190- raise CancelledError
187+ raise exceptions . CancelledError
191188 if self ._state != _FINISHED :
192- raise InvalidStateError ('Exception is not set.' )
189+ raise exceptions . InvalidStateError ('Exception is not set.' )
193190 self .__log_traceback = False
194191 return self ._exception
195192
@@ -231,7 +228,7 @@ def set_result(self, result):
231228 InvalidStateError.
232229 """
233230 if self ._state != _PENDING :
234- raise InvalidStateError ('{ }: {!r}'. format ( self . _state , self ) )
231+ raise exceptions . InvalidStateError (f' { self . _state } : { self !r} ' )
235232 self ._result = result
236233 self ._state = _FINISHED
237234 self .__schedule_callbacks ()
@@ -243,7 +240,7 @@ def set_exception(self, exception):
243240 InvalidStateError.
244241 """
245242 if self ._state != _PENDING :
246- raise InvalidStateError ('{ }: {!r}'. format ( self . _state , self ) )
243+ raise exceptions . InvalidStateError (f' { self . _state } : { self !r} ' )
247244 if isinstance (exception , type ):
248245 exception = exception ()
249246 if type (exception ) is StopIteration :
@@ -288,6 +285,18 @@ def _set_result_unless_cancelled(fut, result):
288285 fut .set_result (result )
289286
290287
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+
291300def _set_concurrent_future_state (concurrent , source ):
292301 """Copy state from a future to a concurrent.futures.Future."""
293302 assert source .done ()
@@ -297,7 +306,7 @@ def _set_concurrent_future_state(concurrent, source):
297306 return
298307 exception = source .exception ()
299308 if exception is not None :
300- concurrent .set_exception (exception )
309+ concurrent .set_exception (_convert_future_exc ( exception ) )
301310 else :
302311 result = source .result ()
303312 concurrent .set_result (result )
@@ -317,7 +326,7 @@ def _copy_future_state(source, dest):
317326 else :
318327 exception = source .exception ()
319328 if exception is not None :
320- dest .set_exception (exception )
329+ dest .set_exception (_convert_future_exc ( exception ) )
321330 else :
322331 result = source .result ()
323332 dest .set_result (result )
0 commit comments