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)

`