Fixing up discovery document format for OAuth parameters based on feedback.
diff --git a/apiclient/oauth.py b/apiclient/oauth.py
index 63f896b..059cb5a 100644
--- a/apiclient/oauth.py
+++ b/apiclient/oauth.py
@@ -26,23 +26,61 @@
def _abstract():
- raise NotImplementedError("You need to override this function")
+ raise NotImplementedError('You need to override this function')
buzz_discovery = {
- 'required': ['domain', 'scope'],
'request': {
'url': 'https://www.google.com/accounts/OAuthGetRequestToken',
- 'params': ['xoauth_displayname']
+ 'parameters': {
+ 'xoauth_displayname': {
+ 'parameterType': 'query',
+ 'required': False
+ },
+ 'domain': {
+ 'parameterType': 'query',
+ 'required': True
+ },
+ 'scope': {
+ 'parameterType': 'query',
+ 'required': True
+ },
},
+ },
'authorize': {
'url': 'https://www.google.com/buzz/api/auth/OAuthAuthorizeToken',
- 'params': ['iconUrl', 'oauth_token']
+ 'parameters': {
+ 'oauth_token': {
+ 'parameterType': 'query',
+ 'required': True
+ },
+ 'iconUrl': {
+ 'parameterType': 'query',
+ 'required': False
+ },
+ 'domain': {
+ 'parameterType': 'query',
+ 'required': True
+ },
+ 'scope': {
+ 'parameterType': 'query',
+ 'required': True
+ },
},
+ },
'access': {
'url': 'https://www.google.com/accounts/OAuthGetAccessToken',
- 'params': []
+ 'parameters': {
+ 'domain': {
+ 'parameterType': 'query',
+ 'required': True
+ },
+ 'scope': {
+ 'parameterType': 'query',
+ 'required': True
+ },
},
+ },
}
@@ -60,9 +98,7 @@
"""
if name not in ['request', 'access', 'authorize']:
raise KeyError(name)
- keys = []
- keys.extend(discovery['required'])
- keys.extend(discovery[name]['params'])
+ keys = discovery[name]['parameters'].keys()
query = {}
for key in keys:
if key in params:
@@ -128,7 +164,7 @@
signer = oauth.SignatureMethod_HMAC_SHA1()
# The closure that will replace 'httplib2.Http.request'.
- def new_request(uri, method="GET", body=None, headers=None,
+ def new_request(uri, method='GET', body=None, headers=None,
redirections=httplib2.DEFAULT_MAX_REDIRECTS,
connection_type=None):
"""Modify the request headers to add the appropriate
@@ -169,7 +205,12 @@
self.user_agent = user_agent
self.params = kwargs
self.request_token = {}
- for key in discovery['required']:
+ required = {}
+ for uriinfo in discovery.itervalues():
+ for name, value in uriinfo['parameters'].iteritems():
+ if value['required'] and not name.startswith('oauth_'):
+ required[name] = 1
+ for key in required.iterkeys():
if key not in self.params:
raise MissingParameter('Required parameter %s not supplied' % key)