Fix lack of top level methods from a service.
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index b39e1b2..b557b8b 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -91,6 +91,7 @@
return build_from_document(content, discoveryServiceUrl, future,
http, developerKey, model, requestBuilder)
+
def build_from_document(
service,
base,
@@ -105,8 +106,8 @@
base: string, base URI for all HTTP requests, usually the discovery URI
future: string, discovery document with future capabilities
auth_discovery: dict, information about the authentication the API supports
- http: httplib2.Http, An instance of httplib2.Http or something that acts like
- it that HTTP requests will be made through.
+ http: httplib2.Http, An instance of httplib2.Http or something that acts
+ like it that HTTP requests will be made through.
developerKey: string, Key for controlling API usage, generated
from the API Console.
model: Model class instance that serializes and
@@ -116,45 +117,26 @@
service = simplejson.loads(service)
base = urlparse.urljoin(base, service['restBasePath'])
- resources = service['resources']
if future:
- doc = simplejson.loads(future)
- future = doc['resources']
- auth_discovery = doc.get('auth', {})
+ future = simplejson.loads(future)
+ auth_discovery = future.get('auth', {})
else:
future = {}
auth_discovery = {}
- class Service(object):
- """Top level interface for a service"""
+ resource = createResource(http, base, model, requestBuilder, developerKey,
+ service, future)
- def __init__(self, http=http):
- self._http = http
- self._baseUrl = base
- self._model = model
- self._developerKey = developerKey
- self._requestBuilder = requestBuilder
+ def auth_method():
+ """Discovery information about the authentication the API uses."""
+ return auth_discovery
- def auth_discovery(self):
- return auth_discovery
+ setattr(resource, 'auth_discovery', auth_method)
- def createMethod(theclass, methodName, methodDesc, futureDesc):
-
- def method(self):
- return createResource(self._http, self._baseUrl, self._model,
- self._requestBuilder, methodName,
- self._developerKey, methodDesc, futureDesc)
-
- setattr(method, '__doc__', 'A description of how to use this function')
- setattr(method, '__is_resource__', True)
- setattr(theclass, methodName, method)
-
- for methodName, methodDesc in resources.iteritems():
- createMethod(Service, methodName, methodDesc, future.get(methodName, {}))
- return Service()
+ return resource
-def createResource(http, baseUrl, model, requestBuilder, resourceName,
+def createResource(http, baseUrl, model, requestBuilder,
developerKey, resourceDesc, futureDesc):
class Resource(object):
@@ -322,8 +304,8 @@
def method(self):
return createResource(self._http, self._baseUrl, self._model,
- self._requestBuilder, methodName,
- self._developerKey, methodDesc, futureDesc)
+ self._requestBuilder, self._developerKey,
+ methodDesc, futureDesc)
setattr(method, '__doc__', 'A description of how to use this function')
setattr(method, '__is_resource__', True)
@@ -335,10 +317,10 @@
else:
future = {}
createMethod(Resource, methodName, methodDesc,
- future.get(methodName, {}))
+ future)
# Add <m>_next() methods to Resource
- if futureDesc:
+ 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",