From 5feb413f7698633c6a598ec2899772269a96b690 Mon Sep 17 00:00:00 2001 From: William Wolf Date: Mon, 19 Sep 2011 11:26:14 -0400 Subject: make our own function instead of using urllib.urlencode since we apparently don't suppor urlencoded strings yet --- nova/api/openstack/common.py | 10 ++++++++++ nova/api/openstack/views/servers.py | 2 +- nova/tests/api/openstack/test_servers.py | 6 +++--- 3 files changed, 14 insertions(+), 4 deletions(-) (limited to 'nova') diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py index ca7848678..64d7dded1 100644 --- a/nova/api/openstack/common.py +++ b/nova/api/openstack/common.py @@ -259,6 +259,16 @@ def check_img_metadata_quota_limit(context, metadata): headers={'Retry-After': 0}) +def dict_to_query_str(params): + # TODO: we should just use urllib.urlencode instead of this + # But currently we don't work with urlencoded url's + param_str = "" + for key, val in params.iteritems(): + param_str = param_str + '='.join([str(key), str(val)]) + '&' + + return param_str.rstrip('&') + + class MetadataXMLDeserializer(wsgi.XMLDeserializer): def extract_metadata(self, metadata_node): diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py index 0037fd64e..49e7b6645 100644 --- a/nova/api/openstack/views/servers.py +++ b/nova/api/openstack/views/servers.py @@ -237,7 +237,7 @@ class ViewBuilderV11(ViewBuilder): def generate_next_link(self, server_id, params, is_detail=False): """ Return an href string with proper limit and marker params""" params['marker'] = server_id - return "%s?%s" % (self.base_url, urllib.urlencode(params)) + return "%s?%s" % (self.base_url, common.dict_to_query_str(params)) def generate_href(self, server_id): """Create an url that refers to a specific server id.""" diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py index bf8bbb2b8..160335d80 100644 --- a/nova/tests/api/openstack/test_servers.py +++ b/nova/tests/api/openstack/test_servers.py @@ -1188,7 +1188,7 @@ class ServersTest(test.TestCase): self.assertTrue('limit' in res.body) def test_get_server_details_with_limit_and_other_params_v1_1(self): - req = webob.Request.blank('/v1.1/fake/servers/detail?limit=3&blah=2') + req = webob.Request.blank('/v1.1/fake/servers/detail?limit=3&blah=2:t') res = req.get_response(fakes.wsgi_app()) servers = json.loads(res.body)['servers'] servers_links = json.loads(res.body)['servers_links'] @@ -1197,8 +1197,8 @@ class ServersTest(test.TestCase): qs = urlparse.urlparse(servers_links[0]['href']).query params = urlparse.parse_qs(qs) - self.assertDictMatch({'limit': ['3'], 'blah': ['2'], 'marker': ['2']}, - params) + self.assertDictMatch({'limit': ['3'], 'blah': ['2:t'], + 'marker': ['2']}, params) req = webob.Request.blank('/v1.1/fake/servers/detail?limit=aaa') res = req.get_response(fakes.wsgi_app()) -- cgit