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
	 Joe Gregorio
					Joe Gregorio