Skip to content

Instantly share code, notes, and snippets.

@cfclrk
Created April 4, 2017 13:03
Show Gist options
  • Save cfclrk/51ea85ff13cf55748188aba57125949e to your computer and use it in GitHub Desktop.
Save cfclrk/51ea85ff13cf55748188aba57125949e to your computer and use it in GitHub Desktop.
botocore waiter with aiobotocore (does not work)
import asyncio
import aiobotocore
cloudformation_template = """
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"queue1": {
"Type": "AWS::SQS::Queue",
"Properties": {
"QueueName": "my-queue"
}
}
}
}
"""
loop = asyncio.get_event_loop()
session = aiobotocore.get_session(loop=loop)
cloudformation_client = session.create_client('cloudformation', region_name='us-east-1')
async def create_stack():
print('creating cloudformation stack')
await cloudformation_client.create_stack(
StackName='my-stack', TemplateBody=cloudformation_template)
async def wait_for_stack_create_complete():
print('waiting for cloudformation stack creation to complete')
waiter = cloudformation_client.get_waiter('stack_create_complete')
await waiter.wait(StackName='my-stack')
loop.run_until_complete(create_stack())
loop.run_until_complete(wait_for_stack_create_complete())
> python aiobotocore_waiter.py
creating cloudformation stack
waiting for cloudformation stack creation to complete
Traceback (most recent call last):
File "aiobotocore_waiter.py", line 36, in <module>
loop.run_until_complete(wait_for_stack_create_complete())
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/asyncio/base_events.py", line 466, in run_until_complete
return future.result()
File "aiobotocore_waiter.py", line 32, in wait_for_stack_create_complete
await waiter.wait(StackName='my-stack')
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/waiter.py", line 53, in wait
Waiter.wait(self, **kwargs)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/waiter.py", line 298, in wait
if acceptor.matcher_func(response):
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/waiter.py", line 204, in acceptor_matches
if 'Error' in response:
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiobotocore/client.py", line 78, in _make_api_call
operation_model, request_dict)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 214, in _send_request
exception)):
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 246, in _needs_retry
caught_exception=caught_exception, request_dict=request_dict)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/hooks.py", line 227, in emit
return self._emit(event_name, kwargs)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/hooks.py", line 210, in _emit
response = handler(**kwargs)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/retryhandler.py", line 183, in __call__
if self._checker(attempts, response, caught_exception):
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/retryhandler.py", line 251, in __call__
caught_exception)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/retryhandler.py", line 269, in _should_retry
return self._checker(attempt_number, response, caught_exception)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/retryhandler.py", line 317, in __call__
caught_exception)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/retryhandler.py", line 223, in __call__
attempt_number, caught_exception)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/botocore/retryhandler.py", line 359, in _check_caught_exception
raise caught_exception
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 270, in _get_response
request.method, request.url, request.headers, request.body)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiobotocore/endpoint.py", line 203, in _request
allow_redirects=False)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiohttp/client.py", line 585, in __iter__
resp = yield from self._coro
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiohttp/client.py", line 222, in _request
yield from resp.start(conn, read_until_eof)
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiohttp/client_reqrep.py", line 615, in start
message = yield from httpstream.read()
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiohttp/streams.py", line 625, in read
result = yield from super().read()
File "/Users/chrisc/.pyenv/versions/3.6.0/lib/python3.6/site-packages/aiohttp/streams.py", line 456, in read
yield from self._waiter
AssertionError: yield from wasn't used with future
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x109f18ef0>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment