{"action":"created","comment":{"url":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/comments/169500137","pull_request_review_id":98036256,"id":169500137,"diff_hunk":"@@ -1,14 +1,30 @@\n import asyncio\n \n # WaiterModel is required for client.py import\n+from botocore.exceptions import ClientError\n from botocore.waiter import WaiterModel  # noqa: F401\n-from botocore.waiter import Waiter, xform_name, NormalizedOperationMethod, \\\n-    logger, WaiterError\n+from botocore.waiter import Waiter, xform_name, logger, WaiterError\n from botocore.docs.docstring import WaiterDocstring\n from botocore.utils import get_service_module_name\n \n \n+class NormalizedOperationMethod(object):","path":"aiobotocore/waiter.py","position":13,"original_position":13,"commit_id":"fa34998a0dcbb53a9103ff7fde2303589987134e","original_commit_id":"fa34998a0dcbb53a9103ff7fde2303589987134e","user":{"login":"thehesiod","id":4001789,"avatar_url":"https://avatars1.githubusercontent.com/u/4001789?v=4","gravatar_id":"","url":"https://api.github.com/users/thehesiod","html_url":"https://github.com/thehesiod","followers_url":"https://api.github.com/users/thehesiod/followers","following_url":"https://api.github.com/users/thehesiod/following{/other_user}","gists_url":"https://api.github.com/users/thehesiod/gists{/gist_id}","starred_url":"https://api.github.com/users/thehesiod/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thehesiod/subscriptions","organizations_url":"https://api.github.com/users/thehesiod/orgs","repos_url":"https://api.github.com/users/thehesiod/repos","events_url":"https://api.github.com/users/thehesiod/events{/privacy}","received_events_url":"https://api.github.com/users/thehesiod/received_events","type":"User","site_admin":false},"body":"btw I'm not sure if completely broken is correct, the coroutine would be returned but IIRC the caller was doing a `yield from` so the method would still execute.  That support was added after someone noticed waiters were broken and I think he said it worked after the change...so either botocore changed since we implemented this, or the real issue is that the exception handler was not being applied correctly.","created_at":"2018-02-21T00:03:16Z","updated_at":"2018-02-21T00:03:16Z","html_url":"https://github.com/aio-libs/aiobotocore/pull/523#discussion_r169500137","pull_request_url":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/comments/169500137"},"html":{"href":"https://github.com/aio-libs/aiobotocore/pull/523#discussion_r169500137"},"pull_request":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523"}},"in_reply_to_id":169499230},"pull_request":{"url":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523","id":170310392,"html_url":"https://github.com/aio-libs/aiobotocore/pull/523","diff_url":"https://github.com/aio-libs/aiobotocore/pull/523.diff","patch_url":"https://github.com/aio-libs/aiobotocore/pull/523.patch","issue_url":"https://api.github.com/repos/aio-libs/aiobotocore/issues/523","number":523,"state":"open","locked":false,"title":"Waiters fix","user":{"login":"dalazx","id":1091425,"avatar_url":"https://avatars2.githubusercontent.com/u/1091425?v=4","gravatar_id":"","url":"https://api.github.com/users/dalazx","html_url":"https://github.com/dalazx","followers_url":"https://api.github.com/users/dalazx/followers","following_url":"https://api.github.com/users/dalazx/following{/other_user}","gists_url":"https://api.github.com/users/dalazx/gists{/gist_id}","starred_url":"https://api.github.com/users/dalazx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dalazx/subscriptions","organizations_url":"https://api.github.com/users/dalazx/orgs","repos_url":"https://api.github.com/users/dalazx/repos","events_url":"https://api.github.com/users/dalazx/events{/privacy}","received_events_url":"https://api.github.com/users/dalazx/received_events","type":"User","site_admin":false},"body":"Apparently waiters had been completely broken.\r\n```python\r\nclass NormalizedOperationMethod(object):\r\n    def __init__(self, client_method):\r\n        self._client_method = client_method\r\n\r\n    def __call__(self, **kwargs):\r\n        try:\r\n            return self._client_method(**kwargs)\r\n        except ClientError as e:\r\n            return e.response\r\n```\r\n\r\nAll `ClientError`s here were slipping outside, because ` return self._client_method(**kwargs)` would always return a coroutine object in case of our async client.","created_at":"2018-02-20T21:15:45Z","updated_at":"2018-02-21T00:03:16Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7829d762be2a16eab47acca169dce49a31e07514","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523/commits","review_comments_url":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523/comments","review_comment_url":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aio-libs/aiobotocore/issues/523/comments","statuses_url":"https://api.github.com/repos/aio-libs/aiobotocore/statuses/fa34998a0dcbb53a9103ff7fde2303589987134e","head":{"label":"dalazx:waiters_fix","ref":"waiters_fix","sha":"fa34998a0dcbb53a9103ff7fde2303589987134e","user":{"login":"dalazx","id":1091425,"avatar_url":"https://avatars2.githubusercontent.com/u/1091425?v=4","gravatar_id":"","url":"https://api.github.com/users/dalazx","html_url":"https://github.com/dalazx","followers_url":"https://api.github.com/users/dalazx/followers","following_url":"https://api.github.com/users/dalazx/following{/other_user}","gists_url":"https://api.github.com/users/dalazx/gists{/gist_id}","starred_url":"https://api.github.com/users/dalazx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dalazx/subscriptions","organizations_url":"https://api.github.com/users/dalazx/orgs","repos_url":"https://api.github.com/users/dalazx/repos","events_url":"https://api.github.com/users/dalazx/events{/privacy}","received_events_url":"https://api.github.com/users/dalazx/received_events","type":"User","site_admin":false},"repo":{"id":122243940,"name":"aiobotocore","full_name":"dalazx/aiobotocore","owner":{"login":"dalazx","id":1091425,"avatar_url":"https://avatars2.githubusercontent.com/u/1091425?v=4","gravatar_id":"","url":"https://api.github.com/users/dalazx","html_url":"https://github.com/dalazx","followers_url":"https://api.github.com/users/dalazx/followers","following_url":"https://api.github.com/users/dalazx/following{/other_user}","gists_url":"https://api.github.com/users/dalazx/gists{/gist_id}","starred_url":"https://api.github.com/users/dalazx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dalazx/subscriptions","organizations_url":"https://api.github.com/users/dalazx/orgs","repos_url":"https://api.github.com/users/dalazx/repos","events_url":"https://api.github.com/users/dalazx/events{/privacy}","received_events_url":"https://api.github.com/users/dalazx/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dalazx/aiobotocore","description":"asyncio support for botocore library using aiohttp","fork":true,"url":"https://api.github.com/repos/dalazx/aiobotocore","forks_url":"https://api.github.com/repos/dalazx/aiobotocore/forks","keys_url":"https://api.github.com/repos/dalazx/aiobotocore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dalazx/aiobotocore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dalazx/aiobotocore/teams","hooks_url":"https://api.github.com/repos/dalazx/aiobotocore/hooks","issue_events_url":"https://api.github.com/repos/dalazx/aiobotocore/issues/events{/number}","events_url":"https://api.github.com/repos/dalazx/aiobotocore/events","assignees_url":"https://api.github.com/repos/dalazx/aiobotocore/assignees{/user}","branches_url":"https://api.github.com/repos/dalazx/aiobotocore/branches{/branch}","tags_url":"https://api.github.com/repos/dalazx/aiobotocore/tags","blobs_url":"https://api.github.com/repos/dalazx/aiobotocore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dalazx/aiobotocore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dalazx/aiobotocore/git/refs{/sha}","trees_url":"https://api.github.com/repos/dalazx/aiobotocore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dalazx/aiobotocore/statuses/{sha}","languages_url":"https://api.github.com/repos/dalazx/aiobotocore/languages","stargazers_url":"https://api.github.com/repos/dalazx/aiobotocore/stargazers","contributors_url":"https://api.github.com/repos/dalazx/aiobotocore/contributors","subscribers_url":"https://api.github.com/repos/dalazx/aiobotocore/subscribers","subscription_url":"https://api.github.com/repos/dalazx/aiobotocore/subscription","commits_url":"https://api.github.com/repos/dalazx/aiobotocore/commits{/sha}","git_commits_url":"https://api.github.com/repos/dalazx/aiobotocore/git/commits{/sha}","comments_url":"https://api.github.com/repos/dalazx/aiobotocore/comments{/number}","issue_comment_url":"https://api.github.com/repos/dalazx/aiobotocore/issues/comments{/number}","contents_url":"https://api.github.com/repos/dalazx/aiobotocore/contents/{+path}","compare_url":"https://api.github.com/repos/dalazx/aiobotocore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dalazx/aiobotocore/merges","archive_url":"https://api.github.com/repos/dalazx/aiobotocore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dalazx/aiobotocore/downloads","issues_url":"https://api.github.com/repos/dalazx/aiobotocore/issues{/number}","pulls_url":"https://api.github.com/repos/dalazx/aiobotocore/pulls{/number}","milestones_url":"https://api.github.com/repos/dalazx/aiobotocore/milestones{/number}","notifications_url":"https://api.github.com/repos/dalazx/aiobotocore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dalazx/aiobotocore/labels{/name}","releases_url":"https://api.github.com/repos/dalazx/aiobotocore/releases{/id}","deployments_url":"https://api.github.com/repos/dalazx/aiobotocore/deployments","created_at":"2018-02-20T19:17:32Z","updated_at":"2018-02-20T19:17:34Z","pushed_at":"2018-02-20T21:51:30Z","git_url":"git://github.com/dalazx/aiobotocore.git","ssh_url":"git@github.com:dalazx/aiobotocore.git","clone_url":"https://github.com/dalazx/aiobotocore.git","svn_url":"https://github.com/dalazx/aiobotocore","homepage":"http://aiobotocore.readthedocs.io","size":394,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"aio-libs:master","ref":"master","sha":"828671a7e253f49b386fd9a3d00e819ae77029ca","user":{"login":"aio-libs","id":7049303,"avatar_url":"https://avatars2.githubusercontent.com/u/7049303?v=4","gravatar_id":"","url":"https://api.github.com/users/aio-libs","html_url":"https://github.com/aio-libs","followers_url":"https://api.github.com/users/aio-libs/followers","following_url":"https://api.github.com/users/aio-libs/following{/other_user}","gists_url":"https://api.github.com/users/aio-libs/gists{/gist_id}","starred_url":"https://api.github.com/users/aio-libs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aio-libs/subscriptions","organizations_url":"https://api.github.com/users/aio-libs/orgs","repos_url":"https://api.github.com/users/aio-libs/repos","events_url":"https://api.github.com/users/aio-libs/events{/privacy}","received_events_url":"https://api.github.com/users/aio-libs/received_events","type":"Organization","site_admin":false},"repo":{"id":36618494,"name":"aiobotocore","full_name":"aio-libs/aiobotocore","owner":{"login":"aio-libs","id":7049303,"avatar_url":"https://avatars2.githubusercontent.com/u/7049303?v=4","gravatar_id":"","url":"https://api.github.com/users/aio-libs","html_url":"https://github.com/aio-libs","followers_url":"https://api.github.com/users/aio-libs/followers","following_url":"https://api.github.com/users/aio-libs/following{/other_user}","gists_url":"https://api.github.com/users/aio-libs/gists{/gist_id}","starred_url":"https://api.github.com/users/aio-libs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aio-libs/subscriptions","organizations_url":"https://api.github.com/users/aio-libs/orgs","repos_url":"https://api.github.com/users/aio-libs/repos","events_url":"https://api.github.com/users/aio-libs/events{/privacy}","received_events_url":"https://api.github.com/users/aio-libs/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aio-libs/aiobotocore","description":"asyncio support for botocore library using aiohttp","fork":false,"url":"https://api.github.com/repos/aio-libs/aiobotocore","forks_url":"https://api.github.com/repos/aio-libs/aiobotocore/forks","keys_url":"https://api.github.com/repos/aio-libs/aiobotocore/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aio-libs/aiobotocore/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aio-libs/aiobotocore/teams","hooks_url":"https://api.github.com/repos/aio-libs/aiobotocore/hooks","issue_events_url":"https://api.github.com/repos/aio-libs/aiobotocore/issues/events{/number}","events_url":"https://api.github.com/repos/aio-libs/aiobotocore/events","assignees_url":"https://api.github.com/repos/aio-libs/aiobotocore/assignees{/user}","branches_url":"https://api.github.com/repos/aio-libs/aiobotocore/branches{/branch}","tags_url":"https://api.github.com/repos/aio-libs/aiobotocore/tags","blobs_url":"https://api.github.com/repos/aio-libs/aiobotocore/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aio-libs/aiobotocore/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aio-libs/aiobotocore/git/refs{/sha}","trees_url":"https://api.github.com/repos/aio-libs/aiobotocore/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aio-libs/aiobotocore/statuses/{sha}","languages_url":"https://api.github.com/repos/aio-libs/aiobotocore/languages","stargazers_url":"https://api.github.com/repos/aio-libs/aiobotocore/stargazers","contributors_url":"https://api.github.com/repos/aio-libs/aiobotocore/contributors","subscribers_url":"https://api.github.com/repos/aio-libs/aiobotocore/subscribers","subscription_url":"https://api.github.com/repos/aio-libs/aiobotocore/subscription","commits_url":"https://api.github.com/repos/aio-libs/aiobotocore/commits{/sha}","git_commits_url":"https://api.github.com/repos/aio-libs/aiobotocore/git/commits{/sha}","comments_url":"https://api.github.com/repos/aio-libs/aiobotocore/comments{/number}","issue_comment_url":"https://api.github.com/repos/aio-libs/aiobotocore/issues/comments{/number}","contents_url":"https://api.github.com/repos/aio-libs/aiobotocore/contents/{+path}","compare_url":"https://api.github.com/repos/aio-libs/aiobotocore/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aio-libs/aiobotocore/merges","archive_url":"https://api.github.com/repos/aio-libs/aiobotocore/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aio-libs/aiobotocore/downloads","issues_url":"https://api.github.com/repos/aio-libs/aiobotocore/issues{/number}","pulls_url":"https://api.github.com/repos/aio-libs/aiobotocore/pulls{/number}","milestones_url":"https://api.github.com/repos/aio-libs/aiobotocore/milestones{/number}","notifications_url":"https://api.github.com/repos/aio-libs/aiobotocore/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aio-libs/aiobotocore/labels{/name}","releases_url":"https://api.github.com/repos/aio-libs/aiobotocore/releases{/id}","deployments_url":"https://api.github.com/repos/aio-libs/aiobotocore/deployments","created_at":"2015-05-31T19:28:54Z","updated_at":"2018-02-20T06:19:50Z","pushed_at":"2018-02-20T22:09:37Z","git_url":"git://github.com/aio-libs/aiobotocore.git","ssh_url":"git@github.com:aio-libs/aiobotocore.git","clone_url":"https://github.com/aio-libs/aiobotocore.git","svn_url":"https://github.com/aio-libs/aiobotocore","homepage":"http://aiobotocore.readthedocs.io","size":388,"stargazers_count":190,"watchers_count":190,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":45,"mirror_url":null,"archived":false,"open_issues_count":27,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0"},"forks":45,"open_issues":27,"watchers":190,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523"},"html":{"href":"https://github.com/aio-libs/aiobotocore/pull/523"},"issue":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/issues/523"},"comments":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/issues/523/comments"},"review_comments":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523/comments"},"review_comment":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/pulls/523/commits"},"statuses":{"href":"https://api.github.com/repos/aio-libs/aiobotocore/statuses/fa34998a0dcbb53a9103ff7fde2303589987134e"}},"author_association":"NONE"}}
{"actor":{"display_login":"thehesiod"}}