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 uritemplate
|
||||||
import urllib
|
import urllib
|
||||||
import urlparse
|
import urlparse
|
||||||
|
try:
|
||||||
|
from urlparse import parse_qsl
|
||||||
|
except ImportError:
|
||||||
|
from cgi import parse_qsl
|
||||||
from apiclient.http import HttpRequest
|
from apiclient.http import HttpRequest
|
||||||
|
|
||||||
try: # pragma: no cover
|
try: # pragma: no cover
|
||||||
@@ -109,7 +113,7 @@ class JsonModel(object):
|
|||||||
|
|
||||||
|
|
||||||
def build(serviceName, version, http=None,
|
def build(serviceName, version, http=None,
|
||||||
discoveryServiceUrl=DISCOVERY_URI, auth=None, model=JsonModel()):
|
discoveryServiceUrl=DISCOVERY_URI, developerKey=None, model=JsonModel()):
|
||||||
params = {
|
params = {
|
||||||
'api': serviceName,
|
'api': serviceName,
|
||||||
'apiVersion': version
|
'apiVersion': version
|
||||||
@@ -141,6 +145,7 @@ def build(serviceName, version, http=None,
|
|||||||
self._http = http
|
self._http = http
|
||||||
self._baseUrl = base
|
self._baseUrl = base
|
||||||
self._model = model
|
self._model = model
|
||||||
|
self._developerKey = developerKey
|
||||||
|
|
||||||
def auth_discovery(self):
|
def auth_discovery(self):
|
||||||
return auth_discovery
|
return auth_discovery
|
||||||
@@ -149,7 +154,7 @@ def build(serviceName, version, http=None,
|
|||||||
|
|
||||||
def method(self, **kwargs):
|
def method(self, **kwargs):
|
||||||
return createResource(self._http, self._baseUrl, self._model,
|
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(method, '__doc__', 'A description of how to use this function')
|
||||||
setattr(theclass, methodName, method)
|
setattr(theclass, methodName, method)
|
||||||
@@ -159,8 +164,8 @@ def build(serviceName, version, http=None,
|
|||||||
return Service()
|
return Service()
|
||||||
|
|
||||||
|
|
||||||
def createResource(http, baseUrl, model, resourceName, resourceDesc,
|
def createResource(http, baseUrl, model, resourceName, developerKey,
|
||||||
futureDesc):
|
resourceDesc, futureDesc):
|
||||||
|
|
||||||
class Resource(object):
|
class Resource(object):
|
||||||
"""A class for interacting with a resource."""
|
"""A class for interacting with a resource."""
|
||||||
@@ -169,6 +174,7 @@ def createResource(http, baseUrl, model, resourceName, resourceDesc,
|
|||||||
self._http = http
|
self._http = http
|
||||||
self._baseUrl = baseUrl
|
self._baseUrl = baseUrl
|
||||||
self._model = model
|
self._model = model
|
||||||
|
self._developerKey = developerKey
|
||||||
|
|
||||||
def createMethod(theclass, methodName, methodDesc, futureDesc):
|
def createMethod(theclass, methodName, methodDesc, futureDesc):
|
||||||
pathUrl = methodDesc['pathUrl']
|
pathUrl = methodDesc['pathUrl']
|
||||||
@@ -223,6 +229,9 @@ def createResource(http, baseUrl, model, resourceName, resourceDesc,
|
|||||||
actual_path_params[argmap[key]] = value
|
actual_path_params[argmap[key]] = value
|
||||||
body_value = kwargs.get('body', None)
|
body_value = kwargs.get('body', None)
|
||||||
|
|
||||||
|
if self._developerKey:
|
||||||
|
actual_query_params['key'] = self._developerKey
|
||||||
|
|
||||||
headers = {}
|
headers = {}
|
||||||
headers, params, query, body = self._model.request(headers,
|
headers, params, query, body = self._model.request(headers,
|
||||||
actual_path_params, actual_query_params, body_value)
|
actual_path_params, actual_query_params, body_value)
|
||||||
@@ -266,6 +275,13 @@ def createResource(http, baseUrl, model, resourceName, resourceDesc,
|
|||||||
except (KeyError, TypeError):
|
except (KeyError, TypeError):
|
||||||
return None
|
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 = {}
|
||||||
headers, params, query, body = self._model.request(headers, {}, {}, None)
|
headers, params, query, body = self._model.request(headers, {}, {}, None)
|
||||||
|
|
||||||
|
@@ -12,7 +12,8 @@ class HttpRequest(object):
|
|||||||
"""Encapsulate an HTTP request.
|
"""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.uri = uri
|
||||||
self.method = method
|
self.method = method
|
||||||
self.body = body
|
self.body = body
|
||||||
|
@@ -19,6 +19,7 @@ sys.path.insert(0, os.getcwd())
|
|||||||
from apiclient.discovery import build
|
from apiclient.discovery import build
|
||||||
|
|
||||||
import httplib2
|
import httplib2
|
||||||
|
httplib2.debuglevel = 4
|
||||||
import pickle
|
import pickle
|
||||||
import pprint
|
import pprint
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ def main():
|
|||||||
http = httplib2.Http()
|
http = httplib2.Http()
|
||||||
http = credentials.authorize(http)
|
http = credentials.authorize(http)
|
||||||
|
|
||||||
p = build("buzz", "v1", http=http)
|
p = build("buzz", "v1", http=http, developerKey='AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0')
|
||||||
activities = p.activities()
|
activities = p.activities()
|
||||||
activitylist = activities.list(max_results='2', scope='@self', userId='@me').execute()
|
activitylist = activities.list(max_results='2', scope='@self', userId='@me').execute()
|
||||||
print activitylist['items'][0]['title']
|
print activitylist['items'][0]['title']
|
||||||
|
@@ -22,10 +22,16 @@ Unit tests for objects created from discovery documents.
|
|||||||
|
|
||||||
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
|
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
|
||||||
|
|
||||||
from apiclient.discovery import build, key2param
|
|
||||||
import httplib2
|
import httplib2
|
||||||
import os
|
import os
|
||||||
import unittest
|
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')
|
DATA_DIR = os.path.join(os.path.dirname(__file__), 'data')
|
||||||
|
|
||||||
@@ -102,12 +108,27 @@ class Discovery(unittest.TestCase):
|
|||||||
class Next(unittest.TestCase):
|
class Next(unittest.TestCase):
|
||||||
def test_next_for_activities_list(self):
|
def test_next_for_activities_list(self):
|
||||||
self.http = HttpMock('buzz.json', {'status': '200'})
|
self.http = HttpMock('buzz.json', {'status': '200'})
|
||||||
buzz = build('buzz', 'v1', self.http)
|
buzz = build('buzz', 'v1', self.http, developerKey='foobie_bletch')
|
||||||
activities = {'links':
|
activities = {'links':
|
||||||
{'next':
|
{'next':
|
||||||
[{'href': 'http://www.googleapis.com/next-link'}]}}
|
[{'href': 'http://www.googleapis.com/next-link'}]}}
|
||||||
request = buzz.activities().list_next(activities)
|
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):
|
def test_next_for_people_liked(self):
|
||||||
self.http = HttpMock('buzz.json', {'status': '200'})
|
self.http = HttpMock('buzz.json', {'status': '200'})
|
||||||
|
Reference in New Issue
Block a user