Fixed bug with nested resources

This commit is contained in:
Joe Gregorio
2011-01-07 17:07:45 -05:00
parent 48c1caaacd
commit 3fada336cd
7 changed files with 43 additions and 11 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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": {

View File

@@ -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):

View File

@@ -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

View File

@@ -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