Fixed bug with nested resources
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 57c5af8..fb9b7c5 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -36,7 +36,6 @@
from http import HttpRequest
from anyjson import simplejson
from model import JsonModel
-from errors import HttpError
from errors import UnknownLinkType
URITEMPLATE = re.compile('{[^}]*}')
@@ -63,11 +62,11 @@
def build(serviceName, version,
- http=None,
- discoveryServiceUrl=DISCOVERY_URI,
- developerKey=None,
- model=JsonModel(),
- requestBuilder=HttpRequest):
+ http=None,
+ discoveryServiceUrl=DISCOVERY_URI,
+ developerKey=None,
+ model=JsonModel(),
+ requestBuilder=HttpRequest):
params = {
'api': serviceName,
'apiVersion': version
@@ -292,7 +291,8 @@
def method(self):
return createResource(self._http, self._baseUrl, self._model,
- methodName, self._developerKey, methodDesc, futureDesc)
+ self._requestBuilder, methodName,
+ self._developerKey, methodDesc, futureDesc)
setattr(method, '__doc__', 'A description of how to use this function')
setattr(method, '__is_resource__', True)
diff --git a/apiclient/ext/appengine.py b/apiclient/ext/appengine.py
index ead4d29..232d4ea 100644
--- a/apiclient/ext/appengine.py
+++ b/apiclient/ext/appengine.py
@@ -106,7 +106,7 @@
Args:
model: db.Model, model class
key_name: string, key name for the entity that has the credentials
- property_name: string, name of the property that is an CredentialsProperty
+ property_name: string, name of the property that is a CredentialsProperty
"""
self.model = model
self.key_name = key_name
diff --git a/samples/new_project_template/main.py b/samples/new_project_template/main.py
index 8241908..7238344 100755
--- a/samples/new_project_template/main.py
+++ b/samples/new_project_template/main.py
@@ -64,10 +64,12 @@
if not credentials:
return begin_oauth_flow(self, user, service)
- followers = service.people().list(userId='@me', groupId='@followers').execute()
+ followers = service.people().list(
+ userId='@me', groupId='@followers').execute()
self.response.out.write('Hello, you have %s followers!' %
followers['totalResults'])
+
def begin_oauth_flow(request_handler, user, service):
flow = FlowThreeLegged(service.auth_discovery(),
consumer_key='anonymous',
@@ -81,6 +83,7 @@
memcache.set(user.user_id(), pickle.dumps(flow))
request_handler.redirect(authorize_url)
+
class OAuthHandler(webapp.RequestHandler):
@login_required
diff --git a/tests/data/zoo.json b/tests/data/zoo.json
index 50b2e55..f83e9dd 100644
--- a/tests/data/zoo.json
+++ b/tests/data/zoo.json
@@ -5,6 +5,25 @@
"restBasePath": "/zoo",
"rpcPath": "/rpc",
"resources": {
+ "my": {
+ "resources": {
+ "favorites": {
+ "methods": {
+ "list": {
+ "restPath": "favorites/@me/mine",
+ "rpcMethod": "zoo.animals.mine",
+ "httpMethod": "GET",
+ "parameters": {
+ "max-results": {
+ "restParameterType": "query",
+ "required": false
+ }
+ }
+ }
+ }
+ }
+ }
+ },
"animals": {
"methods": {
"crossbreed": {
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index 44dbd6a..0c64a09 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -104,6 +104,15 @@
self.assertEqual(q['name'], ['bat'])
self.assertEqual(q['projection'], ['size'])
+ def test_nested_resources(self):
+ self.http = HttpMock('zoo.json', {'status': '200'})
+ zoo = build('zoo', 'v1', self.http)
+ self.assertTrue(getattr(zoo, 'animals'))
+ request = zoo.my().favorites().list(max_results="5")
+ parsed = urlparse.urlparse(request.uri)
+ q = parse_qs(parsed[4])
+ self.assertEqual(q['max-results'], ['5'])
+
class Next(unittest.TestCase):
diff --git a/tests/test_json_model.py b/tests/test_json_model.py
index c9c9b7d..084e0a9 100644
--- a/tests/test_json_model.py
+++ b/tests/test_json_model.py
@@ -21,7 +21,8 @@
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
-from apiclient.discovery import JsonModel, HttpError
+from apiclient.model import JsonModel
+from apiclient.errors import HttpError
import os
import unittest
import httplib2
diff --git a/tests/test_mocks.py b/tests/test_mocks.py
index 91450ee..ee8ef26 100644
--- a/tests/test_mocks.py
+++ b/tests/test_mocks.py
@@ -21,7 +21,7 @@
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
-from apiclient.discovery import HttpError
+from apiclient.errors import HttpError
from apiclient.discovery import build
from apiclient.http import RequestMockBuilder
from tests.util import HttpMock