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 simplejson
|
||||
import uritemplate
|
||||
import urllib
|
||||
import urlparse
|
||||
|
||||
|
||||
@@ -93,10 +94,13 @@ class JsonModel(object):
|
||||
return (headers, path_params, query, simplejson.dumps(model))
|
||||
|
||||
def build_query(self, params):
|
||||
query = '?alt=json&prettyprint=true'
|
||||
for key,value in params.iteritems():
|
||||
query += '&%s=%s' % (key, value)
|
||||
return query
|
||||
params.update({'alt': 'json', 'prettyprint': 'true'})
|
||||
astuples = []
|
||||
for key, value in params.iteritems():
|
||||
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):
|
||||
# Error handling is TBD, for example, do we retry
|
||||
|
||||
26
runtests.py
26
runtests.py
@@ -1,5 +1,9 @@
|
||||
#!/usr/bin/env python
|
||||
import glob, unittest, os, sys
|
||||
import glob
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
|
||||
from trace import fullmodname
|
||||
try:
|
||||
@@ -10,6 +14,20 @@ except:
|
||||
|
||||
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):
|
||||
# find all of the test modules
|
||||
modules = map(fullmodname, glob.glob(os.path.join(folder, 'test_*.py')))
|
||||
@@ -25,12 +43,6 @@ def build_suite(folder):
|
||||
__import__(module)
|
||||
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')
|
||||
functional_tests = build_suite('functional_tests')
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ __author__ = 'jcgregorio@google.com (Joe Gregorio)'
|
||||
from apiclient.discovery import JsonModel
|
||||
import os
|
||||
import unittest
|
||||
import urlparse
|
||||
|
||||
|
||||
class Model(unittest.TestCase):
|
||||
@@ -57,5 +58,24 @@ class Model(unittest.TestCase):
|
||||
self.assertNotEqual(query, '')
|
||||
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__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user