Merge pull request #540 from pferate/pep8_cleanup

PEP8 cleanup.
This commit is contained in:
Nathaniel Manista
2016-07-11 09:48:24 -07:00
committed by GitHub
51 changed files with 348 additions and 318 deletions

View File

@@ -18,6 +18,7 @@ env:
- TOX_ENV=system-tests
- TOX_ENV=system-tests3
- TOX_ENV=gae
- TOX_ENV=flake8
global:
- GAE_PYTHONPATH=${HOME}/.cache/google_appengine
cache:

View File

@@ -5,14 +5,22 @@
#
import os
from pkg_resources import get_distribution
import sys
import mock
# See
# (https://read-the-docs.readthedocs.io/en/latest/faq.html#\
# i-get-import-errors-on-libraries-that-depend-on-c-modules)
# In order to load django before 1.7, we need to create a faux
# settings module and load it. This assumes django has been installed
# (but it must be for the docs to build), so if it has not already
# been installed run `pip install -r docs/requirements.txt`.
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.contrib.test_django_settings'
import django
import mock
from pkg_resources import get_distribution
if django.VERSION[1] < 7:
sys.path.insert(0, '.')
# See https://read-the-docs.readthedocs.io/en/latest/faq.html#i-get-import-errors-on-libraries-that-depend-on-c-modules
class Mock(mock.Mock):
@@ -61,15 +69,6 @@ release = distro.version
exclude_patterns = ['_build']
# In order to load django before 1.7, we need to create a faux
# settings module and load it. This assumes django has been installed
# (but it must be for the docs to build), so if it has not already
# been installed run `pip install -r docs/requirements.txt`.
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.contrib.test_django_settings'
import django
if django.VERSION[1] < 7:
sys.path.insert(0, '.')
# -- Options for HTML output ----------------------------------------------
# We fake our more expensive imports when building the docs.

View File

@@ -15,6 +15,7 @@
import base64
import json
import six

View File

@@ -13,8 +13,6 @@
# limitations under the License.
"""OpenSSL Crypto-related routines for oauth2client."""
import base64
from OpenSSL import crypto
from oauth2client._helpers import _parse_pem_key

View File

@@ -13,8 +13,8 @@
# limitations under the License.
"""pyCrypto Crypto-related routines for oauth2client."""
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Util.asn1 import DerSequence

View File

@@ -17,33 +17,32 @@
Tools for interacting with OAuth 2.0 protected resources.
"""
import base64
import collections
import copy
import datetime
import json
import logging
import os
import shutil
import socket
import sys
import tempfile
import time
import shutil
import httplib2
import six
from six.moves import http_client
from six.moves import urllib
import httplib2
from oauth2client import clientsecrets
from oauth2client import GOOGLE_AUTH_URI
from oauth2client import GOOGLE_DEVICE_URI
from oauth2client import GOOGLE_REVOKE_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client import GOOGLE_TOKEN_INFO_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client import util
from oauth2client._helpers import _from_bytes
from oauth2client._helpers import _to_bytes
from oauth2client._helpers import _urlsafe_b64decode
from oauth2client import clientsecrets
from oauth2client import util
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -259,8 +258,8 @@ class Credentials(object):
strip: array, An array of names of members to exclude from the
JSON.
to_serialize: dict, (Optional) The properties for this object
that will be serialized. This allows callers to modify
before serializing.
that will be serialized. This allows callers to
modify before serializing.
Returns:
string, a JSON representation of this instance, suitable to pass to
@@ -359,7 +358,8 @@ class Storage(object):
Args:
lock: An optional threading.Lock-like object. Must implement at
least acquire() and release(). Does not need to be re-entrant.
least acquire() and release(). Does not need to be
re-entrant.
"""
self._lock = lock
@@ -1195,7 +1195,7 @@ class GoogleCredentials(OAuth2Credentials):
print(response)
"""
NON_SERIALIZED_MEMBERS = (
NON_SERIALIZED_MEMBERS = (
frozenset(['_private_key']) |
OAuth2Credentials.NON_SERIALIZED_MEMBERS)
"""Members that aren't serialized when object is converted to JSON."""
@@ -1253,12 +1253,11 @@ class GoogleCredentials(OAuth2Credentials):
# We handle service_account.ServiceAccountCredentials since it is a
# possible return type of GoogleCredentials.get_application_default()
if (data['_module'] == 'oauth2client.service_account' and
data['_class'] == 'ServiceAccountCredentials'):
data['_class'] == 'ServiceAccountCredentials'):
return ServiceAccountCredentials.from_json(data)
elif (data['_module'] == 'oauth2client.service_account' and
data['_class'] == '_JWTAccessCredentials'):
data['_class'] == '_JWTAccessCredentials'):
return _JWTAccessCredentials.from_json(data)
token_expiry = _parse_expiry(data.get('token_expiry'))
google_credentials = cls(
@@ -1468,8 +1467,7 @@ def save_to_well_known_file(credentials, well_known_file=None):
def _get_environment_variable_file():
application_default_credential_filename = (
os.environ.get(GOOGLE_APPLICATION_CREDENTIALS,
None))
os.environ.get(GOOGLE_APPLICATION_CREDENTIALS, None))
if application_default_credential_filename:
if os.path.isfile(application_default_credential_filename):
@@ -1552,8 +1550,8 @@ def _raise_exception_for_reading_json(credential_file,
extra_help,
error):
raise ApplicationDefaultCredentialsError(
'An error was encountered while reading json file: ' +
credential_file + extra_help + ': ' + str(error))
'An error was encountered while reading json file: ' +
credential_file + extra_help + ': ' + str(error))
def _get_application_default_credential_GAE():
@@ -2213,7 +2211,8 @@ def flow_from_clientsecrets(filename, scope, redirect_uri=None,
except clientsecrets.InvalidClientSecretsError as e:
if message is not None:
if e.args:
message = 'The client secrets were invalid: \n{0}\n{1}'.format(e, message)
message = ('The client secrets were invalid: '
'\n{0}\n{1}'.format(e, message))
sys.exit(message)
else:
raise

View File

@@ -19,8 +19,8 @@ an OAuth 2.0 protected service.
"""
import json
import six
import six
__author__ = 'jcgregorio@google.com (Joe Gregorio)'

View File

@@ -13,9 +13,8 @@
# limitations under the License.
import errno
import time
import fcntl
import time
from oauth2client.contrib.locked_file import _Opener
from oauth2client.contrib.locked_file import AlreadyLockedException

View File

@@ -18,15 +18,15 @@ See https://cloud.google.com/compute/docs/metadata
"""
import datetime
import httplib2
import json
import httplib2
from six.moves import http_client
from six.moves.urllib import parse as urlparse
from oauth2client import util
from oauth2client._helpers import _from_bytes
from oauth2client.client import _UTCNOW
from oauth2client import util
METADATA_ROOT = 'http://metadata.google.internal/computeMetadata/v1/'

View File

@@ -24,19 +24,18 @@ import os
import pickle
import threading
import httplib2
import webapp2 as webapp
from google.appengine.api import app_identity
from google.appengine.api import memcache
from google.appengine.api import users
from google.appengine.ext import db
from google.appengine.ext.webapp.util import login_required
import httplib2
import webapp2 as webapp
from oauth2client import clientsecrets
from oauth2client import GOOGLE_AUTH_URI
from oauth2client import GOOGLE_REVOKE_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client import clientsecrets
from oauth2client import util
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import AssertionCredentials

View File

@@ -19,8 +19,8 @@ import json
import os
import socket
from oauth2client._helpers import _to_bytes
from oauth2client import client
from oauth2client._helpers import _to_bytes
# Expose utcnow() at module level to allow for
# easier testing (by replacing with a stub).

View File

@@ -21,13 +21,13 @@ the Django datastore.
Only Django versions 1.8+ are supported.
"""
import oauth2client
import base64
import pickle
import six
from django.db import models
from django.utils.encoding import smart_bytes, smart_text
import oauth2client
from oauth2client.client import Storage as BaseStorage
@@ -179,4 +179,4 @@ class Storage(BaseStorage):
"""Delete Credentials from the datastore."""
query = {self.key_name: self.key_value}
entities = self.model_class.objects.filter(**query).delete()
self.model_class.objects.filter(**query).delete()

View File

@@ -15,10 +15,10 @@
"""Utilities for the Django web framework
Provides Django views and helpers the make using the OAuth2 web server
flow easier. It includes an ``oauth_required`` decorator to automatically ensure
that user credentials are available, and an ``oauth_enabled`` decorator to check
if the user has authorized, and helper shortcuts to create the authorization
URL otherwise.
flow easier. It includes an ``oauth_required`` decorator to automatically
ensure that user credentials are available, and an ``oauth_enabled`` decorator
to check if the user has authorized, and helper shortcuts to create the
authorization URL otherwise.
Only Django versions 1.8+ are supported.
@@ -89,8 +89,8 @@ Add the oauth2 routes to your application's urls.py urlpatterns.
urlpatterns += [url(r'^oauth2/', include(oauth2_urls))]
To require OAuth2 credentials for a view, use the `oauth2_required` decorator.
This creates a credentials object with an id_token, and allows you to create an
`http` object to build service clients with. These are all attached to the
This creates a credentials object with an id_token, and allows you to create
an `http` object to build service clients with. These are all attached to the
request.oauth
.. code-block:: python
@@ -124,8 +124,9 @@ To make OAuth2 optional and provide an authorization link in your own views.
return HttpResponse("User email: %s"
% request.oauth.credentials.id_token['email'])
else:
return HttpResponse('Here is an OAuth Authorize link:
<a href="%s">Authorize</a>' % request.oauth.get_authorize_redirect())
return HttpResponse(
'Here is an OAuth Authorize link: <a href="%s">Authorize</a>'
% request.oauth.get_authorize_redirect())
If a view needs a scope not included in the default scopes specified in
the settings, you can use [incremental auth](https://developers.google.com/identity/sign-in/web/incremental-auth)
@@ -144,8 +145,9 @@ and specify additional scopes in the decorator arguments.
events = service.files().list().execute()['items']
return HttpResponse(str(events))
else:
return HttpResponse('Here is an OAuth Authorize link:
<a href="%s">Authorize</a>' % request.oauth.get_authorize_redirect())
return HttpResponse(
'Here is an OAuth Authorize link: <a href="%s">Authorize</a>'
% request.oauth.get_authorize_redirect())
To provide a callback on authorization being completed, use the
@@ -168,9 +170,10 @@ import django.conf
from django.core import exceptions
from django.core import urlresolvers
import httplib2
from six.moves.urllib import parse
from oauth2client import clientsecrets
from oauth2client.contrib.django_util import storage
from six.moves.urllib import parse
GOOGLE_OAUTH2_DEFAULT_SCOPES = ('email',)
GOOGLE_OAUTH2_REQUEST_ATTRIBUTE = 'oauth'
@@ -202,9 +205,9 @@ def _get_oauth2_client_id_and_secret(settings_instance):
return client_id, client_secret
else:
raise exceptions.ImproperlyConfigured(
"Must specify either GOOGLE_OAUTH2_CLIENT_SECRETS_JSON, or "
" both GOOGLE_OAUTH2_CLIENT_ID and GOOGLE_OAUTH2_CLIENT_SECRET "
"in settings.py")
"Must specify either GOOGLE_OAUTH2_CLIENT_SECRETS_JSON, or "
"both GOOGLE_OAUTH2_CLIENT_ID and "
"GOOGLE_OAUTH2_CLIENT_SECRET in settings.py")
class OAuth2Settings(object):
@@ -290,8 +293,8 @@ class UserOAuth2(object):
def has_credentials(self):
"""Returns True if there are valid credentials for the current user
and required scopes."""
return (self.credentials and not self.credentials.invalid
and self.credentials.has_scopes(self.scopes))
return (self.credentials and not self.credentials.invalid and
self.credentials.has_scopes(self.scopes))
@property
def credentials(self):

View File

@@ -13,9 +13,10 @@
# limitations under the License.
from django import shortcuts
from oauth2client.contrib import django_util
from six import wraps
from oauth2client.contrib import django_util
def oauth_required(decorated_function=None, scopes=None, **decorator_kwargs):
""" Decorator to require OAuth2 credentials for a view
@@ -36,7 +37,7 @@ def oauth_required(decorated_function=None, scopes=None, **decorator_kwargs):
developerKey=API_KEY)
events = service.events().list(
calendarId='primary').execute()['items']
return HttpResponse("email: %s , calendar: %s" % (email, str(events)))
return HttpResponse("email: %s, calendar: %s" % (email, str(events)))
:param decorated_function: View function to decorate, must have the Django
request object as the first argument

View File

@@ -13,6 +13,7 @@
# limitations under the License.
from django.conf import urls
from oauth2client.contrib.django_util import views
urlpatterns = [

View File

@@ -16,9 +16,11 @@ import hashlib
import json
import os
import pickle
from django import http
from django.core import urlresolvers
from django import shortcuts
from django.core import urlresolvers
from oauth2client import client
from oauth2client.contrib import django_util
from oauth2client.contrib.django_util import signals
@@ -87,7 +89,8 @@ def oauth2_callback(request):
try:
server_csrf = request.session[_CSRF_KEY]
except KeyError:
return http.HttpResponseBadRequest("No existing session for this flow.")
return http.HttpResponseBadRequest(
"No existing session for this flow.")
try:
state = json.loads(encoded_state)

View File

@@ -162,14 +162,11 @@ available outside of a request context, you will need to implement your own
:class:`oauth2client.Storage`.
"""
from functools import wraps
import hashlib
import json
import os
import pickle
from functools import wraps
import six.moves.http_client as httplib
import httplib2
try:
from flask import Blueprint
@@ -182,10 +179,13 @@ try:
except ImportError: # pragma: NO COVER
raise ImportError('The flask utilities require flask 0.9 or newer.')
import httplib2
import six.moves.http_client as httplib
from oauth2client import clientsecrets
from oauth2client.client import FlowExchangeError
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.contrib.dictionary_storage import DictionaryStorage
from oauth2client import clientsecrets
__author__ = 'jonwayne@google.com (Jon Wayne Parrott)'
@@ -446,8 +446,8 @@ class UserOAuth2(object):
if not self.credentials:
return False
# Is the access token expired? If so, do we have an refresh token?
elif (self.credentials.access_token_expired
and not self.credentials.refresh_token):
elif (self.credentials.access_token_expired and
not self.credentials.refresh_token):
return False
else:
return True

View File

@@ -112,7 +112,8 @@ class AppAssertionCredentials(AssertionCredentials):
"""
if self.invalid:
info = _metadata.get_service_account_info(
http_request, service_account=self.service_account_email or 'default')
http_request,
service_account=self.service_account_email or 'default')
self.invalid = False
self.service_account_email = info['email']
self.scopes = info['scopes']

View File

@@ -50,12 +50,11 @@ import logging
import os
import threading
from oauth2client import util
from oauth2client.client import Credentials
from oauth2client.client import Storage as BaseStorage
from oauth2client import util
from oauth2client.contrib.locked_file import LockedFile
__author__ = 'jbeda@google.com (Joe Beda)'
logger = logging.getLogger(__name__)

View File

@@ -90,9 +90,10 @@ We will reuse tables defined above.
from __future__ import absolute_import
import oauth2client.client
import sqlalchemy.types
import oauth2client.client
class CredentialsType(sqlalchemy.types.PickleType):
"""Type representing credentials.

View File

@@ -19,8 +19,8 @@ import binascii
import hmac
import time
from oauth2client._helpers import _to_bytes
from oauth2client import util
from oauth2client._helpers import _to_bytes
__authors__ = [
'"Doug Coker" <dcoker@google.com>',

View File

@@ -17,27 +17,24 @@
import base64
import copy
import datetime
import httplib2
import json
import time
import httplib2
from oauth2client import crypt
from oauth2client import GOOGLE_REVOKE_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client._helpers import _json_encode
from oauth2client._helpers import _from_bytes
from oauth2client._helpers import _urlsafe_b64encode
from oauth2client import util
from oauth2client._helpers import _from_bytes
from oauth2client.client import _apply_user_agent
from oauth2client.client import _initialize_headers
from oauth2client.client import _UTCNOW
from oauth2client.client import AccessTokenInfo
from oauth2client.client import AssertionCredentials
from oauth2client.client import clean_headers
from oauth2client.client import EXPIRY_FORMAT
from oauth2client.client import GoogleCredentials
from oauth2client.client import SERVICE_ACCOUNT
from oauth2client.client import TokenRevokeError
from oauth2client.client import _UTCNOW
from oauth2client import crypt
_PASSWORD_DEFAULT = 'notasecret'
@@ -94,7 +91,7 @@ class ServiceAccountCredentials(AssertionCredentials):
MAX_TOKEN_LIFETIME_SECS = 3600
"""Max lifetime of the token (one hour, in seconds)."""
NON_SERIALIZED_MEMBERS = (
NON_SERIALIZED_MEMBERS = (
frozenset(['_signer']) |
AssertionCredentials.NON_SERIALIZED_MEMBERS)
"""Members that aren't serialized when object is converted to JSON."""
@@ -138,8 +135,8 @@ class ServiceAccountCredentials(AssertionCredentials):
strip: array, An array of names of members to exclude from the
JSON.
to_serialize: dict, (Optional) The properties for this object
that will be serialized. This allows callers to modify
before serializing.
that will be serialized. This allows callers to
modify before serializing.
Returns:
string, a JSON representation of this instance, suitable to pass to
@@ -502,7 +499,7 @@ class ServiceAccountCredentials(AssertionCredentials):
result._private_key_pkcs12 = self._private_key_pkcs12
result._private_key_password = self._private_key_password
return result
def create_with_claims(self, claims):
"""Create credentials that specify additional claims.
@@ -511,7 +508,8 @@ class ServiceAccountCredentials(AssertionCredentials):
Returns:
ServiceAccountCredentials, a copy of the current service account
credentials with updated claims to use when obtaining access tokens.
credentials with updated claims to use when obtaining access
tokens.
"""
new_kwargs = dict(self._kwargs)
new_kwargs.update(claims)
@@ -552,11 +550,11 @@ class ServiceAccountCredentials(AssertionCredentials):
def _datetime_to_secs(utc_time):
# TODO(issue 298): use time_delta.total_seconds()
# time_delta.total_seconds() not supported in Python 2.6
epoch = datetime.datetime(1970, 1, 1)
time_delta = utc_time - epoch
return time_delta.days * 86400 + time_delta.seconds
# TODO(issue 298): use time_delta.total_seconds()
# time_delta.total_seconds() not supported in Python 2.6
epoch = datetime.datetime(1970, 1, 1)
time_delta = utc_time - epoch
return time_delta.days * 86400 + time_delta.seconds
class _JWTAccessCredentials(ServiceAccountCredentials):
@@ -607,7 +605,8 @@ class _JWTAccessCredentials(ServiceAccountCredentials):
h = credentials.authorize(h)
"""
request_orig = http.request
request_auth = super(_JWTAccessCredentials, self).authorize(http).request
request_auth = super(
_JWTAccessCredentials, self).authorize(http).request
# The closure that will replace 'httplib2.Http.request'.
def new_request(uri, method='GET', body=None, headers=None,
@@ -695,7 +694,8 @@ class _JWTAccessCredentials(ServiceAccountCredentials):
def _create_token(self, additional_claims=None):
now = _UTCNOW()
expiry = now + datetime.timedelta(seconds=self._MAX_TOKEN_LIFETIME_SECS)
lifetime = datetime.timedelta(seconds=self._MAX_TOKEN_LIFETIME_SECS)
expiry = now + lifetime
payload = {
'iat': _datetime_to_secs(now),
'exp': _datetime_to_secs(expiry),

View File

@@ -27,8 +27,8 @@ import sys
from six.moves import BaseHTTPServer
from six.moves import http_client
from six.moves import urllib
from six.moves import input
from six.moves import urllib
from oauth2client import client
from oauth2client import util
@@ -48,6 +48,32 @@ with information from the APIs Console <https://code.google.com/apis/console>.
"""
_FAILED_START_MESSAGE = """
Failed to start a local webserver listening on either port 8080
or port 8090. Please check your firewall settings and locally
running programs that may be blocking or using those ports.
Falling back to --noauth_local_webserver and continuing with
authorization.
"""
_BROWSER_OPENED_MESSAGE = """
Your browser has been opened to visit:
%s
If your browser is on a different machine then exit and re-run this
application with the command-line parameter
--noauth_local_webserver
"""
_GO_TO_LINK_MESSAGE = """
Go to the following link in your browser:
%s
"""
def _CreateArgumentParser():
try:
@@ -182,14 +208,7 @@ def run_flow(flow, storage, flags=None, http=None):
break
flags.noauth_local_webserver = not success
if not success:
print('Failed to start a local webserver listening '
'on either port 8080')
print('or port 8090. Please check your firewall settings and locally')
print('running programs that may be blocking or using those ports.')
print()
print('Falling back to --noauth_local_webserver and continuing with')
print('authorization.')
print()
print(_FAILED_START_MESSAGE)
if not flags.noauth_local_webserver:
oauth_callback = 'http://%s:%s/' % (flags.auth_host_name, port_number)
@@ -201,21 +220,9 @@ def run_flow(flow, storage, flags=None, http=None):
if not flags.noauth_local_webserver:
import webbrowser
webbrowser.open(authorize_url, new=1, autoraise=True)
print('Your browser has been opened to visit:')
print()
print(' ' + authorize_url)
print()
print('If your browser is on a different machine then '
'exit and re-run this')
print('application with the command-line parameter ')
print()
print(' --noauth_local_webserver')
print()
print(_BROWSER_OPENED_MESSAGE % authorize_url)
else:
print('Go to the following link in your browser:')
print()
print(' ' + authorize_url)
print()
print(_GO_TO_LINK_MESSAGE % authorize_url)
code = None
if not flags.noauth_local_webserver:

View File

@@ -5,6 +5,7 @@
# See: https://developers.google.com/compute/docs/authentication
from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials

View File

@@ -1,8 +1,9 @@
# To be used to test GoogleCredentials.get_application_default()
# from devel GAE (ie, dev_appserver.py).
import webapp2
from googleapiclient.discovery import build
import webapp2
from oauth2client.client import GoogleCredentials
@@ -23,4 +24,4 @@ class MainPage(webapp2.RequestHandler):
self.response.write(get_instances())
app = webapp2.WSGIApplication([('/', MainPage),], debug=True)
app = webapp2.WSGIApplication([('/', MainPage), ], debug=True)

View File

@@ -2,10 +2,11 @@
# See: https://developers.google.com/accounts/docs/OAuth2ForDevices
from googleapiclient.discovery import build
import httplib2
from six.moves import input
from oauth2client.client import OAuth2WebServerFlow
from googleapiclient.discovery import build
CLIENT_ID = "some+client+id"
CLIENT_SECRET = "some+client+secret"

View File

@@ -13,11 +13,11 @@
# limitations under the License.
import json
import unittest2
import httplib2
from six.moves import http_client
from six.moves import urllib
import unittest2
from oauth2client import GOOGLE_TOKEN_INFO_URI
from oauth2client.client import GoogleCredentials

View File

@@ -17,6 +17,7 @@ import os
import httplib2
from six.moves import http_client
from oauth2client import client
from oauth2client.service_account import ServiceAccountCredentials
@@ -36,8 +37,8 @@ USER_INFO = 'https://www.googleapis.com/oauth2/v2/userinfo'
def _require_environ():
if (JSON_KEY_PATH is None or P12_KEY_PATH is None or
P12_KEY_EMAIL is None or USER_KEY_PATH is None or
USER_KEY_EMAIL is None):
P12_KEY_EMAIL is None or USER_KEY_PATH is None or
USER_KEY_EMAIL is None):
raise EnvironmentError('Expected environment variables to be set:',
'OAUTH2CLIENT_TEST_JSON_KEY_PATH',
'OAUTH2CLIENT_TEST_P12_KEY_PATH',

View File

@@ -21,6 +21,11 @@ from __future__ import print_function
import sys
from setuptools import find_packages
from setuptools import setup
import oauth2client
if sys.version_info < (2, 6):
print('oauth2client requires python2 version >= 2.6.', file=sys.stderr)
sys.exit(1)
@@ -28,9 +33,6 @@ if (3, 1) <= sys.version_info < (3, 3):
print('oauth2client requires python3 version >= 3.3.', file=sys.stderr)
sys.exit(1)
from setuptools import find_packages
from setuptools import setup
install_requires = [
'httplib2>=0.9.1',
'pyasn1>=0.1.7',
@@ -41,7 +43,6 @@ install_requires = [
long_desc = """The oauth2client is a client library for OAuth 2.0."""
import oauth2client
version = oauth2client.__version__
setup(

View File

@@ -13,21 +13,15 @@
# limitations under the License.
import datetime
import httplib2
import json
import os
import tempfile
import time
import unittest2
from six.moves import urllib
import dev_appserver
dev_appserver.fix_sys_path()
import mock
import webapp2
from ..http_mock import CacheMock
dev_appserver.fix_sys_path()
from google.appengine.api import apiproxy_stub
from google.appengine.api import apiproxy_stub_map
from google.appengine.api import app_identity
@@ -37,12 +31,25 @@ from google.appengine.api.memcache import memcache_stub
from google.appengine.ext import db
from google.appengine.ext import ndb
from google.appengine.ext import testbed
from oauth2client.contrib import appengine
from oauth2client import GOOGLE_TOKEN_URI
import httplib2
import mock
from six.moves import urllib
import unittest2
import webapp2
from webtest import TestApp
from oauth2client import GOOGLE_REVOKE_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client.client import _CLOUDSDK_CONFIG_ENV_VAR
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import Credentials
from oauth2client.client import flow_from_clientsecrets
from oauth2client.client import OAuth2Credentials
from oauth2client.client import save_to_well_known_file
from oauth2client.clientsecrets import _loadfile
from oauth2client.clientsecrets import TYPE_WEB
from oauth2client.clientsecrets import InvalidClientSecretsError
from oauth2client.clientsecrets import TYPE_WEB
from oauth2client.contrib import appengine
from oauth2client.contrib.appengine import AppAssertionCredentials
from oauth2client.contrib.appengine import CredentialsModel
from oauth2client.contrib.appengine import CredentialsNDBModel
@@ -51,17 +58,10 @@ from oauth2client.contrib.appengine import FlowProperty
from oauth2client.contrib.appengine import (
InvalidClientSecretsError as AppEngineInvalidClientSecretsError)
from oauth2client.contrib.appengine import OAuth2Decorator
from oauth2client.contrib.appengine import OAuth2DecoratorFromClientSecrets
from oauth2client.contrib.appengine import oauth2decorator_from_clientsecrets
from oauth2client.contrib.appengine import OAuth2DecoratorFromClientSecrets
from oauth2client.contrib.appengine import StorageByKeyName
from oauth2client.client import _CLOUDSDK_CONFIG_ENV_VAR
from oauth2client.client import AccessTokenRefreshError
from oauth2client.client import Credentials
from oauth2client.client import OAuth2Credentials
from oauth2client.client import flow_from_clientsecrets
from oauth2client.client import save_to_well_known_file
from webtest import TestApp
from ..http_mock import CacheMock
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -847,7 +847,7 @@ class DecoratorTests(unittest2.TestCase):
# An initial request to an oauth_aware decorated path should
# not redirect.
response = self.app.get('/bar_path/2012/01')
url = self.decorator.authorize_url()
self.decorator.authorize_url()
response = self.app.get('/oauth2callback', {
'error': 'Bad<Stuff>Happened\''
})
@@ -903,9 +903,7 @@ class DecoratorTests(unittest2.TestCase):
with decorator_patch as decorator_mock:
filename = datafile('client_secrets.json')
decorator = oauth2decorator_from_clientsecrets(
filename,
scope='foo_scope')
oauth2decorator_from_clientsecrets(filename, scope='foo_scope')
decorator_mock.assert_called_once_with(
filename,
'foo_scope',
@@ -974,7 +972,7 @@ class DecoratorTests(unittest2.TestCase):
def test_decorator_from_unfilled_client_secrets_required(self):
MESSAGE = 'File is missing'
try:
decorator = OAuth2DecoratorFromClientSecrets(
OAuth2DecoratorFromClientSecrets(
datafile('unfilled_client_secrets.json'),
scope=['foo_scope', 'bar_scope'], message=MESSAGE)
except InvalidClientSecretsError:
@@ -983,7 +981,7 @@ class DecoratorTests(unittest2.TestCase):
def test_decorator_from_unfilled_client_secrets_aware(self):
MESSAGE = 'File is missing'
try:
decorator = OAuth2DecoratorFromClientSecrets(
OAuth2DecoratorFromClientSecrets(
datafile('unfilled_client_secrets.json'),
scope=['foo_scope', 'bar_scope'], message=MESSAGE)
except InvalidClientSecretsError:

View File

@@ -19,17 +19,17 @@ import json
import os
import socket
import threading
import unittest2
import mock
import unittest2
from oauth2client.contrib import devshell
from oauth2client._helpers import _from_bytes
from oauth2client._helpers import _to_bytes
from oauth2client.client import save_to_well_known_file
from oauth2client.contrib import devshell
from oauth2client.contrib.devshell import _SendRecv
from oauth2client.contrib.devshell import CREDENTIAL_INFO_REQUEST_JSON
from oauth2client.contrib.devshell import CommunicationError
from oauth2client.contrib.devshell import CREDENTIAL_INFO_REQUEST_JSON
from oauth2client.contrib.devshell import CredentialInfoResponse
from oauth2client.contrib.devshell import DEVSHELL_ENV
from oauth2client.contrib.devshell import DevshellCredentials

View File

@@ -19,14 +19,10 @@ Unit tests for objects created from discovery documents.
import base64
import datetime
import imp
import os
import pickle
import sys
import unittest2
# Mock a Django environment
from django.conf import global_settings
# Mock a Django environment
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.contrib.test_django_settings'
from django.conf import settings
@@ -38,8 +34,6 @@ import django
django.setup()
from django.apps import AppConfig
import mock
class DjangoOrmTestApp(AppConfig):
"""App Config for Django Helper."""
@@ -48,6 +42,10 @@ class DjangoOrmTestApp(AppConfig):
from django.db import models
import mock
import unittest2
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client._helpers import _from_bytes
from oauth2client.client import Credentials
from oauth2client.client import Flow
@@ -55,7 +53,6 @@ from oauth2client.client import OAuth2Credentials
from oauth2client.contrib.django_orm import CredentialsField
from oauth2client.contrib.django_orm import FlowField
from oauth2client.contrib.django_orm import Storage
from oauth2client import GOOGLE_TOKEN_URI
__author__ = 'conleyo@google.com (Conley Owens)'

View File

@@ -13,22 +13,23 @@
# limitations under the License.
import json
import unittest2
from django.conf.urls import include, url
from django.core import exceptions
from django import http
from django import test
import mock
from oauth2client.client import FlowExchangeError, OAuth2WebServerFlow
import django.conf
from django.conf.urls import include, url
from django.core import exceptions
import mock
from six.moves import http_client
from six.moves.urllib import parse
import unittest2
from oauth2client.client import FlowExchangeError, OAuth2WebServerFlow
from oauth2client.contrib import django_util
from oauth2client.contrib.django_util import decorators
from oauth2client.contrib.django_util import site
from oauth2client.contrib.django_util import storage
from oauth2client.contrib.django_util import views
from six.moves import http_client
from six.moves.urllib import parse
urlpatterns = [
url(r'^oauth2/', include(site.urls))
@@ -242,9 +243,8 @@ class Oauth2AuthorizeTest(TestWithSession):
self.assertTrue(isinstance(response, http.HttpResponseRedirect))
def test_authorize_works_explicit_return_url(self):
request = self.factory.get('oauth2/oauth2authorize', data={
'return_url': '/return_endpoint'
})
request = self.factory.get('oauth2/oauth2authorize',
data={'return_url': '/return_endpoint'})
request.session = self.session
response = views.oauth2_authorize(request)
self.assertTrue(isinstance(response, http.HttpResponseRedirect))

View File

@@ -15,21 +15,21 @@
"""Unit tests for the Flask utilities"""
import datetime
import httplib2
import json
import unittest2
import flask
import six.moves.http_client as httplib
import httplib2
import mock
import six.moves.http_client as httplib
import six.moves.urllib.parse as urlparse
import unittest2
from oauth2client import clientsecrets
from oauth2client import GOOGLE_AUTH_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client import clientsecrets
from oauth2client.client import OAuth2Credentials
from oauth2client.contrib.flask_util import _get_flow_for_token
from oauth2client.contrib.flask_util import UserOAuth2 as FlaskOAuth2
from oauth2client.client import OAuth2Credentials
__author__ = 'jonwayne@google.com (Jon Wayne Parrott)'
@@ -474,7 +474,8 @@ class FlaskOAuth2Tests(unittest2.TestCase):
# Starting the authorization flow should include the
# include_granted_scopes parameter as well as the scopes.
response = client.get(response.headers['Location'][17:])
q = urlparse.parse_qs(response.headers['Location'].split('?', 1)[1])
q = urlparse.parse_qs(
response.headers['Location'].split('?', 1)[1])
self.assertIn('include_granted_scopes', q)
self.assertEqual(
set(q['scope'][0].split(' ')),

View File

@@ -15,18 +15,18 @@
"""Unit tests for oauth2client.contrib.gce."""
import datetime
import httplib2
import json
import httplib2
import mock
from six.moves import http_client
from tests.contrib.test_metadata import request_mock
import unittest2
from oauth2client.client import save_to_well_known_file
from oauth2client.client import HttpAccessTokenRefreshError
from oauth2client.client import save_to_well_known_file
from oauth2client.contrib.gce import _SCOPES_WARNING
from oauth2client.contrib.gce import AppAssertionCredentials
from tests.contrib.test_metadata import request_mock
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -36,6 +36,7 @@ SERVICE_ACCOUNT_INFO = {
'aliases': ['default']
}
class AppAssertionCredentialsTests(unittest2.TestCase):
def test_constructor(self):
@@ -78,11 +79,13 @@ class AppAssertionCredentialsTests(unittest2.TestCase):
credentials.get_access_token(http=http_mock)
self.assertEqual(credentials.access_token, 'A')
self.assertTrue(credentials.access_token_expired)
get_token.assert_called_with(http_request, service_account='a@example.com')
get_token.assert_called_with(http_request,
service_account='a@example.com')
credentials.get_access_token(http=http_mock)
self.assertEqual(credentials.access_token, 'B')
self.assertFalse(credentials.access_token_expired)
get_token.assert_called_with(http_request, service_account='a@example.com')
get_token.assert_called_with(http_request,
service_account='a@example.com')
get_info.assert_not_called()
def test_refresh_token_failed_fetch(self):
@@ -124,7 +127,8 @@ class AppAssertionCredentialsTests(unittest2.TestCase):
self.assertFalse(credentials.invalid)
credentials.retrieve_scopes(http_mock)
# Assert scopes weren't refetched
metadata.assert_called_once_with(http_request, service_account='default')
metadata.assert_called_once_with(http_request,
service_account='default')
@mock.patch('oauth2client.contrib._metadata.get_service_account_info',
side_effect=httplib2.HttpLib2Error('No Such Email'))
@@ -135,7 +139,8 @@ class AppAssertionCredentialsTests(unittest2.TestCase):
with self.assertRaises(httplib2.HttpLib2Error):
credentials.retrieve_scopes(http_mock)
metadata.assert_called_once_with(http_request, service_account='b@example.com')
metadata.assert_called_once_with(http_request,
service_account='b@example.com')
def test_save_to_well_known_file(self):
import os

View File

@@ -15,11 +15,11 @@
"""Tests for oauth2client.contrib.keyring_storage."""
import datetime
import keyring
import threading
import unittest2
import keyring
import mock
import unittest2
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client.client import OAuth2Credentials

View File

@@ -13,12 +13,12 @@
# limitations under the License.
import datetime
import httplib2
import json
import mock
import unittest2
import httplib2
import mock
from six.moves import http_client
import unittest2
from oauth2client.contrib import _metadata
@@ -81,7 +81,7 @@ class TestMetadata(unittest2.TestCase):
self.assertEqual(
expiry, datetime.datetime.min + datetime.timedelta(seconds=100))
http_request.assert_called_once_with(
EXPECTED_URL+'/token',
EXPECTED_URL + '/token',
**EXPECTED_KWARGS
)
now.assert_called_once_with()
@@ -92,6 +92,6 @@ class TestMetadata(unittest2.TestCase):
info = _metadata.get_service_account_info(http_request)
self.assertEqual(info, DATA)
http_request.assert_called_once_with(
EXPECTED_URL+'/?recursive=True',
EXPECTED_URL + '/?recursive=True',
**EXPECTED_KWARGS
)

View File

@@ -19,9 +19,9 @@ import errno
import os
import stat
import tempfile
import unittest2
import mock
import unittest2
from oauth2client import util
from oauth2client.client import OAuth2Credentials

View File

@@ -14,14 +14,15 @@
import datetime
import oauth2client
import oauth2client.client
import oauth2client.contrib.sqlalchemy
import sqlalchemy
import sqlalchemy.ext.declarative
import sqlalchemy.orm
import unittest2
import oauth2client
import oauth2client.client
import oauth2client.contrib.sqlalchemy
Base = sqlalchemy.ext.declarative.declarative_base()

View File

@@ -15,9 +15,9 @@
"""Tests for oauth2client.contrib.xsrfutil."""
import base64
import unittest2
import mock
import unittest2
from oauth2client._helpers import _to_bytes
from oauth2client.contrib import xsrfutil
@@ -49,7 +49,6 @@ class Test_generate_token(unittest2.TestCase):
def test_it(self):
digest = b'foobar'
curr_time = 1440449755.74
digester = mock.MagicMock()
digester.digest = mock.MagicMock(name='digest', return_value=digest)
with mock.patch('oauth2client.contrib.xsrfutil.hmac') as hmac:

View File

@@ -22,8 +22,8 @@ import rsa
import six
import unittest2
from oauth2client._helpers import _from_bytes
from oauth2client import _pure_python_crypt
from oauth2client._helpers import _from_bytes
from oauth2client.crypt import RsaSigner
from oauth2client.crypt import RsaVerifier
@@ -33,7 +33,7 @@ class TestRsaVerifier(unittest2.TestCase):
PUBLIC_KEY_FILENAME = os.path.join(os.path.dirname(__file__),
'data', 'privatekey.pub')
PUBLIC_CERT_FILENAME = os.path.join(os.path.dirname(__file__),
'data', 'public_cert.pem')
'data', 'public_cert.pem')
PRIVATE_KEY_FILENAME = os.path.join(os.path.dirname(__file__),
'data', 'privatekey.pem')

View File

@@ -14,6 +14,7 @@
"""Unit tests for oauth2client._pycrypto_crypt."""
import os
import unittest2
from oauth2client.crypt import PyCryptoSigner

View File

@@ -34,38 +34,12 @@ from six.moves import http_client
from six.moves import urllib
import unittest2
from .http_mock import CacheMock
from .http_mock import HttpMock
from .http_mock import HttpMockSequence
from oauth2client import GOOGLE_REVOKE_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client import GOOGLE_TOKEN_INFO_URI
from oauth2client import client
from oauth2client import GOOGLE_REVOKE_URI
from oauth2client import GOOGLE_TOKEN_INFO_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client import util as oauth2client_util
from oauth2client.client import AccessTokenCredentials
from oauth2client.client import AccessTokenCredentialsError
from oauth2client.client import HttpAccessTokenRefreshError
from oauth2client.client import ADC_HELP_MSG
from oauth2client.client import AssertionCredentials
from oauth2client.client import AUTHORIZED_USER
from oauth2client.client import Credentials
from oauth2client.client import DEFAULT_ENV_NAME
from oauth2client.client import DeviceFlowInfo
from oauth2client.client import Error
from oauth2client.client import ApplicationDefaultCredentialsError
from oauth2client.client import FlowExchangeError
from oauth2client.client import GoogleCredentials
from oauth2client.client import GOOGLE_APPLICATION_CREDENTIALS
from oauth2client.client import MemoryCache
from oauth2client.client import NonAsciiHeaderError
from oauth2client.client import OAuth2Credentials
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.client import OOB_CALLBACK_URN
from oauth2client.client import REFRESH_STATUS_CODES
from oauth2client.client import SERVICE_ACCOUNT
from oauth2client.client import Storage
from oauth2client.client import TokenRevokeError
from oauth2client.client import VerifyJwtTokenError
from oauth2client._helpers import _to_bytes
from oauth2client.client import _extract_id_token
from oauth2client.client import _get_application_default_credential_from_file
from oauth2client.client import _get_environment_variable_file
@@ -76,15 +50,41 @@ from oauth2client.client import _raise_exception_for_missing_fields
from oauth2client.client import _raise_exception_for_reading_json
from oauth2client.client import _update_query_params
from oauth2client.client import _WELL_KNOWN_CREDENTIALS_FILE
from oauth2client.client import AccessTokenCredentials
from oauth2client.client import AccessTokenCredentialsError
from oauth2client.client import ADC_HELP_MSG
from oauth2client.client import ApplicationDefaultCredentialsError
from oauth2client.client import AssertionCredentials
from oauth2client.client import AUTHORIZED_USER
from oauth2client.client import Credentials
from oauth2client.client import credentials_from_clientsecrets_and_code
from oauth2client.client import credentials_from_code
from oauth2client.client import DEFAULT_ENV_NAME
from oauth2client.client import DeviceFlowInfo
from oauth2client.client import Error
from oauth2client.client import flow_from_clientsecrets
from oauth2client.client import FlowExchangeError
from oauth2client.client import GOOGLE_APPLICATION_CREDENTIALS
from oauth2client.client import GoogleCredentials
from oauth2client.client import HttpAccessTokenRefreshError
from oauth2client.client import MemoryCache
from oauth2client.client import NonAsciiHeaderError
from oauth2client.client import OAuth2Credentials
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.client import OOB_CALLBACK_URN
from oauth2client.client import REFRESH_STATUS_CODES
from oauth2client.client import save_to_well_known_file
from oauth2client.client import SERVICE_ACCOUNT
from oauth2client.client import Storage
from oauth2client.client import TokenRevokeError
from oauth2client.client import VerifyJwtTokenError
from oauth2client.clientsecrets import _loadfile
from oauth2client.clientsecrets import InvalidClientSecretsError
from oauth2client.clientsecrets import TYPE_WEB
from oauth2client.service_account import ServiceAccountCredentials
from oauth2client._helpers import _to_bytes
from .http_mock import CacheMock
from .http_mock import HttpMock
from .http_mock import HttpMockSequence
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -124,7 +124,7 @@ class CredentialsTests(unittest2.TestCase):
def test_to_from_json(self):
credentials = Credentials()
json = credentials.to_json()
restored = Credentials.new_from_json(json)
Credentials.new_from_json(json)
def test_authorize_abstract(self):
credentials = Credentials()
@@ -457,7 +457,7 @@ class GoogleCredentialsTests(unittest2.TestCase):
client._METADATA_FLAVOR_HEADER)
else:
self.assertEqual(
http_client_module.HTTPConnection.mock_calls, [])
http_client_module.HTTPConnection.mock_calls, [])
self.assertEqual(connection.getresponse.mock_calls, [])
# Remaining calls are not "getresponse"
self.assertEqual(connection.method_calls, [])
@@ -1863,8 +1863,7 @@ class OAuth2WebServerFlowTest(unittest2.TestCase):
])
with self.assertRaises(FlowExchangeError):
credentials = self.flow.step2_exchange(code='some random code',
http=http)
self.flow.step2_exchange(code='some random code', http=http)
def test_urlencoded_exchange_failure(self):
http = HttpMockSequence([
@@ -1873,8 +1872,7 @@ class OAuth2WebServerFlowTest(unittest2.TestCase):
with self.assertRaisesRegexp(FlowExchangeError,
'invalid_request'):
credentials = self.flow.step2_exchange(code='some random code',
http=http)
self.flow.step2_exchange(code='some random code', http=http)
def test_exchange_failure_with_json_error(self):
# Some providers have 'error' attribute as a JSON object
@@ -1890,8 +1888,7 @@ class OAuth2WebServerFlowTest(unittest2.TestCase):
http = HttpMockSequence([({'status': '400'}, payload)])
with self.assertRaises(FlowExchangeError):
credentials = self.flow.step2_exchange(code='some random code',
http=http)
self.flow.step2_exchange(code='some random code', http=http)
def _exchange_success_test_helper(self, code=None, device_flow_info=None):
payload = (b'{'
@@ -2040,9 +2037,8 @@ class OAuth2WebServerFlowTest(unittest2.TestCase):
http = HttpMockSequence([({'status': '200'}, payload)])
code = {'error': 'thou shall not pass'}
with self.assertRaisesRegexp(FlowExchangeError,
'shall not pass'):
credentials = self.flow.step2_exchange(code=code, http=http)
with self.assertRaisesRegexp(FlowExchangeError, 'shall not pass'):
self.flow.step2_exchange(code=code, http=http)
def test_exchange_id_token_fail(self):
payload = (b'{'
@@ -2153,7 +2149,8 @@ class FlowFromCachedClientsecrets(unittest2.TestCase):
filename = object()
cache = object()
message = 'hi mom'
expected = 'The client secrets were invalid: \n{0}\n{1}'.format('foobar', 'hi mom')
expected = ('The client secrets were invalid: '
'\n{0}\n{1}'.format('foobar', 'hi mom'))
flow_from_clientsecrets(filename, None, cache=cache, message=message)
sys_exit.assert_called_once_with(expected)
@@ -2190,9 +2187,8 @@ class CredentialsFromCodeTests(unittest2.TestCase):
({'status': '200'}, payload.encode('utf-8')),
])
credentials = credentials_from_code(self.client_id, self.client_secret,
self.scope, self.code,
redirect_uri=self.redirect_uri,
http=http)
self.scope, self.code, http=http,
redirect_uri=self.redirect_uri)
self.assertEqual(credentials.access_token, token)
self.assertNotEqual(None, credentials.token_expiry)
self.assertEqual(set(['foo']), credentials.scopes)
@@ -2203,11 +2199,9 @@ class CredentialsFromCodeTests(unittest2.TestCase):
])
with self.assertRaises(FlowExchangeError):
credentials = credentials_from_code(self.client_id,
self.client_secret,
self.scope, self.code,
redirect_uri=self.redirect_uri,
http=http)
credentials_from_code(self.client_id, self.client_secret,
self.scope, self.code, http=http,
redirect_uri=self.redirect_uri)
def test_exchange_code_and_file_for_token(self):
payload = (b'{'
@@ -2241,7 +2235,7 @@ class CredentialsFromCodeTests(unittest2.TestCase):
])
with self.assertRaises(FlowExchangeError):
credentials = credentials_from_clientsecrets_and_code(
credentials_from_clientsecrets_and_code(
datafile('client_secrets.json'), self.scope,
self.code, http=http)

View File

@@ -18,13 +18,14 @@ import errno
from io import StringIO
import os
import tempfile
import unittest2
from oauth2client._helpers import _from_bytes
from oauth2client import clientsecrets
from oauth2client import GOOGLE_AUTH_URI
from oauth2client import GOOGLE_REVOKE_URI
from oauth2client import GOOGLE_TOKEN_URI
from oauth2client import clientsecrets
from oauth2client._helpers import _from_bytes
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -121,11 +122,11 @@ class Test__validate_clientsecrets(unittest2.TestCase):
def test_success_type_web(self):
client_info = {
'client_id': 'eye-dee',
'client_secret': 'seekrit',
'redirect_uris': None,
'auth_uri': None,
'token_uri': None,
'client_id': 'eye-dee',
'client_secret': 'seekrit',
'redirect_uris': None,
'auth_uri': None,
'token_uri': None,
}
clientsecrets_dict = {
clientsecrets.TYPE_WEB: client_info,
@@ -135,11 +136,11 @@ class Test__validate_clientsecrets(unittest2.TestCase):
def test_success_type_installed(self):
client_info = {
'client_id': 'eye-dee',
'client_secret': 'seekrit',
'redirect_uris': None,
'auth_uri': None,
'token_uri': None,
'client_id': 'eye-dee',
'client_secret': 'seekrit',
'redirect_uris': None,
'auth_uri': None,
'token_uri': None,
}
clientsecrets_dict = {
clientsecrets.TYPE_INSTALLED: client_info,

View File

@@ -14,13 +14,13 @@
import base64
import os
import unittest2
import mock
import unittest2
from oauth2client import _helpers
from oauth2client.client import HAS_OPENSSL
from oauth2client import crypt
from oauth2client.client import HAS_OPENSSL
from oauth2client.service_account import ServiceAccountCredentials
@@ -48,7 +48,7 @@ class Test_pkcs12_key_as_pem(unittest2.TestCase):
'some_account@example.com',
filename,
scopes='read+write')
credentials._kwargs['sub'] ='joe@example.org'
credentials._kwargs['sub'] = 'joe@example.org'
return credentials
def _succeeds_helper(self, password=None):
@@ -171,6 +171,7 @@ class Test__check_audience(unittest2.TestCase):
with self.assertRaises(crypt.AppIdentityError):
crypt._check_audience(payload_dict, audience2)
class Test__verify_time_range(unittest2.TestCase):
def _exception_helper(self, payload_dict):

View File

@@ -24,15 +24,16 @@ import os
import pickle
import stat
import tempfile
import unittest2
from .http_mock import HttpMockSequence
import six
from six.moves import http_client
import unittest2
from oauth2client import file
from oauth2client.client import AccessTokenCredentials
from oauth2client.client import OAuth2Credentials
from six.moves import http_client
from .http_mock import HttpMockSequence
try:
# Python2
from future_builtins import oct

View File

@@ -21,16 +21,16 @@ import time
import mock
import unittest2
from .http_mock import HttpMockSequence
from oauth2client.client import Credentials
from oauth2client.client import VerifyJwtTokenError
from oauth2client.client import verify_id_token
from oauth2client.client import HAS_OPENSSL
from oauth2client.client import HAS_CRYPTO
from oauth2client import crypt
from oauth2client.client import Credentials
from oauth2client.client import HAS_CRYPTO
from oauth2client.client import HAS_OPENSSL
from oauth2client.client import verify_id_token
from oauth2client.client import VerifyJwtTokenError
from oauth2client.file import Storage
from oauth2client.service_account import _PASSWORD_DEFAULT
from oauth2client.service_account import ServiceAccountCredentials
from .http_mock import HttpMockSequence
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -147,15 +147,14 @@ class CryptTests(unittest2.TestCase):
def test_verify_id_token_with_certs_uri_fails(self):
jwt = self._create_signed_jwt()
test_email = 'some_audience_address@testing.gserviceaccount.com'
http = HttpMockSequence([
({'status': '404'}, datafile('certs.json')),
])
with self.assertRaises(VerifyJwtTokenError):
verify_id_token(jwt,
'some_audience_address@testing.gserviceaccount.com',
http=http)
verify_id_token(jwt, test_email, http=http)
def test_verify_id_token_bad_tokens(self):
private_key = datafile('privatekey.' + self.format_)

View File

@@ -20,20 +20,19 @@ Unit tests for service account credentials implemented using RSA.
import datetime
import json
import os
import rsa
import tempfile
import httplib2
import mock
import rsa
from six import BytesIO
import unittest2
from .http_mock import HttpMockSequence
from oauth2client import crypt
from oauth2client.service_account import _JWTAccessCredentials
from oauth2client.service_account import ServiceAccountCredentials
from oauth2client.service_account import SERVICE_ACCOUNT
from six import BytesIO
from oauth2client.service_account import ServiceAccountCredentials
from .http_mock import HttpMockSequence
def data_filename(filename):
@@ -114,7 +113,7 @@ class ServiceAccountCredentialsTests(unittest2.TestCase):
return_value=object())
def test_from_json_keyfile_name_factory(self, signer_factory):
client_id = 'id123'
client_email= 'foo@bar.com'
client_email = 'foo@bar.com'
private_key_id = 'pkid456'
private_key = 's3kr3tz'
payload = {
@@ -179,12 +178,14 @@ class ServiceAccountCredentialsTests(unittest2.TestCase):
for creds in (creds_from_filename, creds_from_file_contents):
self.assertIsInstance(creds, ServiceAccountCredentials)
self.assertIsNone(creds.client_id)
self.assertEqual(creds._service_account_email, service_account_email)
self.assertEqual(creds._service_account_email,
service_account_email)
self.assertIsNone(creds._private_key_id)
self.assertIsNone(creds._private_key_pkcs8_pem)
self.assertEqual(creds._private_key_pkcs12, key_contents)
if private_key_password is not None:
self.assertEqual(creds._private_key_password, private_key_password)
self.assertEqual(creds._private_key_password,
private_key_password)
self.assertEqual(creds._scopes, ' '.join(scopes))
self.assertEqual(creds.token_uri, token_uri)
self.assertEqual(creds.revoke_uri, revoke_uri)
@@ -435,13 +436,13 @@ class JWTAccessCredentialsTests(unittest2.TestCase):
utcnow.return_value = T1_DATE
time.return_value = T1
token_info = self.jwt.get_access_token(additional_claims=
{'aud': 'https://test2.url.com',
'sub': 'dummy2@google.com'
})
token_info = self.jwt.get_access_token(
additional_claims={'aud': 'https://test2.url.com',
'sub': 'dummy2@google.com'
})
payload = crypt.verify_signed_jwt_with_certs(
token_info.access_token,
{'key' : datafile('public_cert.pem')},
{'key': datafile('public_cert.pem')},
audience='https://test2.url.com')
expires_in = token_info.expires_in
self.assertEqual(payload['iss'], self.service_account_email)
@@ -449,13 +450,13 @@ class JWTAccessCredentialsTests(unittest2.TestCase):
self.assertEqual(payload['iat'], T1)
self.assertEqual(payload['exp'], T1_EXPIRY)
self.assertEqual(expires_in, T1_EXPIRY - T1)
def test_revoke(self):
self.jwt.revoke(None)
def test_create_scoped_required(self):
self.assertTrue(self.jwt.create_scoped_required())
def test_create_scoped(self):
self.jwt._private_key_pkcs12 = ''
self.jwt._private_key_password = ''
@@ -464,7 +465,7 @@ class JWTAccessCredentialsTests(unittest2.TestCase):
self.assertNotEqual(self.jwt, new_credentials)
self.assertIsInstance(new_credentials, ServiceAccountCredentials)
self.assertEqual('dummy_scope', new_credentials._scopes)
@mock.patch('oauth2client.service_account._UTCNOW')
@mock.patch('oauth2client.client._UTCNOW')
@mock.patch('time.time')
@@ -479,7 +480,7 @@ class JWTAccessCredentialsTests(unittest2.TestCase):
bearer, token = headers[b'Authorization'].split()
payload = crypt.verify_signed_jwt_with_certs(
token,
{'key': datafile('public_cert.pem')},
{'key': datafile('public_cert.pem')},
audience=self.url)
self.assertEqual(payload['iss'], self.service_account_email)
self.assertEqual(payload['sub'], self.service_account_email)

View File

@@ -20,9 +20,9 @@ import mock
from six.moves.urllib import request
import unittest2
from oauth2client import tools
from oauth2client.client import FlowExchangeError
from oauth2client.client import OOB_CALLBACK_URN
from oauth2client import tools
try:
import argparse
@@ -68,11 +68,10 @@ class TestRunFlow(unittest2.TestCase):
self.server_flags = argparse.Namespace(
noauth_local_webserver=False,
logging_level='INFO',
auth_host_port=[8080,],
auth_host_port=[8080, ],
auth_host_name='localhost')
@mock.patch.object(sys, 'argv',
['ignored', '--noauth_local_webserver'])
@mock.patch.object(sys, 'argv', ['ignored', '--noauth_local_webserver'])
@mock.patch('oauth2client.tools.logging')
@mock.patch('oauth2client.tools.input')
def test_run_flow_no_webserver(self, input_mock, logging_mock):
@@ -149,8 +148,7 @@ class TestRunFlow(unittest2.TestCase):
# Exchange returned an error code.
with self.assertRaises(SystemExit):
returned_credentials = tools.run_flow(
self.flow, self.storage, flags=self.server_flags)
tools.run_flow(self.flow, self.storage, flags=self.server_flags)
self.assertTrue(self.server.handle_request.called)
@@ -164,8 +162,7 @@ class TestRunFlow(unittest2.TestCase):
# No code found in response
with self.assertRaises(SystemExit):
returned_credentials = tools.run_flow(
self.flow, self.storage, flags=self.server_flags)
tools.run_flow(self.flow, self.storage, flags=self.server_flags)
self.assertTrue(self.server.handle_request.called)

View File

@@ -9,7 +9,6 @@ from oauth2client import util
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
class PositionalTests(unittest2.TestCase):
def test_usage(self):
@@ -45,7 +44,6 @@ class PositionalTests(unittest2.TestCase):
with self.assertRaises(TypeError):
fn3(1, 2)
@mock.patch('oauth2client.util.logger')
def test_enforcement_warning(self, mock_logger):
util.positional_parameters_enforcement = util.POSITIONAL_WARNING
@@ -57,7 +55,6 @@ class PositionalTests(unittest2.TestCase):
self.assertTrue(fn(1, 2))
self.assertTrue(mock_logger.warning.called)
@mock.patch('oauth2client.util.logger')
def test_enforcement_ignore(self, mock_logger):
util.positional_parameters_enforcement = util.POSITIONAL_IGNORE
@@ -104,7 +101,6 @@ class StringToScopeTests(unittest2.TestCase):
self.assertEqual(expected, util.string_to_scopes(case))
class AddQueryParameterTests(unittest2.TestCase):
def test__add_query_parameter(self):

21
tox.ini
View File

@@ -154,3 +154,24 @@ commands =
deps =
pycrypto>=2.6
passenv = {[testenv:system-tests]passenv}
[testenv:flake8]
commands = flake8 --import-order-style google {posargs}
deps =
flake8-putty
flake8-import-order
[flake8]
exclude = .tox,.git,./*.egg,build,
application-import-names = oauth2client
putty-ignore =
# E402 module level import not at top of file
# These files have needed configurations defined before import
docs/conf.py : E402
tests/contrib/test_appengine.py : E402
# Additionally, ignore E100 (imports in wrong order) for Django configuration
tests/contrib/test_django_orm.py : E402,I100
# E501 line too long
# Ignore lines over 80 chars that include "http:" or "https:"
/http:/ : E501
/https:/ : E501