From bc2ff9bc4e204207df2aa2412dcd7e7f201fce21 Mon Sep 17 00:00:00 2001 From: Joe Gregorio Date: Mon, 8 Nov 2010 09:20:48 -0500 Subject: [PATCH] Fix for a temporary problem with discovery documents. Now query vs path parameters are inferred from the restPath. --- apiclient/discovery.py | 10 ++++ functional_tests/test_services.py | 77 ++++++++++++++++++------------- samples/buzz/buzz.py | 4 +- 3 files changed, 58 insertions(+), 33 deletions(-) diff --git a/apiclient/discovery.py b/apiclient/discovery.py index db042f7..1660288 100644 --- a/apiclient/discovery.py +++ b/apiclient/discovery.py @@ -35,6 +35,9 @@ except ImportError: from apiclient.http import HttpRequest from apiclient.json import simplejson +URITEMPLATE = re.compile('{[^}]*}') +VARNAME = re.compile('[a-zA-Z0-9_-]+') + class Error(Exception): """Base error for this module.""" pass @@ -215,6 +218,13 @@ def createResource(http, baseUrl, model, resourceName, developerKey, if desc.get('restParameterType') == 'path': path_params[param] = param + for match in URITEMPLATE.finditer(pathUrl): + for namematch in VARNAME.finditer(match.group(0)): + name = key2param(namematch.group(0)) + path_params[name] = name + if name in query_params: + query_params.remove(name) + def method(self, **kwargs): for name in kwargs.iterkeys(): if name not in argmap: diff --git a/functional_tests/test_services.py b/functional_tests/test_services.py index cf35d8f..8a20d3f 100644 --- a/functional_tests/test_services.py +++ b/functional_tests/test_services.py @@ -124,7 +124,8 @@ class BuzzFunctionalTest(unittest.TestCase): buzz = build('buzz', 'v1') # Restricting max_results to 1 means only a tiny amount of data comes back but the totalResults still has the total. - following = buzz.people().list(userId='googlebuzz', groupId='@followers', max_results=1).execute() + following = buzz.people().list(userId='googlebuzz', groupId='@followers', + max_results='1').execute() # @googlebuzz has a large but fluctuating number of followers # It is sufficient if the result is bigger than 10, 000 @@ -152,11 +153,13 @@ class BuzzAuthenticatedFunctionalTest(unittest.TestCase): buzz = build('buzz', 'v1', http=self.http) activity = buzz.activities().insert(userId='@me', body={ - 'title': 'Testing insert', - 'object': { - 'content': u'Just a short note to show that insert is working. ?', - 'type': 'note'} - } + 'data': { + 'title': 'Testing insert', + 'object': { + 'content': u'Just a short note to show that insert is working. ?', + 'type': 'note'} + } + } ).execute() self.assertTrue(activity is not None) @@ -164,16 +167,18 @@ class BuzzAuthenticatedFunctionalTest(unittest.TestCase): buzz = build('buzz', 'v1', http=self.http) activity = buzz.activities().insert(userId='@me', body={ - 'title': 'Testing insert', - 'object': { - 'content': 'This is a private post.' - }, - 'visibility': { - 'entries': [ - { 'id': 'tag:google.com,2010:buzz-group:108242092577082601423:13' } - ] - } - } + 'data': { + 'title': 'Testing insert', + 'object': { + 'content': 'This is a private post.' + }, + 'visibility': { + 'entries': [ + { 'id': 'tag:google.com,2010:buzz-group:108242092577082601423:13' } + ] + } + } + } ).execute() self.assertTrue(activity is not None) @@ -201,11 +206,13 @@ class BuzzAuthenticatedFunctionalTest(unittest.TestCase): def IGNORE__test_can_like_activity(self): buzz = build('buzz', 'v1', http=self.http) activity = buzz.activities().insert(userId='@me', body={ - 'title': 'Testing insert', - 'object': { - 'content': u'Just a short note to show that insert is working. ?', - 'type': 'note'} - } + 'data': { + 'title': 'Testing insert', + 'object': { + 'content': u'Just a short note to show that insert is working. ?', + 'type': 'note'} + } + } ).execute() pprint.pprint(activity) id = activity['id'] @@ -216,16 +223,20 @@ class BuzzAuthenticatedFunctionalTest(unittest.TestCase): buzz = build('buzz', 'v1', http=self.http) activity = buzz.activities().insert(userId='@me', body={ - 'title': 'A new activity', - 'object': { - 'content': u'The body of the new activity', - 'type': 'note'} - } + 'data': { + 'title': 'A new activity', + 'object': { + 'content': u'The body of the new activity', + 'type': 'note'} + } + } ).execute() id = activity['id'] comment = buzz.comments().insert(userId='@me', postId=id, body={ - "content": "A comment on the new activity" + 'data': { + 'content': 'A comment on the new activity' + } }).execute() def test_can_list_groups_belonging_to_user(self): @@ -248,11 +259,13 @@ class BuzzAuthenticatedFunctionalTest(unittest.TestCase): buzz = build('buzz', 'v1', http=self.http) activity = buzz.activities().insert(userId='@me', body={ - 'title': 'Activity to be deleted', - 'object': { - 'content': u'Created this activity so that it can be deleted.', - 'type': 'note'} - } + 'data': { + 'title': 'Activity to be deleted', + 'object': { + 'content': u'Created this activity so that it can be deleted.', + 'type': 'note'} + } + } ).execute() id = activity['id'] diff --git a/samples/buzz/buzz.py b/samples/buzz/buzz.py index 94cba2a..9cebd79 100644 --- a/samples/buzz/buzz.py +++ b/samples/buzz/buzz.py @@ -18,7 +18,7 @@ import pickle import pprint # Uncomment the next line to get very detailed logging -# httplib2.debuglevel = 4 +#httplib2.debuglevel = 4 def main(): f = open("buzz.dat", "r") @@ -56,7 +56,9 @@ def main(): # Add a comment to that activity comment_body = { + "data": { "content": "This is a comment" + } } item = activitylist['items'][0] comment = p.comments().insert(