Now correctly using urlencode for query parameters. Also handling unicode by converting to utf-8.
This commit is contained in:
@@ -27,6 +27,7 @@ import os
|
|||||||
import re
|
import re
|
||||||
import simplejson
|
import simplejson
|
||||||
import uritemplate
|
import uritemplate
|
||||||
|
import urllib
|
||||||
import urlparse
|
import urlparse
|
||||||
|
|
||||||
|
|
||||||
@@ -93,10 +94,13 @@ class JsonModel(object):
|
|||||||
return (headers, path_params, query, simplejson.dumps(model))
|
return (headers, path_params, query, simplejson.dumps(model))
|
||||||
|
|
||||||
def build_query(self, params):
|
def build_query(self, params):
|
||||||
query = '?alt=json&prettyprint=true'
|
params.update({'alt': 'json', 'prettyprint': 'true'})
|
||||||
for key,value in params.iteritems():
|
astuples = []
|
||||||
query += '&%s=%s' % (key, value)
|
for key, value in params.iteritems():
|
||||||
return query
|
if getattr(value, 'encode', False) and callable(value.encode):
|
||||||
|
value = value.encode('utf-8')
|
||||||
|
astuples.append((key, value))
|
||||||
|
return '?' + urllib.urlencode(astuples)
|
||||||
|
|
||||||
def response(self, resp, content):
|
def response(self, resp, content):
|
||||||
# Error handling is TBD, for example, do we retry
|
# Error handling is TBD, for example, do we retry
|
||||||
|
|||||||
26
runtests.py
26
runtests.py
@@ -1,5 +1,9 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
import glob, unittest, os, sys
|
import glob
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
|
||||||
from trace import fullmodname
|
from trace import fullmodname
|
||||||
try:
|
try:
|
||||||
@@ -10,6 +14,20 @@ except:
|
|||||||
|
|
||||||
sys.path.insert(0, os.getcwd())
|
sys.path.insert(0, os.getcwd())
|
||||||
|
|
||||||
|
verbosity = 1
|
||||||
|
if "-q" in sys.argv or '--quiet' in sys.argv:
|
||||||
|
verbosity = 0
|
||||||
|
if "-v" in sys.argv or '--verbose' in sys.argv:
|
||||||
|
verbosity = 2
|
||||||
|
|
||||||
|
if verbosity == 0:
|
||||||
|
logging.disable(logging.CRITICAL)
|
||||||
|
elif verbosity == 1:
|
||||||
|
logging.disable(logging.ERROR)
|
||||||
|
elif verbosity == 2:
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
|
|
||||||
|
|
||||||
def build_suite(folder):
|
def build_suite(folder):
|
||||||
# find all of the test modules
|
# find all of the test modules
|
||||||
modules = map(fullmodname, glob.glob(os.path.join(folder, 'test_*.py')))
|
modules = map(fullmodname, glob.glob(os.path.join(folder, 'test_*.py')))
|
||||||
@@ -25,12 +43,6 @@ def build_suite(folder):
|
|||||||
__import__(module)
|
__import__(module)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
verbosity = 1
|
|
||||||
if "-q" in sys.argv or '--quiet' in sys.argv:
|
|
||||||
verbosity = 0
|
|
||||||
if "-v" in sys.argv or '--verbose' in sys.argv:
|
|
||||||
verbosity = 2
|
|
||||||
|
|
||||||
unit_tests = build_suite('tests')
|
unit_tests = build_suite('tests')
|
||||||
functional_tests = build_suite('functional_tests')
|
functional_tests = build_suite('functional_tests')
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ __author__ = 'jcgregorio@google.com (Joe Gregorio)'
|
|||||||
from apiclient.discovery import JsonModel
|
from apiclient.discovery import JsonModel
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
|
import urlparse
|
||||||
|
|
||||||
|
|
||||||
class Model(unittest.TestCase):
|
class Model(unittest.TestCase):
|
||||||
@@ -57,5 +58,24 @@ class Model(unittest.TestCase):
|
|||||||
self.assertNotEqual(query, '')
|
self.assertNotEqual(query, '')
|
||||||
self.assertEqual(body, '{"data": {}}')
|
self.assertEqual(body, '{"data": {}}')
|
||||||
|
|
||||||
|
def test_json_build_query(self):
|
||||||
|
model = JsonModel()
|
||||||
|
|
||||||
|
headers = {}
|
||||||
|
path_params = {}
|
||||||
|
query_params = {'foo': 1, 'bar': u'\N{COMET}'}
|
||||||
|
body = {}
|
||||||
|
|
||||||
|
headers, params, query, body = model.request(headers, path_params, query_params, body)
|
||||||
|
|
||||||
|
self.assertEqual(headers['accept'], 'application/json')
|
||||||
|
self.assertEqual(headers['content-type'], 'application/json')
|
||||||
|
|
||||||
|
query_dict = urlparse.parse_qs(query)
|
||||||
|
self.assertEqual(query_dict['foo'], ['1'])
|
||||||
|
self.assertEqual(query_dict['bar'], [u'\N{COMET}'.encode('utf-8')])
|
||||||
|
self.assertEqual(body, '{"data": {}}')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Reference in New Issue
Block a user