Skip to content

Commit 3fada33

Browse files
committed
Fixed bug with nested resources
1 parent 48c1caa commit 3fada33

7 files changed

Lines changed: 43 additions & 11 deletions

File tree

apiclient/discovery.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
from http import HttpRequest
3737
from anyjson import simplejson
3838
from model import JsonModel
39-
from errors import HttpError
4039
from errors import UnknownLinkType
4140

4241
URITEMPLATE = re.compile('{[^}]*}')
@@ -63,11 +62,11 @@ def key2param(key):
6362

6463

6564
def build(serviceName, version,
66-
http=None,
67-
discoveryServiceUrl=DISCOVERY_URI,
68-
developerKey=None,
69-
model=JsonModel(),
70-
requestBuilder=HttpRequest):
65+
http=None,
66+
discoveryServiceUrl=DISCOVERY_URI,
67+
developerKey=None,
68+
model=JsonModel(),
69+
requestBuilder=HttpRequest):
7170
params = {
7271
'api': serviceName,
7372
'apiVersion': version
@@ -292,7 +291,8 @@ def createMethod(theclass, methodName, methodDesc, futureDesc):
292291

293292
def method(self):
294293
return createResource(self._http, self._baseUrl, self._model,
295-
methodName, self._developerKey, methodDesc, futureDesc)
294+
self._requestBuilder, methodName,
295+
self._developerKey, methodDesc, futureDesc)
296296

297297
setattr(method, '__doc__', 'A description of how to use this function')
298298
setattr(method, '__is_resource__', True)

apiclient/ext/appengine.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def __init__(self, model, key_name, property_name):
106106
Args:
107107
model: db.Model, model class
108108
key_name: string, key name for the entity that has the credentials
109-
property_name: string, name of the property that is an CredentialsProperty
109+
property_name: string, name of the property that is a CredentialsProperty
110110
"""
111111
self.model = model
112112
self.key_name = key_name

samples/new_project_template/main.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,12 @@ def get(self):
6464
if not credentials:
6565
return begin_oauth_flow(self, user, service)
6666

67-
followers = service.people().list(userId='@me', groupId='@followers').execute()
67+
followers = service.people().list(
68+
userId='@me', groupId='@followers').execute()
6869
self.response.out.write('Hello, you have %s followers!' %
6970
followers['totalResults'])
7071

72+
7173
def begin_oauth_flow(request_handler, user, service):
7274
flow = FlowThreeLegged(service.auth_discovery(),
7375
consumer_key='anonymous',
@@ -81,6 +83,7 @@ def begin_oauth_flow(request_handler, user, service):
8183
memcache.set(user.user_id(), pickle.dumps(flow))
8284
request_handler.redirect(authorize_url)
8385

86+
8487
class OAuthHandler(webapp.RequestHandler):
8588

8689
@login_required

tests/data/zoo.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,25 @@
55
"restBasePath": "/zoo",
66
"rpcPath": "/rpc",
77
"resources": {
8+
"my": {
9+
"resources": {
10+
"favorites": {
11+
"methods": {
12+
"list": {
13+
"restPath": "favorites/@me/mine",
14+
"rpcMethod": "zoo.animals.mine",
15+
"httpMethod": "GET",
16+
"parameters": {
17+
"max-results": {
18+
"restParameterType": "query",
19+
"required": false
20+
}
21+
}
22+
}
23+
}
24+
}
25+
}
26+
},
827
"animals": {
928
"methods": {
1029
"crossbreed": {

tests/test_discovery.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,15 @@ def test_full_featured(self):
104104
self.assertEqual(q['name'], ['bat'])
105105
self.assertEqual(q['projection'], ['size'])
106106

107+
def test_nested_resources(self):
108+
self.http = HttpMock('zoo.json', {'status': '200'})
109+
zoo = build('zoo', 'v1', self.http)
110+
self.assertTrue(getattr(zoo, 'animals'))
111+
request = zoo.my().favorites().list(max_results="5")
112+
parsed = urlparse.urlparse(request.uri)
113+
q = parse_qs(parsed[4])
114+
self.assertEqual(q['max-results'], ['5'])
115+
107116

108117

109118
class Next(unittest.TestCase):

tests/test_json_model.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121

2222
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
2323

24-
from apiclient.discovery import JsonModel, HttpError
24+
from apiclient.model import JsonModel
25+
from apiclient.errors import HttpError
2526
import os
2627
import unittest
2728
import httplib2

tests/test_mocks.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
2323

24-
from apiclient.discovery import HttpError
24+
from apiclient.errors import HttpError
2525
from apiclient.discovery import build
2626
from apiclient.http import RequestMockBuilder
2727
from tests.util import HttpMock

0 commit comments

Comments
 (0)