Merged with the main repository. Added some conditional imports for compatibility with Python 2.5
This commit is contained in:
@@ -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)
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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']
|
||||
|
@@ -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'})
|
||||
|
Reference in New Issue
Block a user