diff --git a/google_auth_oauthlib/helpers.py b/google_auth_oauthlib/helpers.py index 41866d6..7bade82 100644 --- a/google_auth_oauthlib/helpers.py +++ b/google_auth_oauthlib/helpers.py @@ -21,6 +21,7 @@ .. _requests-oauthlib: http://requests-oauthlib.readthedocs.io/en/stable/ """ +import datetime import json import google.oauth2.credentials @@ -128,10 +129,13 @@ def credentials_from_session(session, client_config=None): 'There is no access token for this session, did you call ' 'fetch_token?') - return google.oauth2.credentials.Credentials( + credentials = google.oauth2.credentials.Credentials( session.token['access_token'], refresh_token=session.token.get('refresh_token'), token_uri=client_config.get('token_uri'), client_id=client_config.get('client_id'), client_secret=client_config.get('client_secret'), scopes=session.scope) + credentials.expiry = datetime.datetime.fromtimestamp( + session.token['expires_at']) + return credentials diff --git a/tests/test_flow.py b/tests/test_flow.py index d68932c..52752c1 100644 --- a/tests/test_flow.py +++ b/tests/test_flow.py @@ -13,6 +13,7 @@ # limitations under the License. import concurrent.futures +import datetime from functools import partial import json import os @@ -133,12 +134,14 @@ def test_fetch_token(self, instance): def test_credentials(self, instance): instance.oauth2session.token = { 'access_token': mock.sentinel.access_token, - 'refresh_token': mock.sentinel.refresh_token + 'refresh_token': mock.sentinel.refresh_token, + 'expires_at': 643969200.0 } credentials = instance.credentials assert credentials.token == mock.sentinel.access_token + assert credentials.expiry == datetime.datetime(1990, 5, 29, 8, 20, 0) assert credentials._refresh_token == mock.sentinel.refresh_token assert (credentials._client_id == CLIENT_SECRETS_INFO['web']['client_id']) @@ -150,7 +153,8 @@ def test_credentials(self, instance): def test_authorized_session(self, instance): instance.oauth2session.token = { 'access_token': mock.sentinel.access_token, - 'refresh_token': mock.sentinel.refresh_token + 'refresh_token': mock.sentinel.refresh_token, + 'expires_at': 643969200.0 } session = instance.authorized_session() @@ -172,7 +176,8 @@ def mock_fetch_token(self, instance): def set_token(*args, **kwargs): instance.oauth2session.token = { 'access_token': mock.sentinel.access_token, - 'refresh_token': mock.sentinel.refresh_token + 'refresh_token': mock.sentinel.refresh_token, + 'expires_at': 643969200.0 } fetch_token_patch = mock.patch.object( diff --git a/tests/test_helpers.py b/tests/test_helpers.py index faae76b..ce61bd5 100644 --- a/tests/test_helpers.py +++ b/tests/test_helpers.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +import datetime import json import os @@ -73,13 +74,15 @@ def session(): def test_credentials_from_session(session): session.token = { 'access_token': mock.sentinel.access_token, - 'refresh_token': mock.sentinel.refresh_token + 'refresh_token': mock.sentinel.refresh_token, + 'expires_at': 643969200.0 } credentials = helpers.credentials_from_session( session, CLIENT_SECRETS_INFO['web']) assert credentials.token == mock.sentinel.access_token + assert credentials.expiry == datetime.datetime(1990, 5, 29, 8, 20, 0) assert credentials._refresh_token == mock.sentinel.refresh_token assert credentials._client_id == CLIENT_SECRETS_INFO['web']['client_id'] assert (credentials._client_secret ==