{"action":"created","comment":{"url":"https://api.github.com/repos/googleapis/gax-python/pulls/comments/94079448","pull_request_review_id":14610152,"id":94079448,"diff_hunk":"@@ -482,3 +489,160 @@ def __next__(self):\n         if self._index >= len(self._current):\n             self._current = None\n         return resource\n+\n+\n+def _from_any(pb_type, any_pb):\n+    if not any_pb.Is(pb_type.DESCRIPTOR):\n+        raise TypeError(\n+            'Could not convert {} to {}'.format(\n+                any_pb.__class__.__name__, pb_type.__name__))\n+\n+    return pb_type.FromString(any_pb.value)\n+\n+\n+class ResultError(GaxError):","path":"google/gax/__init__.py","position":34,"original_position":34,"commit_id":"8f2dfc08d03a51ea60cce41021edf84afb234816","original_commit_id":"8f2dfc08d03a51ea60cce41021edf84afb234816","user":{"login":"lukesneeringer","id":4346,"avatar_url":"https://avatars.githubusercontent.com/u/4346?v=3","gravatar_id":"","url":"https://api.github.com/users/lukesneeringer","html_url":"https://github.com/lukesneeringer","followers_url":"https://api.github.com/users/lukesneeringer/followers","following_url":"https://api.github.com/users/lukesneeringer/following{/other_user}","gists_url":"https://api.github.com/users/lukesneeringer/gists{/gist_id}","starred_url":"https://api.github.com/users/lukesneeringer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukesneeringer/subscriptions","organizations_url":"https://api.github.com/users/lukesneeringer/orgs","repos_url":"https://api.github.com/users/lukesneeringer/repos","events_url":"https://api.github.com/users/lukesneeringer/events{/privacy}","received_events_url":"https://api.github.com/users/lukesneeringer/received_events","type":"User","site_admin":false},"body":"I disagree. :-) I think there could be a case where a developer wants to catch result errors but does not want to catch other ways that a `GaxError` might be thrown, now or in the future. The subclass makes this really easy, and is much cleaner than catching `GaxError`, checking `cause`, and then re-raising if you do not recognize it.","created_at":"2016-12-28T21:29:46Z","updated_at":"2016-12-28T21:29:46Z","html_url":"https://github.com/googleapis/gax-python/pull/142#discussion_r94079448","pull_request_url":"https://api.github.com/repos/googleapis/gax-python/pulls/142","_links":{"self":{"href":"https://api.github.com/repos/googleapis/gax-python/pulls/comments/94079448"},"html":{"href":"https://github.com/googleapis/gax-python/pull/142#discussion_r94079448"},"pull_request":{"href":"https://api.github.com/repos/googleapis/gax-python/pulls/142"}}},"pull_request":{"url":"https://api.github.com/repos/googleapis/gax-python/pulls/142","id":99492703,"html_url":"https://github.com/googleapis/gax-python/pull/142","diff_url":"https://github.com/googleapis/gax-python/pull/142.diff","patch_url":"https://github.com/googleapis/gax-python/pull/142.patch","issue_url":"https://api.github.com/repos/googleapis/gax-python/issues/142","number":142,"state":"open","locked":false,"title":"Add OperationFuture class","user":{"login":"eoogbe","id":1738516,"avatar_url":"https://avatars.githubusercontent.com/u/1738516?v=3","gravatar_id":"","url":"https://api.github.com/users/eoogbe","html_url":"https://github.com/eoogbe","followers_url":"https://api.github.com/users/eoogbe/followers","following_url":"https://api.github.com/users/eoogbe/following{/other_user}","gists_url":"https://api.github.com/users/eoogbe/gists{/gist_id}","starred_url":"https://api.github.com/users/eoogbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eoogbe/subscriptions","organizations_url":"https://api.github.com/users/eoogbe/orgs","repos_url":"https://api.github.com/users/eoogbe/repos","events_url":"https://api.github.com/users/eoogbe/events{/privacy}","received_events_url":"https://api.github.com/users/eoogbe/received_events","type":"User","site_admin":false},"body":"Implement OperationFuture class to use when generating LRO code. Will be used in googleapis/toolkit.","created_at":"2016-12-27T23:20:15Z","updated_at":"2016-12-28T21:29:46Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7d0cb94d6080cb33412f05280b18656389f9896e","assignee":{"login":"lukesneeringer","id":4346,"avatar_url":"https://avatars.githubusercontent.com/u/4346?v=3","gravatar_id":"","url":"https://api.github.com/users/lukesneeringer","html_url":"https://github.com/lukesneeringer","followers_url":"https://api.github.com/users/lukesneeringer/followers","following_url":"https://api.github.com/users/lukesneeringer/following{/other_user}","gists_url":"https://api.github.com/users/lukesneeringer/gists{/gist_id}","starred_url":"https://api.github.com/users/lukesneeringer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukesneeringer/subscriptions","organizations_url":"https://api.github.com/users/lukesneeringer/orgs","repos_url":"https://api.github.com/users/lukesneeringer/repos","events_url":"https://api.github.com/users/lukesneeringer/events{/privacy}","received_events_url":"https://api.github.com/users/lukesneeringer/received_events","type":"User","site_admin":false},"assignees":[{"login":"lukesneeringer","id":4346,"avatar_url":"https://avatars.githubusercontent.com/u/4346?v=3","gravatar_id":"","url":"https://api.github.com/users/lukesneeringer","html_url":"https://github.com/lukesneeringer","followers_url":"https://api.github.com/users/lukesneeringer/followers","following_url":"https://api.github.com/users/lukesneeringer/following{/other_user}","gists_url":"https://api.github.com/users/lukesneeringer/gists{/gist_id}","starred_url":"https://api.github.com/users/lukesneeringer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/lukesneeringer/subscriptions","organizations_url":"https://api.github.com/users/lukesneeringer/orgs","repos_url":"https://api.github.com/users/lukesneeringer/repos","events_url":"https://api.github.com/users/lukesneeringer/events{/privacy}","received_events_url":"https://api.github.com/users/lukesneeringer/received_events","type":"User","site_admin":false},{"login":"bjwatson","id":471755,"avatar_url":"https://avatars.githubusercontent.com/u/471755?v=3","gravatar_id":"","url":"https://api.github.com/users/bjwatson","html_url":"https://github.com/bjwatson","followers_url":"https://api.github.com/users/bjwatson/followers","following_url":"https://api.github.com/users/bjwatson/following{/other_user}","gists_url":"https://api.github.com/users/bjwatson/gists{/gist_id}","starred_url":"https://api.github.com/users/bjwatson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bjwatson/subscriptions","organizations_url":"https://api.github.com/users/bjwatson/orgs","repos_url":"https://api.github.com/users/bjwatson/repos","events_url":"https://api.github.com/users/bjwatson/events{/privacy}","received_events_url":"https://api.github.com/users/bjwatson/received_events","type":"User","site_admin":false},{"login":"landrito","id":8572251,"avatar_url":"https://avatars.githubusercontent.com/u/8572251?v=3","gravatar_id":"","url":"https://api.github.com/users/landrito","html_url":"https://github.com/landrito","followers_url":"https://api.github.com/users/landrito/followers","following_url":"https://api.github.com/users/landrito/following{/other_user}","gists_url":"https://api.github.com/users/landrito/gists{/gist_id}","starred_url":"https://api.github.com/users/landrito/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/landrito/subscriptions","organizations_url":"https://api.github.com/users/landrito/orgs","repos_url":"https://api.github.com/users/landrito/repos","events_url":"https://api.github.com/users/landrito/events{/privacy}","received_events_url":"https://api.github.com/users/landrito/received_events","type":"User","site_admin":false},{"login":"geigerj","id":14222439,"avatar_url":"https://avatars.githubusercontent.com/u/14222439?v=3","gravatar_id":"","url":"https://api.github.com/users/geigerj","html_url":"https://github.com/geigerj","followers_url":"https://api.github.com/users/geigerj/followers","following_url":"https://api.github.com/users/geigerj/following{/other_user}","gists_url":"https://api.github.com/users/geigerj/gists{/gist_id}","starred_url":"https://api.github.com/users/geigerj/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/geigerj/subscriptions","organizations_url":"https://api.github.com/users/geigerj/orgs","repos_url":"https://api.github.com/users/geigerj/repos","events_url":"https://api.github.com/users/geigerj/events{/privacy}","received_events_url":"https://api.github.com/users/geigerj/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/googleapis/gax-python/pulls/142/commits","review_comments_url":"https://api.github.com/repos/googleapis/gax-python/pulls/142/comments","review_comment_url":"https://api.github.com/repos/googleapis/gax-python/pulls/comments{/number}","comments_url":"https://api.github.com/repos/googleapis/gax-python/issues/142/comments","statuses_url":"https://api.github.com/repos/googleapis/gax-python/statuses/8f2dfc08d03a51ea60cce41021edf84afb234816","head":{"label":"eoogbe:op-future","ref":"op-future","sha":"8f2dfc08d03a51ea60cce41021edf84afb234816","user":{"login":"eoogbe","id":1738516,"avatar_url":"https://avatars.githubusercontent.com/u/1738516?v=3","gravatar_id":"","url":"https://api.github.com/users/eoogbe","html_url":"https://github.com/eoogbe","followers_url":"https://api.github.com/users/eoogbe/followers","following_url":"https://api.github.com/users/eoogbe/following{/other_user}","gists_url":"https://api.github.com/users/eoogbe/gists{/gist_id}","starred_url":"https://api.github.com/users/eoogbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eoogbe/subscriptions","organizations_url":"https://api.github.com/users/eoogbe/orgs","repos_url":"https://api.github.com/users/eoogbe/repos","events_url":"https://api.github.com/users/eoogbe/events{/privacy}","received_events_url":"https://api.github.com/users/eoogbe/received_events","type":"User","site_admin":false},"repo":{"id":77487516,"name":"gax-python","full_name":"eoogbe/gax-python","owner":{"login":"eoogbe","id":1738516,"avatar_url":"https://avatars.githubusercontent.com/u/1738516?v=3","gravatar_id":"","url":"https://api.github.com/users/eoogbe","html_url":"https://github.com/eoogbe","followers_url":"https://api.github.com/users/eoogbe/followers","following_url":"https://api.github.com/users/eoogbe/following{/other_user}","gists_url":"https://api.github.com/users/eoogbe/gists{/gist_id}","starred_url":"https://api.github.com/users/eoogbe/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eoogbe/subscriptions","organizations_url":"https://api.github.com/users/eoogbe/orgs","repos_url":"https://api.github.com/users/eoogbe/repos","events_url":"https://api.github.com/users/eoogbe/events{/privacy}","received_events_url":"https://api.github.com/users/eoogbe/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eoogbe/gax-python","description":"Google API Extensions for Python","fork":true,"url":"https://api.github.com/repos/eoogbe/gax-python","forks_url":"https://api.github.com/repos/eoogbe/gax-python/forks","keys_url":"https://api.github.com/repos/eoogbe/gax-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eoogbe/gax-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eoogbe/gax-python/teams","hooks_url":"https://api.github.com/repos/eoogbe/gax-python/hooks","issue_events_url":"https://api.github.com/repos/eoogbe/gax-python/issues/events{/number}","events_url":"https://api.github.com/repos/eoogbe/gax-python/events","assignees_url":"https://api.github.com/repos/eoogbe/gax-python/assignees{/user}","branches_url":"https://api.github.com/repos/eoogbe/gax-python/branches{/branch}","tags_url":"https://api.github.com/repos/eoogbe/gax-python/tags","blobs_url":"https://api.github.com/repos/eoogbe/gax-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eoogbe/gax-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eoogbe/gax-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/eoogbe/gax-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eoogbe/gax-python/statuses/{sha}","languages_url":"https://api.github.com/repos/eoogbe/gax-python/languages","stargazers_url":"https://api.github.com/repos/eoogbe/gax-python/stargazers","contributors_url":"https://api.github.com/repos/eoogbe/gax-python/contributors","subscribers_url":"https://api.github.com/repos/eoogbe/gax-python/subscribers","subscription_url":"https://api.github.com/repos/eoogbe/gax-python/subscription","commits_url":"https://api.github.com/repos/eoogbe/gax-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/eoogbe/gax-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/eoogbe/gax-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/eoogbe/gax-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/eoogbe/gax-python/contents/{+path}","compare_url":"https://api.github.com/repos/eoogbe/gax-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eoogbe/gax-python/merges","archive_url":"https://api.github.com/repos/eoogbe/gax-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eoogbe/gax-python/downloads","issues_url":"https://api.github.com/repos/eoogbe/gax-python/issues{/number}","pulls_url":"https://api.github.com/repos/eoogbe/gax-python/pulls{/number}","milestones_url":"https://api.github.com/repos/eoogbe/gax-python/milestones{/number}","notifications_url":"https://api.github.com/repos/eoogbe/gax-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eoogbe/gax-python/labels{/name}","releases_url":"https://api.github.com/repos/eoogbe/gax-python/releases{/id}","deployments_url":"https://api.github.com/repos/eoogbe/gax-python/deployments","created_at":"2016-12-27T23:02:37Z","updated_at":"2016-12-27T23:02:39Z","pushed_at":"2016-12-28T18:08:27Z","git_url":"git://github.com/eoogbe/gax-python.git","ssh_url":"git@github.com:eoogbe/gax-python.git","clone_url":"https://github.com/eoogbe/gax-python.git","svn_url":"https://github.com/eoogbe/gax-python","homepage":"http://gax-python.readthedocs.org/en/latest/","size":275,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"googleapis:master","ref":"master","sha":"a3a290a3472985f5a73be9561d466cd9f08ac73f","user":{"login":"googleapis","id":16785467,"avatar_url":"https://avatars.githubusercontent.com/u/16785467?v=3","gravatar_id":"","url":"https://api.github.com/users/googleapis","html_url":"https://github.com/googleapis","followers_url":"https://api.github.com/users/googleapis/followers","following_url":"https://api.github.com/users/googleapis/following{/other_user}","gists_url":"https://api.github.com/users/googleapis/gists{/gist_id}","starred_url":"https://api.github.com/users/googleapis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/googleapis/subscriptions","organizations_url":"https://api.github.com/users/googleapis/orgs","repos_url":"https://api.github.com/users/googleapis/repos","events_url":"https://api.github.com/users/googleapis/events{/privacy}","received_events_url":"https://api.github.com/users/googleapis/received_events","type":"Organization","site_admin":false},"repo":{"id":50878409,"name":"gax-python","full_name":"googleapis/gax-python","owner":{"login":"googleapis","id":16785467,"avatar_url":"https://avatars.githubusercontent.com/u/16785467?v=3","gravatar_id":"","url":"https://api.github.com/users/googleapis","html_url":"https://github.com/googleapis","followers_url":"https://api.github.com/users/googleapis/followers","following_url":"https://api.github.com/users/googleapis/following{/other_user}","gists_url":"https://api.github.com/users/googleapis/gists{/gist_id}","starred_url":"https://api.github.com/users/googleapis/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/googleapis/subscriptions","organizations_url":"https://api.github.com/users/googleapis/orgs","repos_url":"https://api.github.com/users/googleapis/repos","events_url":"https://api.github.com/users/googleapis/events{/privacy}","received_events_url":"https://api.github.com/users/googleapis/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/googleapis/gax-python","description":"Google API Extensions for Python","fork":false,"url":"https://api.github.com/repos/googleapis/gax-python","forks_url":"https://api.github.com/repos/googleapis/gax-python/forks","keys_url":"https://api.github.com/repos/googleapis/gax-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/googleapis/gax-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/googleapis/gax-python/teams","hooks_url":"https://api.github.com/repos/googleapis/gax-python/hooks","issue_events_url":"https://api.github.com/repos/googleapis/gax-python/issues/events{/number}","events_url":"https://api.github.com/repos/googleapis/gax-python/events","assignees_url":"https://api.github.com/repos/googleapis/gax-python/assignees{/user}","branches_url":"https://api.github.com/repos/googleapis/gax-python/branches{/branch}","tags_url":"https://api.github.com/repos/googleapis/gax-python/tags","blobs_url":"https://api.github.com/repos/googleapis/gax-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/googleapis/gax-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/googleapis/gax-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/googleapis/gax-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/googleapis/gax-python/statuses/{sha}","languages_url":"https://api.github.com/repos/googleapis/gax-python/languages","stargazers_url":"https://api.github.com/repos/googleapis/gax-python/stargazers","contributors_url":"https://api.github.com/repos/googleapis/gax-python/contributors","subscribers_url":"https://api.github.com/repos/googleapis/gax-python/subscribers","subscription_url":"https://api.github.com/repos/googleapis/gax-python/subscription","commits_url":"https://api.github.com/repos/googleapis/gax-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/googleapis/gax-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/googleapis/gax-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/googleapis/gax-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/googleapis/gax-python/contents/{+path}","compare_url":"https://api.github.com/repos/googleapis/gax-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/googleapis/gax-python/merges","archive_url":"https://api.github.com/repos/googleapis/gax-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/googleapis/gax-python/downloads","issues_url":"https://api.github.com/repos/googleapis/gax-python/issues{/number}","pulls_url":"https://api.github.com/repos/googleapis/gax-python/pulls{/number}","milestones_url":"https://api.github.com/repos/googleapis/gax-python/milestones{/number}","notifications_url":"https://api.github.com/repos/googleapis/gax-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/googleapis/gax-python/labels{/name}","releases_url":"https://api.github.com/repos/googleapis/gax-python/releases{/id}","deployments_url":"https://api.github.com/repos/googleapis/gax-python/deployments","created_at":"2016-02-01T23:13:08Z","updated_at":"2016-11-28T02:41:18Z","pushed_at":"2016-12-28T18:08:29Z","git_url":"git://github.com/googleapis/gax-python.git","ssh_url":"git@github.com:googleapis/gax-python.git","clone_url":"https://github.com/googleapis/gax-python.git","svn_url":"https://github.com/googleapis/gax-python","homepage":"http://gax-python.readthedocs.org/en/latest/","size":322,"stargazers_count":10,"watchers_count":10,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":14,"forks":7,"open_issues":14,"watchers":10,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/googleapis/gax-python/pulls/142"},"html":{"href":"https://github.com/googleapis/gax-python/pull/142"},"issue":{"href":"https://api.github.com/repos/googleapis/gax-python/issues/142"},"comments":{"href":"https://api.github.com/repos/googleapis/gax-python/issues/142/comments"},"review_comments":{"href":"https://api.github.com/repos/googleapis/gax-python/pulls/142/comments"},"review_comment":{"href":"https://api.github.com/repos/googleapis/gax-python/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/googleapis/gax-python/pulls/142/commits"},"statuses":{"href":"https://api.github.com/repos/googleapis/gax-python/statuses/8f2dfc08d03a51ea60cce41021edf84afb234816"}}}}
{"actor":{"display_login":"lukesneeringer"}}