{"action":"created","comment":{"url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/comments/82913071","pull_request_review_id":3787279,"id":82913071,"diff_hunk":"@@ -0,0 +1,209 @@\n+# Copyright 2016 Google Inc.\n+#\n+# Licensed under the Apache License, Version 2.0 (the \"License\");\n+# you may not use this file except in compliance with the License.\n+# You may obtain a copy of the License at\n+#\n+#      http://www.apache.org/licenses/LICENSE-2.0\n+#\n+# Unless required by applicable law or agreed to in writing, software\n+# distributed under the License is distributed on an \"AS IS\" BASIS,\n+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+# See the License for the specific language governing permissions and\n+# limitations under the License.\n+\n+\n+\"\"\"Interfaces for credentials.\"\"\"\n+\n+import abc\n+\n+import six\n+\n+from google.auth import _helpers\n+\n+\n+@six.add_metaclass(abc.ABCMeta)\n+class Credentials(object):\n+    \"\"\"Base class for all credentials.\n+\n+    All credentials have a :attr:`token` that is used for authentication and\n+    may also optionally set an :attr:`expiry` to indicate when the token will\n+    no longer be valid.\n+\n+    Most credentials will be :attr:`invalid` until :meth:`refresh` is called.\n+    Credentials can do this automatically before the first HTTP request in\n+    :meth:`before_request`.\n+\n+    Although the token and expiration will change as the credentials are\n+    :meth:`refreshed <refresh>` and used, credentials should be considered\n+    immutable. Various credentials will accept configuration such as private\n+    keys, scopes, and other options. These options are not changeable after\n+    construction. Some classes will provide mechanisms to copy the credentials\n+    with modifications such as :meth:`ScopedCredentials.with_scopes`.\n+    \"\"\"\n+    def __init__(self):\n+        self.token = None\n+        \"\"\"str: The bearer token that can be used in HTTP headers to make\n+        authenticated requests.\"\"\"\n+        self.expiry = None\n+        \"\"\"Optional[datetime]: When the token expires and is no longer valid.\n+        If this is None, the token is assumed to never expire.\"\"\"\n+\n+    @property\n+    def valid(self):\n+        \"\"\"Checks the validity of the credentials.\n+\n+        This is True if the credentials have a :attr:`token` and the token\n+        is not :attr:`expired`.\n+        \"\"\"\n+        return self.token is not None and not self.expired\n+\n+    @property\n+    def expired(self):\n+        \"\"\"Checks if the credentials are expired.\n+\n+        Note that credentials can be invalid but not expired becaue Credentials\n+        with :attr:`expiry` set to None is considered to never expire.\n+        \"\"\"\n+        now = _helpers.utcnow()\n+        if self.expiry is None or self.expiry > now:\n+            return False\n+        else:\n+            return True\n+\n+    @abc.abstractmethod\n+    def refresh(self, request):\n+        \"\"\"Refreshes the access token.\n+\n+        Args:\n+            request (google.auth.transport.Request): A callable used to make\n+                HTTP requests.\n+\n+        Raises:\n+            google.auth.exceptions.RefreshError: If the credentials could\n+                not be refreshed.\n+        \"\"\"\n+        # pylint: disable=missing-raises-doc\n+        # (pylint doesn't recognize that this is abstract)\n+        raise NotImplementedError('Refresh must be implemented')\n+\n+    def apply(self, headers, token=None):\n+        \"\"\"Apply the token to the authentication header.\n+\n+        Args:\n+            headers (Mapping): The HTTP request headers.\n+            token (Optional[str]): If specified, overrides the current access\n+                token.\n+        \"\"\"\n+        headers[b'authorization'] = 'Bearer {}'.format(\n+            _helpers.from_bytes(token or self.token))\n+\n+    def before_request(self, request, method, url, headers):\n+        \"\"\"Performs credential-specific before request logic.\n+\n+        Refreshes the credentials if necessary, then calls :meth:`apply` to\n+        apply the token to the authentication header.\n+\n+        Args:\n+            request (google.auth.transport.Request): A callable used to make\n+                HTTP requests.\n+            method (str): The request's HTTP method.\n+            url (str): The request's URI.\n+            headers (Mapping): The request's headers.\n+        \"\"\"\n+        # pylint: disable=unused-argument\n+        # (Subclasses may use these arguments to ascertain information about\n+        # the http request.)\n+        if not self.valid:\n+            self.refresh(request)\n+        self.apply(headers)\n+\n+\n+@six.add_metaclass(abc.ABCMeta)\n+class ScopedCredentials(object):","path":"google/auth/credentials.py","position":120,"original_position":123,"commit_id":"2142e4a32a10a0a8bdfb5e1f5e8c5277e1c80b33","original_commit_id":"29d3a7fa7b580b922a78d3010c4c7a9a3a54ae19","user":{"login":"nathanielmanistaatgoogle","id":10131044,"avatar_url":"https://avatars.githubusercontent.com/u/10131044?v=3","gravatar_id":"","url":"https://api.github.com/users/nathanielmanistaatgoogle","html_url":"https://github.com/nathanielmanistaatgoogle","followers_url":"https://api.github.com/users/nathanielmanistaatgoogle/followers","following_url":"https://api.github.com/users/nathanielmanistaatgoogle/following{/other_user}","gists_url":"https://api.github.com/users/nathanielmanistaatgoogle/gists{/gist_id}","starred_url":"https://api.github.com/users/nathanielmanistaatgoogle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nathanielmanistaatgoogle/subscriptions","organizations_url":"https://api.github.com/users/nathanielmanistaatgoogle/orgs","repos_url":"https://api.github.com/users/nathanielmanistaatgoogle/repos","events_url":"https://api.github.com/users/nathanielmanistaatgoogle/events{/privacy}","received_events_url":"https://api.github.com/users/nathanielmanistaatgoogle/received_events","type":"User","site_admin":false},"body":"I'm not following the diamond inheritance problem worry. If all three interfaces contain no concrete elements (not even private ones), there's no diamond inheritance problem, right? It's not like what would be the two subinterfaces have conflicting method names.\r\n\r\nYes, I am mostly fine with this as long as the concrete elements are dropped from the interfaces.\r\n\r\nFor common behavior, implement it once in one (private) place and delegate to it from the n places where it is exposed. Have it directly tested by an access-to-implementation test and have it indirectly tested by the API-surface-level tests that test each place where it is exposed. Yes, these extra connections are [forwarding methods](https://en.wikipedia.org/wiki/Composition_over_inheritance#Drawbacks) that in isolation would be considered redundant cruft but in the context of _allowing you to separate the way your system is presented from the way it is implemented_ are a price well worth paying. Absolutely don't repeat the executable statements that form the actual useful logic of the library; that would be bloat as well as inviting bugs and inconsistency to creep in over time.\r\n\r\nIt may be the case that you choose for the private implementation of the library classes very similar to those originally drafted for the library's public API. Should that come to pass, I won't raise much of a fuss since they'll be all private implementation.","created_at":"2016-10-11T23:51:30Z","updated_at":"2016-10-11T23:51:30Z","html_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python/pull/8#discussion_r82913071","pull_request_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8","_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/comments/82913071"},"html":{"href":"https://github.com/GoogleCloudPlatform/google-auth-library-python/pull/8#discussion_r82913071"},"pull_request":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8"}}},"pull_request":{"url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8","id":87980535,"html_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python/pull/8","diff_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python/pull/8.diff","patch_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python/pull/8.patch","issue_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/8","number":8,"state":"open","locked":false,"title":"Add google.auth.credentials - the public interfaces for credentials","user":{"login":"jonparrott","id":250995,"avatar_url":"https://avatars.githubusercontent.com/u/250995?v=3","gravatar_id":"","url":"https://api.github.com/users/jonparrott","html_url":"https://github.com/jonparrott","followers_url":"https://api.github.com/users/jonparrott/followers","following_url":"https://api.github.com/users/jonparrott/following{/other_user}","gists_url":"https://api.github.com/users/jonparrott/gists{/gist_id}","starred_url":"https://api.github.com/users/jonparrott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonparrott/subscriptions","organizations_url":"https://api.github.com/users/jonparrott/orgs","repos_url":"https://api.github.com/users/jonparrott/repos","events_url":"https://api.github.com/users/jonparrott/events{/privacy}","received_events_url":"https://api.github.com/users/jonparrott/received_events","type":"User","site_admin":false},"body":"@nathanielmanistaatgoogle this is the section you indicated you wanted to give input on. PTAL.","created_at":"2016-10-04T21:45:50Z","updated_at":"2016-10-11T23:51:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9041730387e597083f484c9377fc07d331184717","assignee":{"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},"assignees":[{"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":"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}],"milestone":{"url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/milestones/1","html_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python/milestones/1.0.0","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/milestones/1/labels","id":2045235,"number":1,"title":"1.0.0","description":"","creator":{"login":"jonparrott","id":250995,"avatar_url":"https://avatars.githubusercontent.com/u/250995?v=3","gravatar_id":"","url":"https://api.github.com/users/jonparrott","html_url":"https://github.com/jonparrott","followers_url":"https://api.github.com/users/jonparrott/followers","following_url":"https://api.github.com/users/jonparrott/following{/other_user}","gists_url":"https://api.github.com/users/jonparrott/gists{/gist_id}","starred_url":"https://api.github.com/users/jonparrott/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jonparrott/subscriptions","organizations_url":"https://api.github.com/users/jonparrott/orgs","repos_url":"https://api.github.com/users/jonparrott/repos","events_url":"https://api.github.com/users/jonparrott/events{/privacy}","received_events_url":"https://api.github.com/users/jonparrott/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":12,"state":"open","created_at":"2016-10-03T20:50:32Z","updated_at":"2016-10-10T20:08:02Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8/commits","review_comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8/comments","review_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/comments{/number}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/8/comments","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/statuses/2142e4a32a10a0a8bdfb5e1f5e8c5277e1c80b33","head":{"label":"GoogleCloudPlatform:credentials-abc","ref":"credentials-abc","sha":"2142e4a32a10a0a8bdfb5e1f5e8c5277e1c80b33","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":69199387,"name":"google-auth-library-python","full_name":"GoogleCloudPlatform/google-auth-library-python","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python","description":"Google Auth Python Library (Experimental)","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/deployments","created_at":"2016-09-26T00:38:59Z","updated_at":"2016-10-04T17:20:37Z","pushed_at":"2016-10-11T21:25:55Z","git_url":"git://github.com/GoogleCloudPlatform/google-auth-library-python.git","ssh_url":"git@github.com:GoogleCloudPlatform/google-auth-library-python.git","clone_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python.git","svn_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python","homepage":null,"size":172,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"base":{"label":"GoogleCloudPlatform:master","ref":"master","sha":"9b5c2224c577fb079e2d9b3063f353e729b2d473","user":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":69199387,"name":"google-auth-library-python","full_name":"GoogleCloudPlatform/google-auth-library-python","owner":{"login":"GoogleCloudPlatform","id":2810941,"avatar_url":"https://avatars.githubusercontent.com/u/2810941?v=3","gravatar_id":"","url":"https://api.github.com/users/GoogleCloudPlatform","html_url":"https://github.com/GoogleCloudPlatform","followers_url":"https://api.github.com/users/GoogleCloudPlatform/followers","following_url":"https://api.github.com/users/GoogleCloudPlatform/following{/other_user}","gists_url":"https://api.github.com/users/GoogleCloudPlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/GoogleCloudPlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/GoogleCloudPlatform/subscriptions","organizations_url":"https://api.github.com/users/GoogleCloudPlatform/orgs","repos_url":"https://api.github.com/users/GoogleCloudPlatform/repos","events_url":"https://api.github.com/users/GoogleCloudPlatform/events{/privacy}","received_events_url":"https://api.github.com/users/GoogleCloudPlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python","description":"Google Auth Python Library (Experimental)","fork":false,"url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python","forks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/forks","keys_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/keys{/key_id}","collaborators_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/teams","hooks_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/hooks","issue_events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/events{/number}","events_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/events","assignees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/assignees{/user}","branches_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/branches{/branch}","tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/tags","blobs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/refs{/sha}","trees_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/trees{/sha}","statuses_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/statuses/{sha}","languages_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/languages","stargazers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/stargazers","contributors_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/contributors","subscribers_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/subscribers","subscription_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/subscription","commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/commits{/sha}","git_commits_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/git/commits{/sha}","comments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/comments{/number}","issue_comment_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/comments{/number}","contents_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/contents/{+path}","compare_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/compare/{base}...{head}","merges_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/merges","archive_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/downloads","issues_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues{/number}","pulls_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls{/number}","milestones_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/milestones{/number}","notifications_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/labels{/name}","releases_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/releases{/id}","deployments_url":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/deployments","created_at":"2016-09-26T00:38:59Z","updated_at":"2016-10-04T17:20:37Z","pushed_at":"2016-10-11T21:25:55Z","git_url":"git://github.com/GoogleCloudPlatform/google-auth-library-python.git","ssh_url":"git@github.com:GoogleCloudPlatform/google-auth-library-python.git","clone_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python.git","svn_url":"https://github.com/GoogleCloudPlatform/google-auth-library-python","homepage":null,"size":172,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":3,"forks":0,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8"},"html":{"href":"https://github.com/GoogleCloudPlatform/google-auth-library-python/pull/8"},"issue":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/8"},"comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/issues/8/comments"},"review_comments":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8/comments"},"review_comment":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/pulls/8/commits"},"statuses":{"href":"https://api.github.com/repos/GoogleCloudPlatform/google-auth-library-python/statuses/2142e4a32a10a0a8bdfb5e1f5e8c5277e1c80b33"}}}}
{"actor":{"display_login":"nathanielmanistaatgoogle"}}