Skip to content

Commit

Permalink
Clearer error message if async context manager used synchronously
Browse files Browse the repository at this point in the history
Otherwise it says it does not have `__enter__` which is obvious for
advanced pythonista. Still a tiny bit clearer is likely better.

I guess this _might_ fool static type checkers, but I'm unaware of any
that would flag that.
  • Loading branch information
Carreau committed Jun 13, 2017
1 parent f2fdb63 commit ab22313
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
10 changes: 10 additions & 0 deletions trio/_core/tests/test_run.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,16 @@ async def child(x):
await task.wait()
assert task.result.unwrap() == 20

async def test_nursery_warn_use_async_with():
with pytest.raises(RuntimeError) as excinfo:
on = _core.open_nursery()
with on as nursery:
pass # pragma: no-cover
excinfo.match(r"use 'async with open_nursery\(...\)', not 'with open_nursery\(...\)'")

# avoid unawaited coro.
async with on:
pass

async def test_child_crash_basic():
exc = ValueError("uh oh")
Expand Down
8 changes: 8 additions & 0 deletions trio/_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ async def __aiter__(*args, **kwargs):
# Copyright © 2001-2017 Python Software Foundation; All Rights Reserved
class _AsyncGeneratorContextManager:
def __init__(self, func, args, kwds):
self._func_name = func.__name__
self._agen = func(*args, **kwds).__aiter__()

async def __aenter__(self):
Expand Down Expand Up @@ -135,6 +136,13 @@ async def __aexit__(self, type, value, traceback):
if sys.exc_info()[1] is not value:
raise

def __enter__(self):
raise RuntimeError("use 'async with {func_name}(...)', not 'with {func_name}(...)'".format(func_name=self._func_name))

def __exit__(self):
assert False, """Never called, but should be defined""" # pragma: no-cover


def acontextmanager(func):
"""Like @contextmanager, but async."""
if not async_generator.isasyncgenfunction(func):
Expand Down

0 comments on commit ab22313

Please sign in to comment.