From d44e5986925d3129ca0d34599109ad2019295362 Mon Sep 17 00:00:00 2001
From: Eric Guo <eric.guo@easystack.cn>
Date: Fri, 14 Feb 2014 08:43:12 +0800
Subject: [PATCH] Remove usage of module py3kcompat

Module py3kcompat was removed from oslo-incubator. We need remove its
usage in client side firstly. This make us move smoothly when sync
oslo-incubator code.

Change-Id: I8b07c32c9852e747579a23685f3c8a07ac13ec01
Partial-Bug: #1280033
---
 novaclient/client.py                  | 7 ++++---
 novaclient/tests/v1_1/fakes.py        | 4 ++--
 novaclient/v1_1/contrib/migrations.py | 5 +++--
 novaclient/v1_1/flavors.py            | 5 +++--
 novaclient/v1_1/floating_ip_dns.py    | 7 ++++---
 novaclient/v1_1/hypervisors.py        | 5 +++--
 novaclient/v1_1/images.py             | 6 ++++--
 novaclient/v1_1/limits.py             | 5 +++--
 novaclient/v1_1/security_groups.py    | 4 ++--
 novaclient/v1_1/servers.py            | 4 ++--
 novaclient/v1_1/volumes.py            | 4 ++--
 novaclient/v3/hypervisors.py          | 5 +++--
 novaclient/v3/images.py               | 6 ++++--
 novaclient/v3/servers.py              | 4 ++--
 14 files changed, 41 insertions(+), 30 deletions(-)

diff --git a/novaclient/client.py b/novaclient/client.py
index 8ec471cf9..bab36301b 100644
--- a/novaclient/client.py
+++ b/novaclient/client.py
@@ -30,9 +30,10 @@ try:
 except ImportError:
     import simplejson as json
 
+from six.moves.urllib import parse
+
 from novaclient import exceptions
 from novaclient.openstack.common.gettextutils import _
-from novaclient.openstack.common.py3kcompat import urlutils
 from novaclient import service_catalog
 from novaclient import utils
 
@@ -325,7 +326,7 @@ class HTTPClient(object):
                                              extract_token=False)
 
     def authenticate(self):
-        magic_tuple = urlutils.urlsplit(self.auth_url)
+        magic_tuple = parse.urlsplit(self.auth_url)
         scheme, netloc, path, query, frag = magic_tuple
         port = magic_tuple.port
         if port is None:
@@ -343,7 +344,7 @@ class HTTPClient(object):
         # TODO(sandy): Assume admin endpoint is 35357 for now.
         # Ideally this is going to have to be provided by the service catalog.
         new_netloc = netloc.replace(':%d' % port, ':%d' % (35357,))
-        admin_url = urlutils.urlunsplit(
+        admin_url = parse.urlunsplit(
             (scheme, new_netloc, path, query, frag))
 
         auth_url = self.auth_url
diff --git a/novaclient/tests/v1_1/fakes.py b/novaclient/tests/v1_1/fakes.py
index 3604312b3..44330550d 100644
--- a/novaclient/tests/v1_1/fakes.py
+++ b/novaclient/tests/v1_1/fakes.py
@@ -17,10 +17,10 @@
 from datetime import datetime
 
 import six
+from six.moves.urllib import parse
 
 from novaclient import client as base_client
 from novaclient import exceptions
-from novaclient.openstack.common.py3kcompat import urlutils
 from novaclient.openstack.common import strutils
 from novaclient.tests import fakes
 from novaclient.tests import utils
@@ -64,7 +64,7 @@ class FakeHTTPClient(base_client.HTTPClient):
             assert 'body' in kwargs
 
         # Call the method
-        args = urlutils.parse_qsl(urlutils.urlparse(url)[4])
+        args = parse.parse_qsl(parse.urlparse(url)[4])
         kwargs.update(args)
         munged_url = url.rsplit('?', 1)[0]
         munged_url = munged_url.strip('/').replace('/', '_').replace('.', '_')
diff --git a/novaclient/v1_1/contrib/migrations.py b/novaclient/v1_1/contrib/migrations.py
index 507ebc9eb..16be844ab 100644
--- a/novaclient/v1_1/contrib/migrations.py
+++ b/novaclient/v1_1/contrib/migrations.py
@@ -14,9 +14,10 @@
 migration interface
 """
 
+from six.moves.urllib import parse
+
 from novaclient import base
 from novaclient.openstack.common.gettextutils import _
-from novaclient.openstack.common.py3kcompat import urlutils
 from novaclient import utils
 
 
@@ -47,7 +48,7 @@ class MigrationManager(base.ManagerWithFind):
         # order, then the encoded string will be consistent in Python 2&3.
         new_opts = sorted(opts.items(), key=lambda x: x[0])
 
-        query_string = "?%s" % urlutils.urlencode(new_opts) if new_opts else ""
+        query_string = "?%s" % parse.urlencode(new_opts) if new_opts else ""
 
         return self._list("/os-migrations%s" % query_string, "migrations")
 
diff --git a/novaclient/v1_1/flavors.py b/novaclient/v1_1/flavors.py
index 8aa875ff0..c47c47633 100644
--- a/novaclient/v1_1/flavors.py
+++ b/novaclient/v1_1/flavors.py
@@ -16,10 +16,11 @@
 Flavor interface.
 """
 
+from six.moves.urllib import parse
+
 from novaclient import base
 from novaclient import exceptions
 from novaclient.openstack.common.gettextutils import _
-from novaclient.openstack.common.py3kcompat import urlutils
 from novaclient.openstack.common import strutils
 from novaclient import utils
 
@@ -112,7 +113,7 @@ class FlavorManager(base.ManagerWithFind):
         # and flavors from their own projects only.
         if not is_public:
             qparams['is_public'] = is_public
-        query_string = "?%s" % urlutils.urlencode(qparams) if qparams else ""
+        query_string = "?%s" % parse.urlencode(qparams) if qparams else ""
 
         detail = ""
         if detailed:
diff --git a/novaclient/v1_1/floating_ip_dns.py b/novaclient/v1_1/floating_ip_dns.py
index a5dfcb8d9..449c7e11e 100644
--- a/novaclient/v1_1/floating_ip_dns.py
+++ b/novaclient/v1_1/floating_ip_dns.py
@@ -13,8 +13,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from six.moves.urllib import parse
+
 from novaclient import base
-from novaclient.openstack.common.py3kcompat import urlutils
 
 
 def _quote_domain(domain):
@@ -24,7 +25,7 @@ def _quote_domain(domain):
     but Routes tends to choke on them, so we need an extra level of
     by-hand quoting here.
     """
-    return urlutils.quote(domain.replace('.', '%2E'))
+    return parse.quote(domain.replace('.', '%2E'))
 
 
 class FloatingIPDNSDomain(base.Resource):
@@ -101,7 +102,7 @@ class FloatingIPDNSEntryManager(base.Manager):
     def get_for_ip(self, domain, ip):
         """Return a list of entries for the given domain and ip or name."""
         qparams = {'ip': ip}
-        params = "?%s" % urlutils.urlencode(qparams)
+        params = "?%s" % parse.urlencode(qparams)
 
         return self._list("/os-floating-ip-dns/%s/entries%s" %
                               (_quote_domain(domain), params),
diff --git a/novaclient/v1_1/hypervisors.py b/novaclient/v1_1/hypervisors.py
index fae04026a..4a4f2b93a 100644
--- a/novaclient/v1_1/hypervisors.py
+++ b/novaclient/v1_1/hypervisors.py
@@ -17,8 +17,9 @@
 Hypervisors interface (1.1 extension).
 """
 
+from six.moves.urllib import parse
+
 from novaclient import base
-from novaclient.openstack.common.py3kcompat import urlutils
 
 
 class Hypervisor(base.Resource):
@@ -48,7 +49,7 @@ class HypervisorManager(base.ManagerWithFind):
         """
         target = 'servers' if servers else 'search'
         url = ('/os-hypervisors/%s/%s' %
-               (urlutils.quote(hypervisor_match, safe=''), target))
+               (parse.quote(hypervisor_match, safe=''), target))
         return self._list(url, 'hypervisors')
 
     def get(self, hypervisor):
diff --git a/novaclient/v1_1/images.py b/novaclient/v1_1/images.py
index ba6820b64..f355b894f 100644
--- a/novaclient/v1_1/images.py
+++ b/novaclient/v1_1/images.py
@@ -15,8 +15,10 @@
 """
 Image interface.
 """
+
+from six.moves.urllib import parse
+
 from novaclient import base
-from novaclient.openstack.common.py3kcompat import urlutils
 
 
 class Image(base.Resource):
@@ -63,7 +65,7 @@ class ImageManager(base.ManagerWithFind):
             detail = '/detail'
         if limit:
             params['limit'] = int(limit)
-        query = '?%s' % urlutils.urlencode(params) if params else ''
+        query = '?%s' % parse.urlencode(params) if params else ''
         return self._list('/images%s%s' % (detail, query), 'images')
 
     def delete(self, image):
diff --git a/novaclient/v1_1/limits.py b/novaclient/v1_1/limits.py
index 4ea80a053..46d77def8 100644
--- a/novaclient/v1_1/limits.py
+++ b/novaclient/v1_1/limits.py
@@ -12,8 +12,9 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from six.moves.urllib import parse
+
 from novaclient import base
-from novaclient.openstack.common.py3kcompat import urlutils
 
 
 class Limits(base.Resource):
@@ -94,6 +95,6 @@ class LimitsManager(base.Manager):
             opts['reserved'] = 1
         if tenant_id:
             opts['tenant_id'] = tenant_id
-        query_string = "?%s" % urlutils.urlencode(opts) if opts else ""
+        query_string = "?%s" % parse.urlencode(opts) if opts else ""
 
         return self._get("/limits%s" % query_string, "limits")
diff --git a/novaclient/v1_1/security_groups.py b/novaclient/v1_1/security_groups.py
index 00e1b48f0..40d1e7ff7 100644
--- a/novaclient/v1_1/security_groups.py
+++ b/novaclient/v1_1/security_groups.py
@@ -18,9 +18,9 @@ Security group interface (1.1 extension).
 """
 
 import six
+from six.moves.urllib import parse
 
 from novaclient import base
-from novaclient.openstack.common.py3kcompat import urlutils
 
 
 class SecurityGroup(base.Resource):
@@ -90,7 +90,7 @@ class SecurityGroupManager(base.ManagerWithFind):
 
         qparams = dict((k, v) for (k, v) in six.iteritems(search_opts) if v)
 
-        query_string = '?%s' % urlutils.urlencode(qparams) if qparams else ''
+        query_string = '?%s' % parse.urlencode(qparams) if qparams else ''
 
         return self._list('/os-security-groups%s' % query_string,
                           'security_groups')
diff --git a/novaclient/v1_1/servers.py b/novaclient/v1_1/servers.py
index 0ae5d1663..cf284d94b 100644
--- a/novaclient/v1_1/servers.py
+++ b/novaclient/v1_1/servers.py
@@ -22,10 +22,10 @@ Server interface.
 import base64
 
 import six
+from six.moves.urllib import parse
 
 from novaclient import base
 from novaclient import crypto
-from novaclient.openstack.common.py3kcompat import urlutils
 from novaclient.openstack.common import strutils
 from novaclient.v1_1.security_groups import SecurityGroup
 
@@ -573,7 +573,7 @@ class ServerManager(base.BootingManagerWithFind):
         # order, then the encoded string will be consistent in Python 2&3.
         if qparams:
             new_qparams = sorted(qparams.items(), key=lambda x: x[0])
-            query_string = "?%s" % urlutils.urlencode(new_qparams)
+            query_string = "?%s" % parse.urlencode(new_qparams)
         else:
             query_string = ""
 
diff --git a/novaclient/v1_1/volumes.py b/novaclient/v1_1/volumes.py
index 1c4792015..77746dd30 100644
--- a/novaclient/v1_1/volumes.py
+++ b/novaclient/v1_1/volumes.py
@@ -18,9 +18,9 @@ Volume interface (1.1 extension).
 """
 
 import six
+from six.moves.urllib import parse
 
 from novaclient import base
-from novaclient.openstack.common.py3kcompat import urlutils
 
 
 class Volume(base.Resource):
@@ -89,7 +89,7 @@ class VolumeManager(base.ManagerWithFind):
 
         qparams = dict((k, v) for (k, v) in six.iteritems(search_opts) if v)
 
-        query_string = '?%s' % urlutils.urlencode(qparams) if qparams else ''
+        query_string = '?%s' % parse.urlencode(qparams) if qparams else ''
 
         if detailed is True:
             return self._list("/volumes/detail%s" % query_string, "volumes")
diff --git a/novaclient/v3/hypervisors.py b/novaclient/v3/hypervisors.py
index 0542895fb..b04a60080 100644
--- a/novaclient/v3/hypervisors.py
+++ b/novaclient/v3/hypervisors.py
@@ -17,7 +17,8 @@
 Hypervisors interface
 """
 
-from novaclient.openstack.common.py3kcompat import urlutils
+from six.moves.urllib import parse
+
 from novaclient.v1_1 import hypervisors
 
 
@@ -35,7 +36,7 @@ class HypervisorManager(hypervisors.HypervisorManager):
         :param servers: If True, server information is also retrieved.
         """
         url = ('/os-hypervisors/search?query=%s' %
-               urlutils.quote(hypervisor_match, safe=''))
+               parse.quote(hypervisor_match, safe=''))
         return self._list(url, 'hypervisors')
 
     def servers(self, hypervisor):
diff --git a/novaclient/v3/images.py b/novaclient/v3/images.py
index 2e1b34aa8..b78d9af55 100644
--- a/novaclient/v3/images.py
+++ b/novaclient/v3/images.py
@@ -16,8 +16,10 @@
 """
 Image interface.
 """
+
+from six.moves.urllib import parse
+
 from novaclient import base
-from novaclient.openstack.common.py3kcompat import urlutils
 from novaclient.openstack.common import strutils
 
 
@@ -100,5 +102,5 @@ class ImageManager(base.ManagerWithFind):
             detail = '/detail'
         if limit:
             params['limit'] = int(limit)
-        query = '?%s' % urlutils.urlencode(params) if params else ''
+        query = '?%s' % parse.urlencode(params) if params else ''
         return self._list('/v1/images%s%s' % (detail, query), 'images')
diff --git a/novaclient/v3/servers.py b/novaclient/v3/servers.py
index b097ffe65..d8ebd0a13 100644
--- a/novaclient/v3/servers.py
+++ b/novaclient/v3/servers.py
@@ -22,10 +22,10 @@ Server interface.
 import base64
 
 import six
+from six.moves.urllib import parse
 
 from novaclient import base
 from novaclient import crypto
-from novaclient.openstack.common.py3kcompat import urlutils
 from novaclient.openstack.common import strutils
 
 REBOOT_SOFT, REBOOT_HARD = 'SOFT', 'HARD'
@@ -507,7 +507,7 @@ class ServerManager(base.BootingManagerWithFind):
         # order, then the encoded string will be consistent in Python 2&3.
         if qparams:
             new_qparams = sorted(qparams.items(), key=lambda x: x[0])
-            query_string = "?%s" % urlutils.urlencode(new_qparams)
+            query_string = "?%s" % parse.urlencode(new_qparams)
         else:
             query_string = ""