]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Replace urllib and urllib2 with six.moves.urllib
authorVictor Stinner <vstinner@redhat.com>
Tue, 9 Jun 2015 13:37:02 +0000 (15:37 +0200)
committerVictor Stinner <vstinner@redhat.com>
Wed, 10 Jun 2015 16:52:26 +0000 (18:52 +0200)
The Python 2 urllib and urllib2 modules changed a lot in Python 3. On
Python 3, the urllib functions are now grouped into submodules of
urllib: urllib.parse, urllib.error, etc. The urllib2 has been removed.
Replace urllib and urllib2 with six.moves.urllib to make the Cinder code
compatible with Python 2 and Python 3.

The new code now looks like Python 3 code (ex: "urllib.parse.urlsplit"),
but it also works on Python 2.

Replace also "import six.moves.urllib.parse as urlparse" with "from
six.moves import urllib" to uniformize the code:
"urlparse.urlsplit(href)" becomes "urllib.parse.urlsplit(href)".

This patch was generated by the urllib operation of the sixer tool version 0.4:
https://pypi.python.org/pypi/sixer

Manual changes:

* Add a try/except ImportError to get the parse_http_list function
  in cinder/api/urlmap.py
* Import the socket module instead of using urllib2.socket
  in cinder/volume/drivers/huawei/rest_common.py
* test_nimble.py: replace NIMBLE_URLLIB2 value with
  'six.moves.urllib.request'
* Remove "from six.moves.urllib import parse as urlparse", it was
  replaced with urllib.parse from six.moves.
* Reformat to respect the 80 columns constraint

Change-Id: Ibd1e7bc83bbbd93a3634207fb277d25ef1b8a086

24 files changed:
cinder/api/common.py
cinder/api/urlmap.py
cinder/image/glance.py
cinder/openstack/common/policy.py
cinder/tests/unit/api/v2/test_volumes.py
cinder/tests/unit/integrated/api/client.py
cinder/tests/unit/test_netapp_eseries_iscsi.py
cinder/tests/unit/test_nimble.py
cinder/tests/unit/test_wsgi.py
cinder/volume/drivers/cloudbyte/cloudbyte.py
cinder/volume/drivers/emc/emc_vmax_https.py
cinder/volume/drivers/emc/xtremio.py
cinder/volume/drivers/huawei/rest_common.py
cinder/volume/drivers/netapp/dataontap/client/api.py
cinder/volume/drivers/netapp/dataontap/nfs_base.py
cinder/volume/drivers/netapp/eseries/client.py
cinder/volume/drivers/nimble.py
cinder/volume/drivers/rbd.py
cinder/volume/drivers/scality.py
cinder/volume/drivers/tintri.py
cinder/volume/drivers/vmware/volumeops.py
cinder/volume/drivers/xio.py
cinder/volume/drivers/zfssa/restclient.py
cinder/volume/drivers/zfssa/webdavclient.py

index 758df61bd364a2acdb77905ef569314624582b57..f3483f095f6aca819cdb6ceae5144c88a57a86ac 100644 (file)
 
 import os
 import re
-import urllib
 
 from oslo_config import cfg
 from oslo_log import log as logging
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 import webob
 
 from cinder.api.openstack import wsgi
@@ -225,7 +224,7 @@ def remove_version_from_href(href):
     Returns: 'http://www.cinder.com'
 
     """
-    parsed_url = urlparse.urlsplit(href)
+    parsed_url = urllib.parse.urlsplit(href)
     url_parts = parsed_url.path.split('/', 2)
 
     # NOTE: this should match vX.X or vX
@@ -242,7 +241,7 @@ def remove_version_from_href(href):
 
     parsed_url = list(parsed_url)
     parsed_url[2] = new_path
-    return urlparse.urlunsplit(parsed_url)
+    return urllib.parse.urlunsplit(parsed_url)
 
 
 class ViewBuilder(object):
@@ -265,7 +264,7 @@ class ViewBuilder(object):
         url = os.path.join(prefix,
                            request.environ["cinder.context"].project_id,
                            collection_name)
-        return "%s?%s" % (url, urllib.urlencode(params))
+        return "%s?%s" % (url, urllib.parse.urlencode(params))
 
     def _get_href_link(self, request, identifier):
         """Return an href string pointing to this object."""
@@ -350,12 +349,12 @@ class ViewBuilder(object):
     def _update_link_prefix(self, orig_url, prefix):
         if not prefix:
             return orig_url
-        url_parts = list(urlparse.urlsplit(orig_url))
-        prefix_parts = list(urlparse.urlsplit(prefix))
+        url_parts = list(urllib.parse.urlsplit(orig_url))
+        prefix_parts = list(urllib.parse.urlsplit(prefix))
         url_parts[0:2] = prefix_parts[0:2]
         url_parts[2] = prefix_parts[2] + url_parts[2]
 
-        return urlparse.urlunsplit(url_parts).rstrip('/')
+        return urllib.parse.urlunsplit(url_parts).rstrip('/')
 
 
 class MetadataDeserializer(wsgi.MetadataXMLDeserializer):
index 7b7971767b3d37250e0682b3d0486c14c07d4558..0fdf41161217271a682c07ed3ea07f9168668e6a 100644 (file)
 #    under the License.
 
 import re
-import urllib2
 
 from oslo_log import log as logging
 import paste.urlmap
+try:
+    from urllib.request import parse_http_list   # pylint: disable=E0611
+except ImportError:
+    from urllib2 import parse_http_list   # Python 2
 
 from cinder.api.openstack import wsgi
 
@@ -64,7 +67,7 @@ def parse_list_header(value):
     :return: :class:`list`
     """
     result = []
-    for item in urllib2.parse_http_list(value):
+    for item in parse_http_list(value):
         if item[:1] == item[-1:] == '"':
             item = unquote_header_value(item[1:-1])
         result.append(item)
index ecc3314c6f75d4e5a96ff5d06f2ac74cfde905c7..42de65d77e34aa5fc792d4126457e39e077fd956 100644 (file)
@@ -31,7 +31,7 @@ from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_serialization import jsonutils
 from oslo_utils import timeutils
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _LE, _LW
@@ -67,7 +67,7 @@ def _parse_image_ref(image_href):
     :raises ValueError
 
     """
-    url = urlparse.urlparse(image_href)
+    url = urllib.parse.urlparse(image_href)
     netloc = url.netloc
     image_id = url.path.split('/')[-1]
     use_ssl = (url.scheme == 'https')
@@ -106,7 +106,7 @@ def get_api_servers():
     for api_server in CONF.glance_api_servers:
         if '//' not in api_server:
             api_server = 'http://' + api_server
-        url = urlparse.urlparse(api_server)
+        url = urllib.parse.urlparse(api_server)
         netloc = url.netloc
         use_ssl = (url.scheme == 'https')
         api_servers.append((netloc, use_ssl))
@@ -273,7 +273,7 @@ class GlanceImageService(object):
             for url in urls:
                 if url is None:
                     continue
-                parsed_url = urlparse.urlparse(url)
+                parsed_url = urllib.parse.urlparse(url)
                 if parsed_url.scheme == "file":
                     # a system call to cp could have significant performance
                     # advantages, however we do not have the path to files at
index 871e7c226ed2e871f65a503bc1e6552814be6a8c..47517fa4f12597aa54c9467ba902887893ec5101 100644 (file)
@@ -98,7 +98,7 @@ import re
 from oslo_config import cfg
 from oslo_serialization import jsonutils
 import six
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 import six.moves.urllib.request as urlrequest
 
 from cinder.openstack.common import fileutils
@@ -924,7 +924,7 @@ class HttpCheck(Check):
 
         data = {'target': jsonutils.dumps(temp_target),
                 'credentials': jsonutils.dumps(creds)}
-        post_data = urlparse.urlencode(data)
+        post_data = urllib.parse.urlencode(data)
         f = urlrequest.urlopen(url, post_data)
         return f.read() == "True"
 
index 8f7cfc48d1368d0fb152a8a330e6220963b305ef..941300667c7eaf0d8911bc5502b3305184685f3f 100644 (file)
@@ -21,7 +21,7 @@ import mock
 from oslo_config import cfg
 from oslo_utils import timeutils
 import six
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 import webob
 
 from cinder.api import extensions
@@ -932,9 +932,9 @@ class VolumeApiTest(test.TestCase):
         # need to manually insert the limit and sort information.
         links = res_dict['volumes_links']
         self.assertEqual(links[0]['rel'], 'next')
-        href_parts = urlparse.urlparse(links[0]['href'])
+        href_parts = urllib.parse.urlparse(links[0]['href'])
         self.assertEqual('/v2/fakeproject/volumes', href_parts.path)
-        params = urlparse.parse_qs(href_parts.query)
+        params = urllib.parse.parse_qs(href_parts.query)
         self.assertEqual(str(volumes[0]['id']), params['marker'][0])
         self.assertEqual('1', params['limit'][0])
         self.assertEqual('foo', params['name'][0])
@@ -1025,9 +1025,9 @@ class VolumeApiTest(test.TestCase):
         # Ensure that the next link is correctly formatted
         links = res_dict['volumes_links']
         self.assertEqual(links[0]['rel'], 'next')
-        href_parts = urlparse.urlparse(links[0]['href'])
+        href_parts = urllib.parse.urlparse(links[0]['href'])
         self.assertEqual('/v2/fakeproject/volumes/detail', href_parts.path)
-        params = urlparse.parse_qs(href_parts.query)
+        params = urllib.parse.parse_qs(href_parts.query)
         self.assertTrue('marker' in params)
         self.assertEqual('1', params['limit'][0])
 
@@ -1105,7 +1105,7 @@ class VolumeApiTest(test.TestCase):
         def _verify_links(links, url_key):
             '''Verify next link and url.'''
             self.assertEqual(links[0]['rel'], 'next')
-            href_parts = urlparse.urlparse(links[0]['href'])
+            href_parts = urllib.parse.urlparse(links[0]['href'])
             self.assertEqual('/v2/fakeproject/%s' % key, href_parts.path)
 
         # Verify both the index and detail queries
index 4ed2b9570c6d16595a8d59b529c97a1ae7040a35..3010a0bce1f64d748a2f3fb4998b4eda24b97379 100644 (file)
@@ -16,7 +16,7 @@ from oslo_log import log as logging
 from oslo_serialization import jsonutils
 from oslo_utils import netutils
 import requests
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 
 from cinder.i18n import _, _LI
 
@@ -83,7 +83,7 @@ class TestOpenStackClient(object):
         _headers = {'Content-Type': 'application/json'}
         _headers.update(headers or {})
 
-        parsed_url = urlparse.urlparse(url)
+        parsed_url = urllib.parse.urlparse(url)
         port = parsed_url.port
         hostname = parsed_url.hostname
         scheme = parsed_url.scheme
index a1ebf45c8126d53cf362f54b25e94a1d335ced0c..4c55077dcf3f10dddc27fe49a15267349069b706 100644 (file)
@@ -25,7 +25,7 @@ import re
 import mock
 from oslo_log import log as logging
 import requests
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 
 from cinder import exception
 from cinder import test
@@ -877,7 +877,7 @@ class NetAppEseriesISCSIDriverTestCase(test.TestCase):
         driver = common.NetAppDriver(configuration=configuration)
         driver._check_mode_get_or_register_storage_system = mock.Mock()
         driver.do_setup(context='context')
-        url = urlparse.urlparse(driver._client._endpoint)
+        url = urllib.parse.urlparse(driver._client._endpoint)
         port = url.port
         scheme = url.scheme
         self.assertEqual(8080, port)
@@ -889,7 +889,7 @@ class NetAppEseriesISCSIDriverTestCase(test.TestCase):
         driver = common.NetAppDriver(configuration=configuration)
         driver._check_mode_get_or_register_storage_system = mock.Mock()
         driver.do_setup(context='context')
-        url = urlparse.urlparse(driver._client._endpoint)
+        url = urllib.parse.urlparse(driver._client._endpoint)
         port = url.port
         scheme = url.scheme
         self.assertEqual(8080, port)
@@ -901,7 +901,7 @@ class NetAppEseriesISCSIDriverTestCase(test.TestCase):
         driver = common.NetAppDriver(configuration=configuration)
         driver._check_mode_get_or_register_storage_system = mock.Mock()
         driver.do_setup(context='context')
-        url = urlparse.urlparse(driver._client._endpoint)
+        url = urllib.parse.urlparse(driver._client._endpoint)
         port = url.port
         scheme = url.scheme
         self.assertEqual(8443, port)
@@ -913,7 +913,7 @@ class NetAppEseriesISCSIDriverTestCase(test.TestCase):
         driver = common.NetAppDriver(configuration=configuration)
         driver._check_mode_get_or_register_storage_system = mock.Mock()
         driver.do_setup(context='context')
-        url = urlparse.urlparse(driver._client._endpoint)
+        url = urllib.parse.urlparse(driver._client._endpoint)
         port = url.port
         scheme = url.scheme
         self.assertEqual(81, port)
@@ -926,7 +926,7 @@ class NetAppEseriesISCSIDriverTestCase(test.TestCase):
         driver = common.NetAppDriver(configuration=configuration)
         driver._check_mode_get_or_register_storage_system = mock.Mock()
         driver.do_setup(context='context')
-        url = urlparse.urlparse(driver._client._endpoint)
+        url = urllib.parse.urlparse(driver._client._endpoint)
         port = url.port
         scheme = url.scheme
         self.assertEqual(446, port)
index ba3592337fd7adef487dbc35d64d769c6afeb36e..e229a6e208811ab5e3a2c07d60735c7269deb297 100644 (file)
@@ -24,7 +24,7 @@ from cinder.volume.drivers import nimble
 
 CONF = cfg.CONF
 NIMBLE_CLIENT = 'cinder.volume.drivers.nimble.client'
-NIMBLE_URLLIB2 = 'cinder.volume.drivers.nimble.urllib2'
+NIMBLE_URLLIB2 = 'six.moves.urllib.request'
 NIMBLE_RANDOM = 'cinder.volume.drivers.nimble.random'
 LOG = logging.getLogger(__name__)
 
index a304abdcfd5f3b5140bb8fba066d7a38bfe198ad..c72dac28285a3a757894698b9f3d1e33ecb0b110 100644 (file)
@@ -22,11 +22,11 @@ import socket
 import ssl
 import tempfile
 import time
-import urllib2
 
 import mock
 from oslo_config import cfg
 from oslo_i18n import fixture as i18n_fixture
+from six.moves import urllib
 import testtools
 import webob
 import webob.dec
@@ -48,12 +48,13 @@ def open_no_proxy(*args, **kwargs):
     # introduced in python 2.7.9 under PEP-0476
     # https://github.com/python/peps/blob/master/pep-0476.txt
     if hasattr(ssl, "_create_unverified_context"):
-        opener = urllib2.build_opener(
-            urllib2.ProxyHandler({}),
-            urllib2.HTTPSHandler(context=ssl._create_unverified_context())
+        context = ssl._create_unverified_context()
+        opener = urllib.request.build_opener(
+            urllib.request.ProxyHandler({}),
+            urllib.request.HTTPSHandler(context=context)
         )
     else:
-        opener = urllib2.build_opener(urllib2.ProxyHandler({}))
+        opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
     return opener.open(*args, **kwargs)
 
 
index 7bd5f79e0fdc74b8f7183337d31736f79895d108..310e91b36b54f482af0a79960839b585a219088a 100644 (file)
 
 import httplib
 import json
-import urllib
 import uuid
 
 from oslo_log import log as logging
 from oslo_utils import units
 import six
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _, _LE, _LI
@@ -69,7 +69,7 @@ class CloudByteISCSIDriver(san.SanISCSIDriver):
             if value is not None:
                 sanitized_params[key] = six.text_type(value)
 
-        sanitized_params = urllib.urlencode(sanitized_params)
+        sanitized_params = urllib.parse.urlencode(sanitized_params)
         url = ('/client/api?%s' % sanitized_params)
 
         LOG.debug("CloudByte URL to be executed: [%s].", url)
@@ -77,7 +77,7 @@ class CloudByteISCSIDriver(san.SanISCSIDriver):
         # Add the apikey
         api = {}
         api['apiKey'] = apikey
-        url = url + '&' + urllib.urlencode(api)
+        url = url + '&' + urllib.parse.urlencode(api)
 
         return url
 
index ea08ebfc003d140b20950d4ace58488415fb82d3..309ca2670265eb1e9fd70e74dd321f37d7ffd61a 100644 (file)
@@ -20,12 +20,12 @@ import socket
 import ssl
 import string
 import struct
-import urllib
 
 from eventlet import patcher
 import OpenSSL
 from oslo_log import log as logging
 import six
+from six.moves import urllib
 
 from cinder.i18n import _, _LI
 
@@ -312,7 +312,7 @@ def wbem_request(url, data, creds, headers=None, debug=0, x509=None,
             if isinstance(hdr, unicode):
                 hdr = hdr.encode('utf-8')
             s = map(lambda x: string.strip(x), string.split(hdr, ":", 1))
-            h.putheader(urllib.quote(s[0]), urllib.quote(s[1]))
+            h.putheader(urllib.parse.quote(s[0]), urllib.parse.quote(s[1]))
 
         try:
             h.endheaders()
index 38f4462ef46163707bbb04268be4a9736c78350b..4a7d7be5596d6641d47792b19963813a3f25227c 100644 (file)
@@ -29,13 +29,12 @@ import json
 import math
 import random
 import string
-import urllib
-import urllib2
 
 from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_utils import units
 import six
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _, _LE, _LI, _LW
@@ -78,19 +77,18 @@ class XtremIOClient(object):
         if request_typ in ('GET', 'DELETE'):
             data.update(url_data)
             self.update_url(data, self.cluster_id)
-            url = '%(url)s?%(query)s' % {'query': urllib.urlencode(data,
-                                                                   doseq=True),
-                                         'url': url}
-            request = urllib2.Request(url)
+            query = urllib.parse.urlencode(data, doseq=True)
+            url = '%(url)s?%(query)s' % {'query': query, 'url': url}
+            request = urllib.request.Request(url)
         else:
             if url_data:
                 url = ('%(url)s?%(query)s' %
-                       {'query': urllib.urlencode(url_data, doseq=True),
+                       {'query': urllib.parse.urlencode(url_data, doseq=True),
                         'url': url})
 
             self.update_data(data, self.cluster_id)
             LOG.debug('data: %s', data)
-            request = urllib2.Request(url, json.dumps(data))
+            request = urllib.request.Request(url, json.dumps(data))
             LOG.debug('%(type)s %(url)s', {'type': request_typ, 'url': url})
 
         def get_request_type():
@@ -101,8 +99,8 @@ class XtremIOClient(object):
 
     def _send_request(self, object_type, key, request):
         try:
-            response = urllib2.urlopen(request)
-        except (urllib2.HTTPError, ) as exc:
+            response = urllib.request.urlopen(request)
+        except (urllib.error.HTTPError, ) as exc:
             if exc.code == 400 and hasattr(exc, 'read'):
                 error = json.load(exc)
                 err_msg = error['message']
index c12ee22499767305092c2b3fa8c2012409f30e28..6b34823448deae18dd0f79867702ecf243baf21d 100644 (file)
@@ -17,8 +17,8 @@
 import base64
 import cookielib
 import json
+import socket
 import time
-import urllib2
 import uuid
 from xml.etree import ElementTree as ET
 
@@ -26,6 +26,7 @@ from oslo_log import log as logging
 from oslo_utils import excutils
 from oslo_utils import units
 import six
+from six.moves import urllib
 
 from cinder import context
 from cinder import exception
@@ -65,15 +66,16 @@ class RestCommon(object):
         Convert response into Python Object and return it.
         """
 
-        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))
-        urllib2.install_opener(opener)
+        handler = urllib.request.HTTPCookieProcessor(self.cookie)
+        opener = urllib.request.build_opener(handler)
+        urllib.request.install_opener(opener)
 
         try:
-            urllib2.socket.setdefaulttimeout(720)
-            req = urllib2.Request(url, data, self.headers)
+            socket.setdefaulttimeout(720)
+            req = urllib.request.Request(url, data, self.headers)
             if method:
                 req.get_method = lambda: method
-            res = urllib2.urlopen(req).read().decode("utf-8")
+            res = urllib.request.urlopen(req).read().decode("utf-8")
 
             if "xx/sessions" not in url:
                 LOG.info(_LI('\n\n\n\nRequest URL: %(url)s\n\n'
index f86caddfce6d297c7209fe783b7a18c6a164b1d5..7391f8a601169089d8ca6f63f96cac9beebdfb95 100644 (file)
@@ -21,11 +21,11 @@ Contains classes required to issue API calls to Data ONTAP and OnCommand DFM.
 """
 
 import copy
-import urllib2
 
 from lxml import etree
 from oslo_log import log as logging
 import six
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _
@@ -206,7 +206,7 @@ class NaServer(object):
                 response = self._opener.open(request, timeout=self._timeout)
             else:
                 response = self._opener.open(request)
-        except urllib2.HTTPError as e:
+        except urllib.error.HTTPError as e:
             raise NaApiError(e.code, e.msg)
         except Exception as e:
             raise NaApiError('Unexpected error', e)
@@ -245,7 +245,7 @@ class NaServer(object):
             self._enable_tunnel_request(netapp_elem)
         netapp_elem.add_child_elem(na_element)
         request_d = netapp_elem.to_string()
-        request = urllib2.Request(
+        request = urllib.request.Request(
             self._get_url(), data=request_d,
             headers={'Content-Type': 'text/xml', 'charset': 'utf-8'})
         return request
@@ -292,14 +292,14 @@ class NaServer(object):
             auth_handler = self._create_basic_auth_handler()
         else:
             auth_handler = self._create_certificate_auth_handler()
-        opener = urllib2.build_opener(auth_handler)
+        opener = urllib.request.build_opener(auth_handler)
         self._opener = opener
 
     def _create_basic_auth_handler(self):
-        password_man = urllib2.HTTPPasswordMgrWithDefaultRealm()
+        password_man = urllib.request.HTTPPasswordMgrWithDefaultRealm()
         password_man.add_password(None, self._get_url(), self._username,
                                   self._password)
-        auth_handler = urllib2.HTTPBasicAuthHandler(password_man)
+        auth_handler = urllib.request.HTTPBasicAuthHandler(password_man)
         return auth_handler
 
     def _create_certificate_auth_handler(self):
index 375118192830417ffb97768cf7e10c8887f012a7..51debdae16eb485b0cf9c4b47e5d858c46cfcd4a 100644 (file)
@@ -33,7 +33,7 @@ from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_utils import units
 import six
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _, _LE, _LI, _LW
@@ -675,7 +675,7 @@ class NetAppNfsDriver(nfs.NfsDriver):
         mount_point = location['metadata'].get('mount_point')
         if not share_location or not mount_point:
             return url
-        url_parse = urlparse.urlparse(url)
+        url_parse = urllib.parse.urlparse(url)
         abs_path = os.path.join(url_parse.netloc, url_parse.path)
         rel_path = os.path.relpath(abs_path, mount_point)
         direct_url = "%s/%s" % (share_location, rel_path)
index 87812df5ea19db842b6d072ab073f0f4a338c164..036d48434e98c90d6cad9344b3f0d82ddc8f7430 100644 (file)
@@ -23,7 +23,7 @@ import json
 
 from oslo_log import log as logging
 import requests
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _, _LE
@@ -56,8 +56,8 @@ class WebserviceClient(object):
     def _create_endpoint(self, scheme, host, port, service_path):
         """Creates end point url for the service."""
         netloc = '%s:%s' % (host, port)
-        self._endpoint = urlparse.urlunparse((scheme, netloc, service_path,
-                                              None, None, None))
+        self._endpoint = urllib.parse.urlunparse((scheme, netloc, service_path,
+                                                 None, None, None))
 
     def _init_connection(self):
         """Do client specific set up for session and connection pooling."""
@@ -116,7 +116,7 @@ class RestClient(WebserviceClient):
         path = path.format(**kwargs)
         if not self._endpoint.endswith('/'):
             self._endpoint = '%s/' % self._endpoint
-        return urlparse.urljoin(self._endpoint, path.lstrip('/'))
+        return urllib.parse.urljoin(self._endpoint, path.lstrip('/'))
 
     def _invoke(self, method, path, data=None, use_system=True,
                 timeout=None, verify=False, **kwargs):
index d97ccaf0f601183b6fae3b459a5c57d40053282c..99ff7b5c1eec40f5a4e92ec9db8f81dbcd8905fb 100644 (file)
@@ -23,11 +23,11 @@ import random
 import re
 import six
 import string
-import urllib2
 
 from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_utils import units
+from six.moves import urllib
 from suds import client
 
 from cinder import exception
@@ -425,7 +425,7 @@ class NimbleAPIExecutor(object):
         self.login()
 
     def _create_err_code_to_str_mapper(self, wsdl_url):
-        f = urllib2.urlopen(wsdl_url)
+        f = urllib.request.urlopen(wsdl_url)
         wsdl_file = f.read()
         err_enums = re.findall(
             r'<simpleType name="SmErrorType">(.*?)</simpleType>',
index 8461607f6c2109592a555e2bc742be7d4ccdf318..7e012113f4aa150a00646446552870c3fd221ea9 100644 (file)
@@ -19,7 +19,6 @@ import json
 import math
 import os
 import tempfile
-import urllib
 
 from eventlet import tpool
 from oslo_config import cfg
@@ -27,6 +26,7 @@ from oslo_log import log as logging
 from oslo_utils import encodeutils
 from oslo_utils import units
 import six
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _, _LE, _LI, _LW
@@ -795,7 +795,7 @@ class RBDDriver(driver.RetypeVD, driver.TransferVD, driver.ExtendVD,
         if not location.startswith(prefix):
             reason = _('Not stored in rbd')
             raise exception.ImageUnacceptable(image_id=location, reason=reason)
-        pieces = map(urllib.unquote, location[len(prefix):].split('/'))
+        pieces = map(urllib.parse.unquote, location[len(prefix):].split('/'))
         if any(map(lambda p: p == '', pieces)):
             reason = _('Blank components')
             raise exception.ImageUnacceptable(image_id=location, reason=reason)
index d4edc0ea4baeeee6b91de3435c0208830d30edd4..0eec3247e51d6682be992787b8b039212a53383f 100644 (file)
@@ -18,13 +18,12 @@ Scality SOFS Volume Driver.
 
 
 import os
-import urllib2
 
 from oslo_concurrency import lockutils
 from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_utils import units
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _, _LI
@@ -76,12 +75,12 @@ class ScalityDriver(driver.VolumeDriver):
             raise exception.VolumeBackendAPIException(data=msg)
 
         # config can be a file path or a URL, check it
-        if urlparse.urlparse(config).scheme == '':
+        if urllib.parse.urlparse(config).scheme == '':
             # turn local path into URL
             config = 'file://%s' % config
         try:
-            urllib2.urlopen(config, timeout=5).close()
-        except urllib2.URLError as e:
+            urllib.request.urlopen(config, timeout=5).close()
+        except urllib.error.URLError as e:
             msg = _("Cannot access 'scality_sofs_config': %s") % e
             LOG.warning(msg)
             raise exception.VolumeBackendAPIException(data=msg)
index df31e063609b2848cef23b54c8e37a406dc2b7d1..b3566601e58712911903904b82f695595ff6d132 100644 (file)
@@ -26,7 +26,7 @@ from oslo_config import cfg
 from oslo_log import log as logging
 from oslo_utils import units
 import requests
-import six.moves.urllib.parse as urlparse
+from six.moves import urllib
 
 from cinder import exception
 from cinder import utils
@@ -550,7 +550,7 @@ class TintriDriver(nfs.NfsDriver):
         mount_point = location['metadata'].get('mount_point')
         if not share_location or not mount_point:
             return url
-        url_parse = urlparse.urlparse(url)
+        url_parse = urllib.parse.urlparse(url)
         abs_path = os.path.join(url_parse.netloc, url_parse.path)
         rel_path = os.path.relpath(abs_path, mount_point)
         direct_url = "%s/%s" % (share_location, rel_path)
index a99566fb7424fb3ee1ef94a172ea48e2d2bfada1..a54d6ca1e13ad0dddee1a74f2ef46104c37b1066 100644 (file)
 Implements operations on volumes residing on VMware datastores.
 """
 
-import urllib
 
 from oslo_log import log as logging
 from oslo_utils import units
 from oslo_vmware import exceptions
 from oslo_vmware import vim_util
+from six.moves import urllib
 
 from cinder.i18n import _, _LE, _LI
 from cinder.volume.drivers.vmware import exceptions as vmdk_exceptions
@@ -528,8 +528,9 @@ class VMwareVolumeOps(object):
                 if child_entity._type != 'Folder':
                     continue
                 child_entity_name = self.get_entity_name(child_entity)
-                if child_entity_name and (urllib.unquote(child_entity_name) ==
-                                          child_folder_name):
+                if (child_entity_name
+                    and (urllib.parse.unquote(child_entity_name)
+                         == child_folder_name)):
                     LOG.debug("Child folder: %s exists.", child_folder_name)
                     return child_entity
 
index 9023c9da273521279f5d0128ad1265afacf84697..32a80998d7d4aa06e92a954ecd9211b20203fb7d 100644 (file)
 
 import base64
 import string
-import urllib2
 
 from lxml import etree
 from oslo_config import cfg
 from oslo_log import log as logging
+from six.moves import urllib
 
 from cinder import context
 from cinder import exception
@@ -238,17 +238,17 @@ class XIOISEDriver(object):
         response['content'] = ''
         response['location'] = ''
         # send the request
-        req = urllib2.Request(url, body, header)
+        req = urllib.request.Request(url, body, header)
         # Override method to allow GET, PUT, POST, DELETE
         req.get_method = lambda: method
         try:
-            resp = urllib2.urlopen(req)
-        except urllib2.HTTPError as err:
+            resp = urllib.request.urlopen(req)
+        except urllib.error.HTTPError as err:
             # HTTP error. Return HTTP status and content and let caller
             # handle retries.
             response['status'] = err.code
             response['content'] = err.read()
-        except urllib2.URLError as err:
+        except urllib.error.URLError as err:
             # Connection failure.  Return a status of 0 to indicate error.
             response['status'] = 0
         else:
index f8cb6ecd764e12c1dd8df7cf477b2d9a39380b98..41eb6c264d8898f90040316e70d65a5a1ef2fe56 100644 (file)
@@ -19,9 +19,9 @@ import httplib
 import json
 import StringIO
 import time
-import urllib2
 
 from oslo_log import log
+from six.moves import urllib
 
 from cinder.i18n import _LE, _LI
 
@@ -129,7 +129,7 @@ class RestClientError(Exception):
 
 
 class RestClientURL(object):
-    """ZFSSA urllib2 client"""
+    """ZFSSA urllib client"""
     def __init__(self, url, **kwargs):
         """Initialize a REST client.
 
@@ -262,7 +262,7 @@ class RestClientURL(object):
             out_hdrs['content-length'] = len(body)
 
         zfssaurl = self._path(path, kwargs.get("base_path"))
-        req = urllib2.Request(zfssaurl, body, out_hdrs)
+        req = urllib.request.Request(zfssaurl, body, out_hdrs)
         req.get_method = lambda: request
         maxreqretries = kwargs.get("maxreqretries", 10)
         retry = 0
@@ -275,8 +275,8 @@ class RestClientURL(object):
 
         while retry < maxreqretries:
             try:
-                response = urllib2.urlopen(req, timeout=self.timeout)
-            except urllib2.HTTPError as err:
+                response = urllib.request.urlopen(req, timeout=self.timeout)
+            except urllib.error.HTTPError as err:
                 if err.code == httplib.NOT_FOUND:
                     LOG.debug('REST Not Found: %s', err.code)
                 else:
@@ -306,7 +306,7 @@ class RestClientURL(object):
 
                 return RestResult(err=err)
 
-            except urllib2.URLError as err:
+            except urllib.error.URLError as err:
                 LOG.error(_LE('URLError: %s'), err.reason)
                 raise RestClientError(-1, name="ERR_URLError",
                                       message=err.reason)
index 80431485f57c040418ef01da08234f3dbab75aa2..f8ec06dcfe89d0580119a55397e639723d9b721b 100644 (file)
@@ -17,9 +17,9 @@ ZFS Storage Appliance WebDAV Client
 
 import httplib
 import time
-import urllib2
 
 from oslo_log import log
+from six.moves import urllib
 
 from cinder import exception
 from cinder.i18n import _, _LE
@@ -72,7 +72,7 @@ class ZFSSAWebDAVClient(object):
         retry = 0
         src_url = self.https_path + "/" + src_file
         dst_url = self.https_path + "/" + dst_file
-        request = urllib2.Request(src_url)
+        request = urllib.request.Request(src_url)
 
         if dst_file != "":
             request.add_header('Destination', dst_url)
@@ -86,8 +86,8 @@ class ZFSSAWebDAVClient(object):
 
         while retry < maxretries:
             try:
-                response = urllib2.urlopen(request, timeout=None)
-            except urllib2.HTTPError as err:
+                response = urllib.request.urlopen(request, timeout=None)
+            except urllib.error.HTTPError as err:
                 LOG.error(_LE('WebDAV returned with %(code)s error during '
                               '%(method)s call.'),
                           {'code': err.code, 'method': method})
@@ -116,7 +116,7 @@ class ZFSSAWebDAVClient(object):
                                                   src=src_file, dst=dst_file,
                                                   method=method)
 
-            except urllib2.URLError as err:
+            except urllib.error.URLError as err:
                 reason = ''
                 if getattr(err, 'reason'):
                     reason = err.reason