Fixed bug with nested resources
This commit is contained in:
@@ -36,7 +36,6 @@ except ImportError:
|
||||
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 key2param(key):
|
||||
|
||||
|
||||
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 createResource(http, baseUrl, model, requestBuilder, resourceName,
|
||||
|
||||
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)
|
||||
|
||||
@@ -106,7 +106,7 @@ class StorageByKeyName(object):
|
||||
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
|
||||
|
||||
@@ -64,10 +64,12 @@ class MainHandler(webapp.RequestHandler):
|
||||
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 @@ def begin_oauth_flow(request_handler, user, service):
|
||||
memcache.set(user.user_id(), pickle.dumps(flow))
|
||||
request_handler.redirect(authorize_url)
|
||||
|
||||
|
||||
class OAuthHandler(webapp.RequestHandler):
|
||||
|
||||
@login_required
|
||||
|
||||
@@ -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": {
|
||||
|
||||
@@ -104,6 +104,15 @@ class Discovery(unittest.TestCase):
|
||||
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):
|
||||
|
||||
@@ -21,7 +21,8 @@ Unit tests for the JSON model.
|
||||
|
||||
__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
|
||||
|
||||
@@ -21,7 +21,7 @@ Unit tests for the Mocks.
|
||||
|
||||
__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
|
||||
|
||||
Reference in New Issue
Block a user