Merged with the main repository. Added some conditional imports for compatibility with Python 2.5

This commit is contained in:
ade@google.com
2010-09-27 23:35:39 +01:00
4 changed files with 48 additions and 9 deletions

View File

@@ -28,6 +28,10 @@ import re
import uritemplate
import urllib
import urlparse
try:
from urlparse import parse_qsl
except ImportError:
from cgi import parse_qsl
from apiclient.http import HttpRequest
try: # pragma: no cover
@@ -109,7 +113,7 @@ class JsonModel(object):
def build(serviceName, version, http=None,
discoveryServiceUrl=DISCOVERY_URI, auth=None, model=JsonModel()):
discoveryServiceUrl=DISCOVERY_URI, developerKey=None, model=JsonModel()):
params = {
'api': serviceName,
'apiVersion': version
@@ -141,6 +145,7 @@ def build(serviceName, version, http=None,
self._http = http
self._baseUrl = base
self._model = model
self._developerKey = developerKey
def auth_discovery(self):
return auth_discovery
@@ -149,7 +154,7 @@ def build(serviceName, version, http=None,
def method(self, **kwargs):
return createResource(self._http, self._baseUrl, self._model,
methodName, methodDesc, futureDesc)
methodName, self._developerKey, methodDesc, futureDesc)
setattr(method, '__doc__', 'A description of how to use this function')
setattr(theclass, methodName, method)
@@ -159,8 +164,8 @@ def build(serviceName, version, http=None,
return Service()
def createResource(http, baseUrl, model, resourceName, resourceDesc,
futureDesc):
def createResource(http, baseUrl, model, resourceName, developerKey,
resourceDesc, futureDesc):
class Resource(object):
"""A class for interacting with a resource."""
@@ -169,6 +174,7 @@ def createResource(http, baseUrl, model, resourceName, resourceDesc,
self._http = http
self._baseUrl = baseUrl
self._model = model
self._developerKey = developerKey
def createMethod(theclass, methodName, methodDesc, futureDesc):
pathUrl = methodDesc['pathUrl']
@@ -223,6 +229,9 @@ def createResource(http, baseUrl, model, resourceName, resourceDesc,
actual_path_params[argmap[key]] = value
body_value = kwargs.get('body', None)
if self._developerKey:
actual_query_params['key'] = self._developerKey
headers = {}
headers, params, query, body = self._model.request(headers,
actual_path_params, actual_query_params, body_value)
@@ -266,6 +275,13 @@ def createResource(http, baseUrl, model, resourceName, resourceDesc,
except (KeyError, TypeError):
return None
if self._developerKey:
parsed = list(urlparse.urlparse(url))
q = parse_qsl(parsed[4])
q.append(('key', self._developerKey))
parsed[4] = urllib.urlencode(q)
url = urlparse.urlunparse(parsed)
headers = {}
headers, params, query, body = self._model.request(headers, {}, {}, None)

View File

@@ -12,7 +12,8 @@ class HttpRequest(object):
"""Encapsulate an HTTP request.
"""
def __init__(self, http, uri, method="GET", body=None, headers=None, postproc=None):
def __init__(self, http, uri, method="GET", body=None, headers=None,
postproc=None):
self.uri = uri
self.method = method
self.body = body

View File

@@ -19,6 +19,7 @@ sys.path.insert(0, os.getcwd())
from apiclient.discovery import build
import httplib2
httplib2.debuglevel = 4
import pickle
import pprint
@@ -30,7 +31,7 @@ def main():
http = httplib2.Http()
http = credentials.authorize(http)
p = build("buzz", "v1", http=http)
p = build("buzz", "v1", http=http, developerKey='AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0')
activities = p.activities()
activitylist = activities.list(max_results='2', scope='@self', userId='@me').execute()
print activitylist['items'][0]['title']

View File

@@ -22,10 +22,16 @@ Unit tests for objects created from discovery documents.
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
from apiclient.discovery import build, key2param
import httplib2
import os
import unittest
import urlparse
try:
from urlparse import parse_qs
except ImportError:
from cgi import parse_qs
from apiclient.discovery import build, key2param
DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
@@ -102,12 +108,27 @@ class Discovery(unittest.TestCase):
class Next(unittest.TestCase):
def test_next_for_activities_list(self):
self.http = HttpMock('buzz.json', {'status': '200'})
buzz = build('buzz', 'v1', self.http)
buzz = build('buzz', 'v1', self.http, developerKey='foobie_bletch')
activities = {'links':
{'next':
[{'href': 'http://www.googleapis.com/next-link'}]}}
request = buzz.activities().list_next(activities)
self.assertEqual(request.uri, 'http://www.googleapis.com/next-link')
self.assertEqual(request.uri,
'http://www.googleapis.com/next-link?key=foobie_bletch')
class DeveloperKey(unittest.TestCase):
def test_param(self):
self.http = HttpMock('buzz.json', {'status': '200'})
buzz = build('buzz', 'v1', self.http, developerKey='foobie_bletch')
activities = {'links':
{'next':
[{'href': 'http://www.googleapis.com/next-link'}]}}
request = buzz.activities().list_next(activities)
parsed = urlparse.urlparse(request.uri)
q = parse_qs(parsed[4])
self.assertEqual(q['key'], ['foobie_bletch'])
def test_next_for_people_liked(self):
self.http = HttpMock('buzz.json', {'status': '200'})