Skip to content

Commit c3fae8a

Browse files
committed
Move to v0.3 discovery and use method and parameter descriptions if available.
1 parent a0a52e4 commit c3fae8a

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

apiclient/discovery.py

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,9 @@
4141

4242
URITEMPLATE = re.compile('{[^}]*}')
4343
VARNAME = re.compile('[a-zA-Z0-9_-]+')
44-
DISCOVERY_URI = ('https://www.googleapis.com/discovery/v0.2beta1/describe/'
44+
DISCOVERY_URI = ('https://www.googleapis.com/discovery/v0.3/describe/'
4545
'{api}/{apiVersion}')
46+
DEFAULT_METHOD_DOC = 'A description of how to use this function'
4647

4748

4849
def key2param(key):
@@ -192,8 +193,11 @@ def createMethod(theclass, methodName, methodDesc, futureDesc):
192193

193194
argmap = {}
194195
if httpMethod in ['PUT', 'POST']:
195-
argmap['body'] = 'body'
196-
196+
if 'parameters' not in methodDesc:
197+
methodDesc['parameters'] = {}
198+
methodDesc['parameters']['body'] = {
199+
'description': 'The request body.',
200+
}
197201

198202
required_params = [] # Required parameters
199203
pattern_params = {} # Parameters that must match a regex
@@ -272,20 +276,24 @@ def method(self, **kwargs):
272276
headers=headers,
273277
methodId=methodId)
274278

275-
docs = ['A description of how to use this function\n\n']
279+
docs = [methodDesc.get('description', DEFAULT_METHOD_DOC), '\n\n']
280+
if len(argmap) > 0:
281+
docs.append("Args:\n")
276282
for arg in argmap.iterkeys():
277-
required = ''
283+
required = ""
278284
if arg in required_params:
279-
required = ' (required)'
280-
docs.append('%s - A parameter%s\n' % (arg, required))
285+
required = " (required)"
286+
paramdoc = methodDesc['parameters'][argmap[arg]].get(
287+
'description', 'A parameter')
288+
docs.append(' %s: %s%s\n' % (arg, paramdoc, required))
281289

282290
setattr(method, '__doc__', ''.join(docs))
283291
setattr(theclass, methodName, method)
284292

285293
def createNextMethod(theclass, methodName, methodDesc, futureDesc):
286294
methodId = methodDesc['rpcMethod'] + '.next'
287295

288-
def method(self, previous):
296+
def methodNext(self, previous):
289297
"""
290298
Takes a single argument, 'body', which is the results
291299
from the last call, and returns the next set of items
@@ -325,7 +333,7 @@ def method(self, previous):
325333
headers=headers,
326334
methodId=methodId)
327335

328-
setattr(theclass, methodName, method)
336+
setattr(theclass, methodName, methodNext)
329337

330338
# Add basic methods to Resource
331339
if 'methods' in resourceDesc:
@@ -339,30 +347,29 @@ def method(self, previous):
339347
# Add in nested resources
340348
if 'resources' in resourceDesc:
341349

342-
def createMethod(theclass, methodName, methodDesc, futureDesc):
350+
def createResourceMethod(theclass, methodName, methodDesc, futureDesc):
343351

344-
def method(self):
352+
def methodResource(self):
345353
return createResource(self._http, self._baseUrl, self._model,
346354
self._requestBuilder, self._developerKey,
347355
methodDesc, futureDesc)
348356

349-
setattr(method, '__doc__', 'A description of how to use this function')
350-
setattr(method, '__is_resource__', True)
351-
setattr(theclass, methodName, method)
357+
setattr(methodResource, '__doc__', 'A collection resource.')
358+
setattr(methodResource, '__is_resource__', True)
359+
setattr(theclass, methodName, methodResource)
352360

353361
for methodName, methodDesc in resourceDesc['resources'].iteritems():
354362
if futureDesc and 'resources' in futureDesc:
355363
future = futureDesc['resources'].get(methodName, {})
356364
else:
357365
future = {}
358-
createMethod(Resource, methodName, methodDesc,
359-
future)
366+
createResourceMethod(Resource, methodName, methodDesc, future)
360367

361368
# Add <m>_next() methods to Resource
362369
if futureDesc and 'methods' in futureDesc:
363370
for methodName, methodDesc in futureDesc['methods'].iteritems():
364371
if 'next' in methodDesc and methodName in resourceDesc['methods']:
365-
createNextMethod(Resource, methodName + '_next',
372+
createNextMethod(Resource, methodName + "_next",
366373
resourceDesc['methods'][methodName],
367374
methodDesc['next'])
368375

samples/api-python-client-doc/main.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ def get(self, service_name, version):
8888

8989
collections = []
9090
for name in dir(service):
91-
if not "_" in name and callable(getattr(service, name)):
91+
if not "_" in name and callable(getattr(service, name)) and hasattr(
92+
getattr(service, name), '__is_resource__'):
9293
collections.append(name)
9394

9495
for name in collections:

0 commit comments

Comments
 (0)