Timeout context manager should be used inside of a task

1,424 views
Skip to first unread message

Ben Waters

unread,
Nov 20, 2017, 11:30:23 AM11/20/17
to aio-libs
I opened up a github issue, but i'll try here as well

Let's say that I have a simple View inside of a aiohttp server that just writes some body to sqs

class RequestView(web.View):
async def post(self):
body = await self.request.json()
await self.request.app['sqs'].async_send_message(body=body)
return web.json_response({
'message': 'success!'
})

The async_send_message is just a method wrapper inside of a class

basic SQSAsync class

class SQSAsync(object):
def __init__(self, queue_name, queue_url=None, wait_time=None):
StreamHandler(sys.stdout).push_application()
self.logger = Logger('SQSAsync')
self.session = aiobotocore.get_session(loop=asyncio.get_event_loop())
self.queue_name = queue_name
self.queue_url = queue_url
self.wait_time = wait_time



async def async_send_message(self, body):
if self.queue_url is None:
self.queue_url = await self.async_get_queue_url()

async with self.session.create_client('sqs') as client:

response = await client.send_message(QueueUrl=self.queue_url, MessageBody=body)

if response.get('ResponseMetadata').get('HTTPStatusCode') != 200:
raise Exception()
return {
'md5': response.get('MD5OfMessageBody'),
'message_id': response.get('MessageId'),
'status': response.get('ResponseMetadata').get('HTTPStatusCode')
}

I used to not have this issue last week (so I assume it's something I did because I tried downgrading packages to my versions from last week and it didn't fix

Traceback (most recent call last):
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiohttp/web_protocol.py", line 416, in start
    resp = yield from self._request_handler(request)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiohttp/web.py", line 323, in _handle
    resp = yield from handler(request)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiohttp/web_urldispatcher.py", line 748, in __iter__
    resp = yield from method()
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/gozer-0.1-py3.6.egg/gozer/gatekeeper/decorators.py", line 28, in wrapper
    return await func(*args)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/gozer-0.1-py3.6.egg/gozer/gatekeeper/views.py", line 45, in post
    await self.request.app['sqs'].async_send_message(body='test')
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/gozer-0.1-py3.6.egg/gozer/apis/sqs.py", line 53, in async_send_message
    response = await client.send_message(QueueUrl=self.queue_url, MessageBody=body)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiobotocore/client.py", line 80, in _make_api_call
    operation_model, request_dict)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 265, in _send_request
    exception)):
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 297, in _needs_retry
    caught_exception=caught_exception, request_dict=request_dict)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/hooks.py", line 227, in emit
    return self._emit(event_name, kwargs)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/hooks.py", line 210, in _emit
    response = handler(**kwargs)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/retryhandler.py", line 183, in __call__
    if self._checker(attempts, response, caught_exception):
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/retryhandler.py", line 251, in __call__
    caught_exception)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/retryhandler.py", line 269, in _should_retry
    return self._checker(attempt_number, response, caught_exception)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/retryhandler.py", line 317, in __call__
    caught_exception)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/retryhandler.py", line 223, in __call__
    attempt_number, caught_exception)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/botocore/retryhandler.py", line 359, in _check_caught_exception
    raise caught_exception
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 321, in _get_response
    request.method, request.url, request.headers, request.body)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 254, in _request
    timeout=None)
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiohttp/helpers.py", line 99, in __iter__
    ret = yield from self._coro
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiohttp/client.py", line 266, in _request
    with CeilTimeout(self._conn_timeout, loop=self._loop):
  File "/Users/benwaters/Forter/gozer/.venv/lib/python3.6/site-packages/aiohttp/helpers.py", line 744, in __enter__
    'Timeout context manager should be used inside a task')
RuntimeError: Timeout context manager should be used inside a task



Any input on where I can hunt would be great

Ben Waters

unread,
Nov 20, 2017, 11:31:08 AM11/20/17
to aio-libs
Sorry context this is using aiobotocore
Reply all
Reply to author
Forward
0 new messages