{"action":"created","comment":{"url":"https://api.github.com/repos/eventbrite/pysoa/pulls/comments/180496285","pull_request_review_id":110925960,"id":180496285,"diff_hunk":"@@ -343,41 +353,227 @@ def call_actions(self, service_name, actions, expansions=None, raise_action_erro\n             if error_actions:\n                 raise self.CallActionError(error_actions)\n         if expansions:\n-            self._perform_expansion(response, expansions)\n+            self._perform_expansion(response.actions, expansions)\n \n         return response\n \n-    def _perform_expansion(self, skeleton_response, expansions):\n+    def call_actions_parallel(self, service_name, actions, **kwargs):\n+        \"\"\"\n+        Build and send multiple job requests to one service, each job with one action, to be executed in parallel, and\n+        return once all responses have been received.\n+\n+        Returns a list of action responses, one for each action in the same order as provided, or raises an exception\n+        if any action response is an error (unless `raise_action_errors` is passed as `False`) or if any job response\n+        is an error.\n+\n+        This method performs expansions if the Client is configured with an expansion converter.\n+\n+        :param service_name: The name of the service to call\n+        :type service_name: union[str, unicode]\n+        :param actions: A list of `ActionRequest` objects and/or dicts that can be converted to `ActionRequest` objects\n+        :type actions: iterable[union[ActionRequest, dict]]\n+        :param expansions: A dictionary representing the expansions to perform\n+        :type expansions: dict\n+        :param raise_action_errors: Whether to raise a CallActionError if any action responses contain errors (defaults\n+                                    to `True`)\n+        :type raise_action_errors: bool\n+        :param timeout: If provided, this will override the default transport timeout values to; requests will expire\n+                        after this number of seconds plus some buffer defined by the transport, and the client will not\n+                        block waiting for a response for longer than this amount of time.\n+        :type timeout: int\n+        :param switches: A list of switch value integers\n+        :type switches: list\n+        :param correlation_id: The request correlation ID\n+        :type correlation_id: union[str, unicode]\n+        :param continue_on_error: Whether to continue executing further actions once one action has returned errors\n+        :type continue_on_error: bool\n+        :param context: A dictionary of extra values to include in the context header\n+        :type context: dict\n+        :param control_extra: A dictionary of extra values to include in the control header\n+        :type control_extra: dict\n+\n+        :return: A generator of action responses\n+        :rtype: generator[ActionResponse]\n+\n+        :raise: ConnectionError, InvalidField, MessageSendError, MessageSendTimeout, MessageTooLarge,\n+                MessageReceiveError, MessageReceiveTimeout, InvalidMessage, JobError, CallActionError\n+        \"\"\"\n+        if 'raise_job_errors' in kwargs:\n+            raise TypeError(\"call_actions_parallel() got a prohibited keyword argument 'raise_job_errors\")\n+        if 'catch_transport_errors' in kwargs:\n+            raise TypeError(\"call_actions_parallel() got a prohibited keyword argument 'catch_transport_errors\")\n+\n+        job_responses = self.call_jobs_parallel(\n+            jobs=({'service_name': service_name, 'actions': [action]} for action in actions),\n+            **kwargs\n+        )\n+\n+        return (job.actions[0] for job in job_responses)\n+\n+    def call_jobs_parallel(","path":"pysoa/client/client.py","position":164,"original_position":164,"commit_id":"2dfdd755ea809f0e980ca17ae2e5cda99909501e","original_commit_id":"2dfdd755ea809f0e980ca17ae2e5cda99909501e","user":{"login":"nickwilliams-eventbrite","id":8230828,"avatar_url":"https://avatars3.githubusercontent.com/u/8230828?v=4","gravatar_id":"","url":"https://api.github.com/users/nickwilliams-eventbrite","html_url":"https://github.com/nickwilliams-eventbrite","followers_url":"https://api.github.com/users/nickwilliams-eventbrite/followers","following_url":"https://api.github.com/users/nickwilliams-eventbrite/following{/other_user}","gists_url":"https://api.github.com/users/nickwilliams-eventbrite/gists{/gist_id}","starred_url":"https://api.github.com/users/nickwilliams-eventbrite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickwilliams-eventbrite/subscriptions","organizations_url":"https://api.github.com/users/nickwilliams-eventbrite/orgs","repos_url":"https://api.github.com/users/nickwilliams-eventbrite/repos","events_url":"https://api.github.com/users/nickwilliams-eventbrite/events{/privacy}","received_events_url":"https://api.github.com/users/nickwilliams-eventbrite/received_events","type":"User","site_admin":false},"body":"Disagree. We already use the `send` and `receive` verbs for \"send a request and assume something else gets the response\" and \"receive a response and assume something else sent the request.\" `send_jobs_parallel`, in my opinion, would be confusing. `call` is blocking everywhere else, and this is blocking, so it should also be `call`.","created_at":"2018-04-10T17:01:10Z","updated_at":"2018-04-10T17:01:10Z","html_url":"https://github.com/eventbrite/pysoa/pull/81#discussion_r180496285","pull_request_url":"https://api.github.com/repos/eventbrite/pysoa/pulls/81","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/eventbrite/pysoa/pulls/comments/180496285"},"html":{"href":"https://github.com/eventbrite/pysoa/pull/81#discussion_r180496285"},"pull_request":{"href":"https://api.github.com/repos/eventbrite/pysoa/pulls/81"}},"in_reply_to_id":180245936},"pull_request":{"url":"https://api.github.com/repos/eventbrite/pysoa/pulls/81","id":179801673,"html_url":"https://github.com/eventbrite/pysoa/pull/81","diff_url":"https://github.com/eventbrite/pysoa/pull/81.diff","patch_url":"https://github.com/eventbrite/pysoa/pull/81.patch","issue_url":"https://api.github.com/repos/eventbrite/pysoa/issues/81","number":81,"state":"open","locked":false,"title":"[MAJOR] Support sending multiple requests to execute in parallel","user":{"login":"nickwilliams-eventbrite","id":8230828,"avatar_url":"https://avatars3.githubusercontent.com/u/8230828?v=4","gravatar_id":"","url":"https://api.github.com/users/nickwilliams-eventbrite","html_url":"https://github.com/nickwilliams-eventbrite","followers_url":"https://api.github.com/users/nickwilliams-eventbrite/followers","following_url":"https://api.github.com/users/nickwilliams-eventbrite/following{/other_user}","gists_url":"https://api.github.com/users/nickwilliams-eventbrite/gists{/gist_id}","starred_url":"https://api.github.com/users/nickwilliams-eventbrite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nickwilliams-eventbrite/subscriptions","organizations_url":"https://api.github.com/users/nickwilliams-eventbrite/orgs","repos_url":"https://api.github.com/users/nickwilliams-eventbrite/repos","events_url":"https://api.github.com/users/nickwilliams-eventbrite/events{/privacy}","received_events_url":"https://api.github.com/users/nickwilliams-eventbrite/received_events","type":"User","site_admin":false},"body":"The PySOA communication protocol had innate support for parallel requests, but the client itself only supported serial requests. This large improvement commit does the following:\r\n    \r\n- Adds new methods to the client to support sending multiple requests to execute in parallel and then collect and return all responses blocking.\r\n- Improves `stub_service` so that it works with these new methods.\r\n- Writes extensive tests for parallel requests.\r\n- Improves `BaseStatusAction` to do service client status checks in parallel.\r\n- Improves the documentation to include information about parallel requests.\r\n- Fixes some documentation that wasn't parsing properly in the GitHub viewer.","created_at":"2018-04-05T21:28:26Z","updated_at":"2018-04-10T17:01:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f2d239c9e8731a916080e434c4bf0ef1c9d9e868","assignee":null,"assignees":[],"requested_reviewers":[{"login":"andrewgodwin","id":36182,"avatar_url":"https://avatars1.githubusercontent.com/u/36182?v=4","gravatar_id":"","url":"https://api.github.com/users/andrewgodwin","html_url":"https://github.com/andrewgodwin","followers_url":"https://api.github.com/users/andrewgodwin/followers","following_url":"https://api.github.com/users/andrewgodwin/following{/other_user}","gists_url":"https://api.github.com/users/andrewgodwin/gists{/gist_id}","starred_url":"https://api.github.com/users/andrewgodwin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andrewgodwin/subscriptions","organizations_url":"https://api.github.com/users/andrewgodwin/orgs","repos_url":"https://api.github.com/users/andrewgodwin/repos","events_url":"https://api.github.com/users/andrewgodwin/events{/privacy}","received_events_url":"https://api.github.com/users/andrewgodwin/received_events","type":"User","site_admin":false},{"login":"cubes","id":481673,"avatar_url":"https://avatars1.githubusercontent.com/u/481673?v=4","gravatar_id":"","url":"https://api.github.com/users/cubes","html_url":"https://github.com/cubes","followers_url":"https://api.github.com/users/cubes/followers","following_url":"https://api.github.com/users/cubes/following{/other_user}","gists_url":"https://api.github.com/users/cubes/gists{/gist_id}","starred_url":"https://api.github.com/users/cubes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cubes/subscriptions","organizations_url":"https://api.github.com/users/cubes/orgs","repos_url":"https://api.github.com/users/cubes/repos","events_url":"https://api.github.com/users/cubes/events{/privacy}","received_events_url":"https://api.github.com/users/cubes/received_events","type":"User","site_admin":false},{"login":"vartec","id":2284726,"avatar_url":"https://avatars0.githubusercontent.com/u/2284726?v=4","gravatar_id":"","url":"https://api.github.com/users/vartec","html_url":"https://github.com/vartec","followers_url":"https://api.github.com/users/vartec/followers","following_url":"https://api.github.com/users/vartec/following{/other_user}","gists_url":"https://api.github.com/users/vartec/gists{/gist_id}","starred_url":"https://api.github.com/users/vartec/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vartec/subscriptions","organizations_url":"https://api.github.com/users/vartec/orgs","repos_url":"https://api.github.com/users/vartec/repos","events_url":"https://api.github.com/users/vartec/events{/privacy}","received_events_url":"https://api.github.com/users/vartec/received_events","type":"User","site_admin":false},{"login":"yanguo-eb","id":31875321,"avatar_url":"https://avatars3.githubusercontent.com/u/31875321?v=4","gravatar_id":"","url":"https://api.github.com/users/yanguo-eb","html_url":"https://github.com/yanguo-eb","followers_url":"https://api.github.com/users/yanguo-eb/followers","following_url":"https://api.github.com/users/yanguo-eb/following{/other_user}","gists_url":"https://api.github.com/users/yanguo-eb/gists{/gist_id}","starred_url":"https://api.github.com/users/yanguo-eb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yanguo-eb/subscriptions","organizations_url":"https://api.github.com/users/yanguo-eb/orgs","repos_url":"https://api.github.com/users/yanguo-eb/repos","events_url":"https://api.github.com/users/yanguo-eb/events{/privacy}","received_events_url":"https://api.github.com/users/yanguo-eb/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/eventbrite/pysoa/pulls/81/commits","review_comments_url":"https://api.github.com/repos/eventbrite/pysoa/pulls/81/comments","review_comment_url":"https://api.github.com/repos/eventbrite/pysoa/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eventbrite/pysoa/issues/81/comments","statuses_url":"https://api.github.com/repos/eventbrite/pysoa/statuses/2dfdd755ea809f0e980ca17ae2e5cda99909501e","head":{"label":"eventbrite:add-parallel-client-methods","ref":"add-parallel-client-methods","sha":"2dfdd755ea809f0e980ca17ae2e5cda99909501e","user":{"login":"eventbrite","id":369874,"avatar_url":"https://avatars2.githubusercontent.com/u/369874?v=4","gravatar_id":"","url":"https://api.github.com/users/eventbrite","html_url":"https://github.com/eventbrite","followers_url":"https://api.github.com/users/eventbrite/followers","following_url":"https://api.github.com/users/eventbrite/following{/other_user}","gists_url":"https://api.github.com/users/eventbrite/gists{/gist_id}","starred_url":"https://api.github.com/users/eventbrite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eventbrite/subscriptions","organizations_url":"https://api.github.com/users/eventbrite/orgs","repos_url":"https://api.github.com/users/eventbrite/repos","events_url":"https://api.github.com/users/eventbrite/events{/privacy}","received_events_url":"https://api.github.com/users/eventbrite/received_events","type":"Organization","site_admin":false},"repo":{"id":79582901,"name":"pysoa","full_name":"eventbrite/pysoa","owner":{"login":"eventbrite","id":369874,"avatar_url":"https://avatars2.githubusercontent.com/u/369874?v=4","gravatar_id":"","url":"https://api.github.com/users/eventbrite","html_url":"https://github.com/eventbrite","followers_url":"https://api.github.com/users/eventbrite/followers","following_url":"https://api.github.com/users/eventbrite/following{/other_user}","gists_url":"https://api.github.com/users/eventbrite/gists{/gist_id}","starred_url":"https://api.github.com/users/eventbrite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eventbrite/subscriptions","organizations_url":"https://api.github.com/users/eventbrite/orgs","repos_url":"https://api.github.com/users/eventbrite/repos","events_url":"https://api.github.com/users/eventbrite/events{/privacy}","received_events_url":"https://api.github.com/users/eventbrite/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/eventbrite/pysoa","description":"A Python library for writing (micro)services and their clients","fork":false,"url":"https://api.github.com/repos/eventbrite/pysoa","forks_url":"https://api.github.com/repos/eventbrite/pysoa/forks","keys_url":"https://api.github.com/repos/eventbrite/pysoa/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eventbrite/pysoa/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eventbrite/pysoa/teams","hooks_url":"https://api.github.com/repos/eventbrite/pysoa/hooks","issue_events_url":"https://api.github.com/repos/eventbrite/pysoa/issues/events{/number}","events_url":"https://api.github.com/repos/eventbrite/pysoa/events","assignees_url":"https://api.github.com/repos/eventbrite/pysoa/assignees{/user}","branches_url":"https://api.github.com/repos/eventbrite/pysoa/branches{/branch}","tags_url":"https://api.github.com/repos/eventbrite/pysoa/tags","blobs_url":"https://api.github.com/repos/eventbrite/pysoa/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eventbrite/pysoa/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eventbrite/pysoa/git/refs{/sha}","trees_url":"https://api.github.com/repos/eventbrite/pysoa/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eventbrite/pysoa/statuses/{sha}","languages_url":"https://api.github.com/repos/eventbrite/pysoa/languages","stargazers_url":"https://api.github.com/repos/eventbrite/pysoa/stargazers","contributors_url":"https://api.github.com/repos/eventbrite/pysoa/contributors","subscribers_url":"https://api.github.com/repos/eventbrite/pysoa/subscribers","subscription_url":"https://api.github.com/repos/eventbrite/pysoa/subscription","commits_url":"https://api.github.com/repos/eventbrite/pysoa/commits{/sha}","git_commits_url":"https://api.github.com/repos/eventbrite/pysoa/git/commits{/sha}","comments_url":"https://api.github.com/repos/eventbrite/pysoa/comments{/number}","issue_comment_url":"https://api.github.com/repos/eventbrite/pysoa/issues/comments{/number}","contents_url":"https://api.github.com/repos/eventbrite/pysoa/contents/{+path}","compare_url":"https://api.github.com/repos/eventbrite/pysoa/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eventbrite/pysoa/merges","archive_url":"https://api.github.com/repos/eventbrite/pysoa/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eventbrite/pysoa/downloads","issues_url":"https://api.github.com/repos/eventbrite/pysoa/issues{/number}","pulls_url":"https://api.github.com/repos/eventbrite/pysoa/pulls{/number}","milestones_url":"https://api.github.com/repos/eventbrite/pysoa/milestones{/number}","notifications_url":"https://api.github.com/repos/eventbrite/pysoa/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eventbrite/pysoa/labels{/name}","releases_url":"https://api.github.com/repos/eventbrite/pysoa/releases{/id}","deployments_url":"https://api.github.com/repos/eventbrite/pysoa/deployments","created_at":"2017-01-20T17:54:44Z","updated_at":"2018-04-09T14:34:08Z","pushed_at":"2018-04-09T14:34:09Z","git_url":"git://github.com/eventbrite/pysoa.git","ssh_url":"git@github.com:eventbrite/pysoa.git","clone_url":"https://github.com/eventbrite/pysoa.git","svn_url":"https://github.com/eventbrite/pysoa","homepage":"","size":518,"stargazers_count":22,"watchers_count":22,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":1,"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":3,"open_issues":1,"watchers":22,"default_branch":"master"}},"base":{"label":"eventbrite:master","ref":"master","sha":"a41eb2f42aca0faf5218150c8d6aca1b28250460","user":{"login":"eventbrite","id":369874,"avatar_url":"https://avatars2.githubusercontent.com/u/369874?v=4","gravatar_id":"","url":"https://api.github.com/users/eventbrite","html_url":"https://github.com/eventbrite","followers_url":"https://api.github.com/users/eventbrite/followers","following_url":"https://api.github.com/users/eventbrite/following{/other_user}","gists_url":"https://api.github.com/users/eventbrite/gists{/gist_id}","starred_url":"https://api.github.com/users/eventbrite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eventbrite/subscriptions","organizations_url":"https://api.github.com/users/eventbrite/orgs","repos_url":"https://api.github.com/users/eventbrite/repos","events_url":"https://api.github.com/users/eventbrite/events{/privacy}","received_events_url":"https://api.github.com/users/eventbrite/received_events","type":"Organization","site_admin":false},"repo":{"id":79582901,"name":"pysoa","full_name":"eventbrite/pysoa","owner":{"login":"eventbrite","id":369874,"avatar_url":"https://avatars2.githubusercontent.com/u/369874?v=4","gravatar_id":"","url":"https://api.github.com/users/eventbrite","html_url":"https://github.com/eventbrite","followers_url":"https://api.github.com/users/eventbrite/followers","following_url":"https://api.github.com/users/eventbrite/following{/other_user}","gists_url":"https://api.github.com/users/eventbrite/gists{/gist_id}","starred_url":"https://api.github.com/users/eventbrite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eventbrite/subscriptions","organizations_url":"https://api.github.com/users/eventbrite/orgs","repos_url":"https://api.github.com/users/eventbrite/repos","events_url":"https://api.github.com/users/eventbrite/events{/privacy}","received_events_url":"https://api.github.com/users/eventbrite/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/eventbrite/pysoa","description":"A Python library for writing (micro)services and their clients","fork":false,"url":"https://api.github.com/repos/eventbrite/pysoa","forks_url":"https://api.github.com/repos/eventbrite/pysoa/forks","keys_url":"https://api.github.com/repos/eventbrite/pysoa/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eventbrite/pysoa/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eventbrite/pysoa/teams","hooks_url":"https://api.github.com/repos/eventbrite/pysoa/hooks","issue_events_url":"https://api.github.com/repos/eventbrite/pysoa/issues/events{/number}","events_url":"https://api.github.com/repos/eventbrite/pysoa/events","assignees_url":"https://api.github.com/repos/eventbrite/pysoa/assignees{/user}","branches_url":"https://api.github.com/repos/eventbrite/pysoa/branches{/branch}","tags_url":"https://api.github.com/repos/eventbrite/pysoa/tags","blobs_url":"https://api.github.com/repos/eventbrite/pysoa/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eventbrite/pysoa/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eventbrite/pysoa/git/refs{/sha}","trees_url":"https://api.github.com/repos/eventbrite/pysoa/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eventbrite/pysoa/statuses/{sha}","languages_url":"https://api.github.com/repos/eventbrite/pysoa/languages","stargazers_url":"https://api.github.com/repos/eventbrite/pysoa/stargazers","contributors_url":"https://api.github.com/repos/eventbrite/pysoa/contributors","subscribers_url":"https://api.github.com/repos/eventbrite/pysoa/subscribers","subscription_url":"https://api.github.com/repos/eventbrite/pysoa/subscription","commits_url":"https://api.github.com/repos/eventbrite/pysoa/commits{/sha}","git_commits_url":"https://api.github.com/repos/eventbrite/pysoa/git/commits{/sha}","comments_url":"https://api.github.com/repos/eventbrite/pysoa/comments{/number}","issue_comment_url":"https://api.github.com/repos/eventbrite/pysoa/issues/comments{/number}","contents_url":"https://api.github.com/repos/eventbrite/pysoa/contents/{+path}","compare_url":"https://api.github.com/repos/eventbrite/pysoa/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eventbrite/pysoa/merges","archive_url":"https://api.github.com/repos/eventbrite/pysoa/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eventbrite/pysoa/downloads","issues_url":"https://api.github.com/repos/eventbrite/pysoa/issues{/number}","pulls_url":"https://api.github.com/repos/eventbrite/pysoa/pulls{/number}","milestones_url":"https://api.github.com/repos/eventbrite/pysoa/milestones{/number}","notifications_url":"https://api.github.com/repos/eventbrite/pysoa/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eventbrite/pysoa/labels{/name}","releases_url":"https://api.github.com/repos/eventbrite/pysoa/releases{/id}","deployments_url":"https://api.github.com/repos/eventbrite/pysoa/deployments","created_at":"2017-01-20T17:54:44Z","updated_at":"2018-04-09T14:34:08Z","pushed_at":"2018-04-09T14:34:09Z","git_url":"git://github.com/eventbrite/pysoa.git","ssh_url":"git@github.com:eventbrite/pysoa.git","clone_url":"https://github.com/eventbrite/pysoa.git","svn_url":"https://github.com/eventbrite/pysoa","homepage":"","size":518,"stargazers_count":22,"watchers_count":22,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3,"mirror_url":null,"archived":false,"open_issues_count":1,"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":3,"open_issues":1,"watchers":22,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eventbrite/pysoa/pulls/81"},"html":{"href":"https://github.com/eventbrite/pysoa/pull/81"},"issue":{"href":"https://api.github.com/repos/eventbrite/pysoa/issues/81"},"comments":{"href":"https://api.github.com/repos/eventbrite/pysoa/issues/81/comments"},"review_comments":{"href":"https://api.github.com/repos/eventbrite/pysoa/pulls/81/comments"},"review_comment":{"href":"https://api.github.com/repos/eventbrite/pysoa/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eventbrite/pysoa/pulls/81/commits"},"statuses":{"href":"https://api.github.com/repos/eventbrite/pysoa/statuses/2dfdd755ea809f0e980ca17ae2e5cda99909501e"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"nickwilliams-eventbrite"}}