Move to v0.3 discovery and use method and parameter descriptions if available.
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index bddcef1..6c4d76f 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -41,8 +41,9 @@
URITEMPLATE = re.compile('{[^}]*}')
VARNAME = re.compile('[a-zA-Z0-9_-]+')
-DISCOVERY_URI = ('https://www.googleapis.com/discovery/v0.2beta1/describe/'
+DISCOVERY_URI = ('https://www.googleapis.com/discovery/v0.3/describe/'
'{api}/{apiVersion}')
+DEFAULT_METHOD_DOC = 'A description of how to use this function'
def key2param(key):
@@ -192,8 +193,11 @@
argmap = {}
if httpMethod in ['PUT', 'POST']:
- argmap['body'] = 'body'
-
+ if 'parameters' not in methodDesc:
+ methodDesc['parameters'] = {}
+ methodDesc['parameters']['body'] = {
+ 'description': 'The request body.',
+ }
required_params = [] # Required parameters
pattern_params = {} # Parameters that must match a regex
@@ -272,12 +276,16 @@
headers=headers,
methodId=methodId)
- docs = ['A description of how to use this function\n\n']
+ docs = [methodDesc.get('description', DEFAULT_METHOD_DOC), '\n\n']
+ if len(argmap) > 0:
+ docs.append("Args:\n")
for arg in argmap.iterkeys():
- required = ''
+ required = ""
if arg in required_params:
- required = ' (required)'
- docs.append('%s - A parameter%s\n' % (arg, required))
+ required = " (required)"
+ paramdoc = methodDesc['parameters'][argmap[arg]].get(
+ 'description', 'A parameter')
+ docs.append(' %s: %s%s\n' % (arg, paramdoc, required))
setattr(method, '__doc__', ''.join(docs))
setattr(theclass, methodName, method)
@@ -285,7 +293,7 @@
def createNextMethod(theclass, methodName, methodDesc, futureDesc):
methodId = methodDesc['rpcMethod'] + '.next'
- def method(self, previous):
+ def methodNext(self, previous):
"""
Takes a single argument, 'body', which is the results
from the last call, and returns the next set of items
@@ -325,7 +333,7 @@
headers=headers,
methodId=methodId)
- setattr(theclass, methodName, method)
+ setattr(theclass, methodName, methodNext)
# Add basic methods to Resource
if 'methods' in resourceDesc:
@@ -339,30 +347,29 @@
# Add in nested resources
if 'resources' in resourceDesc:
- def createMethod(theclass, methodName, methodDesc, futureDesc):
+ def createResourceMethod(theclass, methodName, methodDesc, futureDesc):
- def method(self):
+ def methodResource(self):
return createResource(self._http, self._baseUrl, self._model,
self._requestBuilder, self._developerKey,
methodDesc, futureDesc)
- setattr(method, '__doc__', 'A description of how to use this function')
- setattr(method, '__is_resource__', True)
- setattr(theclass, methodName, method)
+ setattr(methodResource, '__doc__', 'A collection resource.')
+ setattr(methodResource, '__is_resource__', True)
+ setattr(theclass, methodName, methodResource)
for methodName, methodDesc in resourceDesc['resources'].iteritems():
if futureDesc and 'resources' in futureDesc:
future = futureDesc['resources'].get(methodName, {})
else:
future = {}
- createMethod(Resource, methodName, methodDesc,
- future)
+ createResourceMethod(Resource, methodName, methodDesc, future)
# Add <m>_next() methods to Resource
if futureDesc and 'methods' in futureDesc:
for methodName, methodDesc in futureDesc['methods'].iteritems():
if 'next' in methodDesc and methodName in resourceDesc['methods']:
- createNextMethod(Resource, methodName + '_next',
+ createNextMethod(Resource, methodName + "_next",
resourceDesc['methods'][methodName],
methodDesc['next'])