{"action":"created","comment":{"url":"https://api.github.com/repos/google/oauth2client/pulls/comments/57905276","id":57905276,"diff_hunk":"@@ -85,32 +121,110 @@ class AppAssertionCredentials(AssertionCredentials):\n     information to generate and refresh its own access tokens.\n     \"\"\"\n \n-    @util.positional(2)\n-    def __init__(self, scope='', **kwargs):\n+    @util.positional(3)\n+    def __init__(self,\n+                 scope=None,\n+                 service_account_email='default',\n+                 service_account_info=None,\n+                 **kwargs):\n         \"\"\"Constructor for AppAssertionCredentials\n \n         Args:\n-            scope: string or iterable of strings, scope(s) of the credentials\n-                   being requested. Using this argument will have no effect on\n-                   the actual scopes for tokens requested. These scopes are\n-                   set at VM instance creation time and won't change.\n+            scope:\n+                string or iterable of strings, scope(s) of the credentials\n+                being requested. Using this argument will have no effect on\n+                the actual scopes for tokens requested. These scopes are\n+                set at VM instance creation time and won't change.\n+            service_account_email:\n+                the email for these credentials. This can be used with custom\n+                service accounts, or left blank to use the default service\n+                account for the instance. Usually the compute engine service\n+                account.","path":"oauth2client/contrib/gce.py","position":133,"original_position":133,"commit_id":"58653561517020e4ad47091dc330db9f627b02b8","original_commit_id":"58653561517020e4ad47091dc330db9f627b02b8","user":{"login":"dhermes","id":520669,"avatar_url":"https://avatars.githubusercontent.com/u/520669?v=3","gravatar_id":"","url":"https://api.github.com/users/dhermes","html_url":"https://github.com/dhermes","followers_url":"https://api.github.com/users/dhermes/followers","following_url":"https://api.github.com/users/dhermes/following{/other_user}","gists_url":"https://api.github.com/users/dhermes/gists{/gist_id}","starred_url":"https://api.github.com/users/dhermes/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dhermes/subscriptions","organizations_url":"https://api.github.com/users/dhermes/orgs","repos_url":"https://api.github.com/users/dhermes/repos","events_url":"https://api.github.com/users/dhermes/events{/privacy}","received_events_url":"https://api.github.com/users/dhermes/received_events","type":"User","site_admin":false},"body":"What does \"Usually the compute engine service account\" mean?","created_at":"2016-03-30T15:10:51Z","updated_at":"2016-03-30T15:10:51Z","html_url":"https://github.com/google/oauth2client/pull/476#discussion_r57905276","pull_request_url":"https://api.github.com/repos/google/oauth2client/pulls/476","_links":{"self":{"href":"https://api.github.com/repos/google/oauth2client/pulls/comments/57905276"},"html":{"href":"https://github.com/google/oauth2client/pull/476#discussion_r57905276"},"pull_request":{"href":"https://api.github.com/repos/google/oauth2client/pulls/476"}}},"pull_request":{"url":"https://api.github.com/repos/google/oauth2client/pulls/476","id":64192396,"html_url":"https://github.com/google/oauth2client/pull/476","diff_url":"https://github.com/google/oauth2client/pull/476.diff","patch_url":"https://github.com/google/oauth2client/pull/476.patch","issue_url":"https://api.github.com/repos/google/oauth2client/issues/476","number":476,"state":"open","locked":false,"title":"Update GCE AppAssertionCredentials","user":{"login":"elibixby","id":6596957,"avatar_url":"https://avatars.githubusercontent.com/u/6596957?v=3","gravatar_id":"","url":"https://api.github.com/users/elibixby","html_url":"https://github.com/elibixby","followers_url":"https://api.github.com/users/elibixby/followers","following_url":"https://api.github.com/users/elibixby/following{/other_user}","gists_url":"https://api.github.com/users/elibixby/gists{/gist_id}","starred_url":"https://api.github.com/users/elibixby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elibixby/subscriptions","organizations_url":"https://api.github.com/users/elibixby/orgs","repos_url":"https://api.github.com/users/elibixby/repos","events_url":"https://api.github.com/users/elibixby/events{/privacy}","received_events_url":"https://api.github.com/users/elibixby/received_events","type":"User","site_admin":false},"body":"This provides several much needed updates to GCE App Assertion Credentials\r\n\r\n1. Properly populates token expiry\r\n2. Retrieves credentials scopes from the metadata server\r\n3. Allows credentials to use [custom service accounts](https://cloud.google.com/compute/docs/authentication#createcutomserviceaccount) by providing an optional email field\r\n4. Implements serialization/deserialization for this email field\r\n5. Provides a project_id property using metadata server in preparation for a pull request addressing #471 ","created_at":"2016-03-25T18:32:59Z","updated_at":"2016-03-30T15:10:51Z","closed_at":null,"merged_at":null,"merge_commit_sha":"673ed57432c1b326914f5737e144451e5591aca1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/google/oauth2client/pulls/476/commits","review_comments_url":"https://api.github.com/repos/google/oauth2client/pulls/476/comments","review_comment_url":"https://api.github.com/repos/google/oauth2client/pulls/comments{/number}","comments_url":"https://api.github.com/repos/google/oauth2client/issues/476/comments","statuses_url":"https://api.github.com/repos/google/oauth2client/statuses/58653561517020e4ad47091dc330db9f627b02b8","head":{"label":"elibixby:master","ref":"master","sha":"58653561517020e4ad47091dc330db9f627b02b8","user":{"login":"elibixby","id":6596957,"avatar_url":"https://avatars.githubusercontent.com/u/6596957?v=3","gravatar_id":"","url":"https://api.github.com/users/elibixby","html_url":"https://github.com/elibixby","followers_url":"https://api.github.com/users/elibixby/followers","following_url":"https://api.github.com/users/elibixby/following{/other_user}","gists_url":"https://api.github.com/users/elibixby/gists{/gist_id}","starred_url":"https://api.github.com/users/elibixby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elibixby/subscriptions","organizations_url":"https://api.github.com/users/elibixby/orgs","repos_url":"https://api.github.com/users/elibixby/repos","events_url":"https://api.github.com/users/elibixby/events{/privacy}","received_events_url":"https://api.github.com/users/elibixby/received_events","type":"User","site_admin":false},"repo":{"id":50957874,"name":"oauth2client","full_name":"elibixby/oauth2client","owner":{"login":"elibixby","id":6596957,"avatar_url":"https://avatars.githubusercontent.com/u/6596957?v=3","gravatar_id":"","url":"https://api.github.com/users/elibixby","html_url":"https://github.com/elibixby","followers_url":"https://api.github.com/users/elibixby/followers","following_url":"https://api.github.com/users/elibixby/following{/other_user}","gists_url":"https://api.github.com/users/elibixby/gists{/gist_id}","starred_url":"https://api.github.com/users/elibixby/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/elibixby/subscriptions","organizations_url":"https://api.github.com/users/elibixby/orgs","repos_url":"https://api.github.com/users/elibixby/repos","events_url":"https://api.github.com/users/elibixby/events{/privacy}","received_events_url":"https://api.github.com/users/elibixby/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/elibixby/oauth2client","description":"This is a Python library for accessing resources protected by OAuth 2.0.","fork":true,"url":"https://api.github.com/repos/elibixby/oauth2client","forks_url":"https://api.github.com/repos/elibixby/oauth2client/forks","keys_url":"https://api.github.com/repos/elibixby/oauth2client/keys{/key_id}","collaborators_url":"https://api.github.com/repos/elibixby/oauth2client/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/elibixby/oauth2client/teams","hooks_url":"https://api.github.com/repos/elibixby/oauth2client/hooks","issue_events_url":"https://api.github.com/repos/elibixby/oauth2client/issues/events{/number}","events_url":"https://api.github.com/repos/elibixby/oauth2client/events","assignees_url":"https://api.github.com/repos/elibixby/oauth2client/assignees{/user}","branches_url":"https://api.github.com/repos/elibixby/oauth2client/branches{/branch}","tags_url":"https://api.github.com/repos/elibixby/oauth2client/tags","blobs_url":"https://api.github.com/repos/elibixby/oauth2client/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/elibixby/oauth2client/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/elibixby/oauth2client/git/refs{/sha}","trees_url":"https://api.github.com/repos/elibixby/oauth2client/git/trees{/sha}","statuses_url":"https://api.github.com/repos/elibixby/oauth2client/statuses/{sha}","languages_url":"https://api.github.com/repos/elibixby/oauth2client/languages","stargazers_url":"https://api.github.com/repos/elibixby/oauth2client/stargazers","contributors_url":"https://api.github.com/repos/elibixby/oauth2client/contributors","subscribers_url":"https://api.github.com/repos/elibixby/oauth2client/subscribers","subscription_url":"https://api.github.com/repos/elibixby/oauth2client/subscription","commits_url":"https://api.github.com/repos/elibixby/oauth2client/commits{/sha}","git_commits_url":"https://api.github.com/repos/elibixby/oauth2client/git/commits{/sha}","comments_url":"https://api.github.com/repos/elibixby/oauth2client/comments{/number}","issue_comment_url":"https://api.github.com/repos/elibixby/oauth2client/issues/comments{/number}","contents_url":"https://api.github.com/repos/elibixby/oauth2client/contents/{+path}","compare_url":"https://api.github.com/repos/elibixby/oauth2client/compare/{base}...{head}","merges_url":"https://api.github.com/repos/elibixby/oauth2client/merges","archive_url":"https://api.github.com/repos/elibixby/oauth2client/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/elibixby/oauth2client/downloads","issues_url":"https://api.github.com/repos/elibixby/oauth2client/issues{/number}","pulls_url":"https://api.github.com/repos/elibixby/oauth2client/pulls{/number}","milestones_url":"https://api.github.com/repos/elibixby/oauth2client/milestones{/number}","notifications_url":"https://api.github.com/repos/elibixby/oauth2client/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/elibixby/oauth2client/labels{/name}","releases_url":"https://api.github.com/repos/elibixby/oauth2client/releases{/id}","deployments_url":"https://api.github.com/repos/elibixby/oauth2client/deployments","created_at":"2016-02-02T22:54:18Z","updated_at":"2016-02-02T22:54:19Z","pushed_at":"2016-03-30T03:12:06Z","git_url":"git://github.com/elibixby/oauth2client.git","ssh_url":"git@github.com:elibixby/oauth2client.git","clone_url":"https://github.com/elibixby/oauth2client.git","svn_url":"https://github.com/elibixby/oauth2client","homepage":"","size":23585,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"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":"google:master","ref":"master","sha":"3ca2ca7f39b7ac60d449ca1ce6062e46b0dd899d","user":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"repo":{"id":14211461,"name":"oauth2client","full_name":"google/oauth2client","owner":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/google/oauth2client","description":"This is a Python library for accessing resources protected by OAuth 2.0.","fork":false,"url":"https://api.github.com/repos/google/oauth2client","forks_url":"https://api.github.com/repos/google/oauth2client/forks","keys_url":"https://api.github.com/repos/google/oauth2client/keys{/key_id}","collaborators_url":"https://api.github.com/repos/google/oauth2client/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/google/oauth2client/teams","hooks_url":"https://api.github.com/repos/google/oauth2client/hooks","issue_events_url":"https://api.github.com/repos/google/oauth2client/issues/events{/number}","events_url":"https://api.github.com/repos/google/oauth2client/events","assignees_url":"https://api.github.com/repos/google/oauth2client/assignees{/user}","branches_url":"https://api.github.com/repos/google/oauth2client/branches{/branch}","tags_url":"https://api.github.com/repos/google/oauth2client/tags","blobs_url":"https://api.github.com/repos/google/oauth2client/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/google/oauth2client/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/google/oauth2client/git/refs{/sha}","trees_url":"https://api.github.com/repos/google/oauth2client/git/trees{/sha}","statuses_url":"https://api.github.com/repos/google/oauth2client/statuses/{sha}","languages_url":"https://api.github.com/repos/google/oauth2client/languages","stargazers_url":"https://api.github.com/repos/google/oauth2client/stargazers","contributors_url":"https://api.github.com/repos/google/oauth2client/contributors","subscribers_url":"https://api.github.com/repos/google/oauth2client/subscribers","subscription_url":"https://api.github.com/repos/google/oauth2client/subscription","commits_url":"https://api.github.com/repos/google/oauth2client/commits{/sha}","git_commits_url":"https://api.github.com/repos/google/oauth2client/git/commits{/sha}","comments_url":"https://api.github.com/repos/google/oauth2client/comments{/number}","issue_comment_url":"https://api.github.com/repos/google/oauth2client/issues/comments{/number}","contents_url":"https://api.github.com/repos/google/oauth2client/contents/{+path}","compare_url":"https://api.github.com/repos/google/oauth2client/compare/{base}...{head}","merges_url":"https://api.github.com/repos/google/oauth2client/merges","archive_url":"https://api.github.com/repos/google/oauth2client/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/google/oauth2client/downloads","issues_url":"https://api.github.com/repos/google/oauth2client/issues{/number}","pulls_url":"https://api.github.com/repos/google/oauth2client/pulls{/number}","milestones_url":"https://api.github.com/repos/google/oauth2client/milestones{/number}","notifications_url":"https://api.github.com/repos/google/oauth2client/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/google/oauth2client/labels{/name}","releases_url":"https://api.github.com/repos/google/oauth2client/releases{/id}","deployments_url":"https://api.github.com/repos/google/oauth2client/deployments","created_at":"2013-11-07T18:03:04Z","updated_at":"2016-03-30T07:14:52Z","pushed_at":"2016-03-30T03:12:06Z","git_url":"git://github.com/google/oauth2client.git","ssh_url":"git@github.com:google/oauth2client.git","clone_url":"https://github.com/google/oauth2client.git","svn_url":"https://github.com/google/oauth2client","homepage":"","size":24317,"stargazers_count":350,"watchers_count":350,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":181,"mirror_url":null,"open_issues_count":80,"forks":181,"open_issues":80,"watchers":350,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/google/oauth2client/pulls/476"},"html":{"href":"https://github.com/google/oauth2client/pull/476"},"issue":{"href":"https://api.github.com/repos/google/oauth2client/issues/476"},"comments":{"href":"https://api.github.com/repos/google/oauth2client/issues/476/comments"},"review_comments":{"href":"https://api.github.com/repos/google/oauth2client/pulls/476/comments"},"review_comment":{"href":"https://api.github.com/repos/google/oauth2client/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/google/oauth2client/pulls/476/commits"},"statuses":{"href":"https://api.github.com/repos/google/oauth2client/statuses/58653561517020e4ad47091dc330db9f627b02b8"}}}}