Remove use of py3kcompat

Replace usage of py3kcompat.urlutils by six imports. py3kcompat has been
removed from oslo incubator so we should try to sync.

Change-Id: I252ff2b3a5284cee6e09e70a79b7dad550335f41
This commit is contained in:
Thomas Herve 2014-04-03 12:31:30 +02:00
parent edd0a23cef
commit 053d516ba6
12 changed files with 53 additions and 44 deletions

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from heat.openstack.common.py3kcompat import urlutils from six.moves.urllib import parse as urlparse
def get_collection_links(request, items): def get_collection_links(request, items):
@ -38,4 +38,4 @@ def _get_next_link(request, marker):
params = request.params.copy() params = request.params.copy()
params['marker'] = marker params['marker'] = marker
return "%s?%s" % (request.path_url, urlutils.urlencode(params)) return "%s?%s" % (request.path_url, urlparse.urlencode(params))

View File

@ -19,9 +19,10 @@
import functools import functools
import sys import sys
from six.moves.urllib import parse as urlparse
from heat.openstack.common.gettextutils import _ from heat.openstack.common.gettextutils import _
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
from heat.openstack.common.py3kcompat import urlutils
_FATAL_EXCEPTION_FORMAT_ERRORS = False _FATAL_EXCEPTION_FORMAT_ERRORS = False
@ -32,7 +33,7 @@ logger = logging.getLogger(__name__)
class RedirectException(Exception): class RedirectException(Exception):
def __init__(self, url): def __init__(self, url):
self.url = urlutils.urlparse(url) self.url = urlparse.urlparse(url)
class KeystoneError(Exception): class KeystoneError(Exception):

View File

@ -14,7 +14,8 @@
import collections import collections
import re import re
from heat.openstack.common.py3kcompat import urlutils from six.moves.urllib import parse as urlparse
from heat.openstack.common import strutils from heat.openstack.common import strutils
@ -61,10 +62,10 @@ class HeatIdentifier(collections.Mapping):
if fields[1] != 'openstack' or fields[2] != 'heat' or not path: if fields[1] != 'openstack' or fields[2] != 'heat' or not path:
raise ValueError(_('"%s" is not a valid Heat ARN') % arn) raise ValueError(_('"%s" is not a valid Heat ARN') % arn)
return cls(urlutils.unquote(fields[4]), return cls(urlparse.unquote(fields[4]),
urlutils.unquote(path.group(1)), urlparse.unquote(path.group(1)),
urlutils.unquote(path.group(2)), urlparse.unquote(path.group(2)),
urlutils.unquote(path.group(3))) urlparse.unquote(path.group(3)))
@classmethod @classmethod
def from_arn_url(cls, url): def from_arn_url(cls, url):
@ -73,7 +74,7 @@ class HeatIdentifier(collections.Mapping):
The URL is expected to contain a valid arn as part of the path The URL is expected to contain a valid arn as part of the path
''' '''
# Sanity check the URL # Sanity check the URL
urlp = urlutils.urlparse(url) urlp = urlparse.urlparse(url)
if (urlp.scheme not in ('http', 'https') or if (urlp.scheme not in ('http', 'https') or
not urlp.netloc or not urlp.path): not urlp.netloc or not urlp.path):
raise ValueError(_('"%s" is not a valid URL') % url) raise ValueError(_('"%s" is not a valid URL') % url)
@ -85,7 +86,7 @@ class HeatIdentifier(collections.Mapping):
raise ValueError(_('"%s" is not a valid ARN URL') % url) raise ValueError(_('"%s" is not a valid ARN URL') % url)
# the +1 is to skip the leading / # the +1 is to skip the leading /
url_arn = urlp.path[match.start() + 1:] url_arn = urlp.path[match.start() + 1:]
arn = urlutils.unquote(url_arn) arn = urlparse.unquote(url_arn)
return cls.from_arn(arn) return cls.from_arn(arn)
def arn(self): def arn(self):
@ -93,21 +94,21 @@ class HeatIdentifier(collections.Mapping):
Return an ARN of the form: Return an ARN of the form:
arn:openstack:heat::<tenant>:stacks/<stack_name>/<stack_id><path> arn:openstack:heat::<tenant>:stacks/<stack_name>/<stack_id><path>
''' '''
return 'arn:openstack:heat::%s:%s' % (urlutils.quote(self.tenant, ''), return 'arn:openstack:heat::%s:%s' % (urlparse.quote(self.tenant, ''),
self._tenant_path()) self._tenant_path())
def arn_url_path(self): def arn_url_path(self):
''' '''
Return an ARN quoted correctly for use in a URL Return an ARN quoted correctly for use in a URL
''' '''
return '/' + urlutils.quote(self.arn(), '') return '/' + urlparse.quote(self.arn(), '')
def url_path(self): def url_path(self):
''' '''
Return a URL-encoded path segment of a URL in the form: Return a URL-encoded path segment of a URL in the form:
<tenant>/stacks/<stack_name>/<stack_id><path> <tenant>/stacks/<stack_name>/<stack_id><path>
''' '''
return '/'.join((urlutils.quote(self.tenant, ''), self._tenant_path())) return '/'.join((urlparse.quote(self.tenant, ''), self._tenant_path()))
def _tenant_path(self): def _tenant_path(self):
''' '''
@ -116,7 +117,7 @@ class HeatIdentifier(collections.Mapping):
stacks/<stack_name>/<stack_id><path> stacks/<stack_name>/<stack_id><path>
''' '''
return 'stacks/%s%s' % (self.stack_path(), return 'stacks/%s%s' % (self.stack_path(),
urlutils.quote(strutils.safe_encode( urlparse.quote(strutils.safe_encode(
self.path))) self.path)))
def stack_path(self): def stack_path(self):
@ -125,8 +126,8 @@ class HeatIdentifier(collections.Mapping):
in the form: in the form:
<stack_name>/<stack_id> <stack_name>/<stack_id>
''' '''
return '%s/%s' % (urlutils.quote(self.stack_name, ''), return '%s/%s' % (urlparse.quote(self.stack_name, ''),
urlutils.quote(self.stack_id, '')) urlparse.quote(self.stack_id, ''))
def _path_components(self): def _path_components(self):
'''Return a list of the path components.''' '''Return a list of the path components.'''

View File

@ -20,9 +20,10 @@ from oslo.config import cfg
import requests import requests
from requests import exceptions from requests import exceptions
from six.moves import urllib
from heat.openstack.common.gettextutils import _ from heat.openstack.common.gettextutils import _
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
from heat.openstack.common.py3kcompat import urlutils
cfg.CONF.import_opt('max_template_size', 'heat.common.config') cfg.CONF.import_opt('max_template_size', 'heat.common.config')
@ -40,15 +41,15 @@ def get(url, allowed_schemes=('http', 'https')):
''' '''
logger.info(_('Fetching data from %s') % url) logger.info(_('Fetching data from %s') % url)
components = urlutils.urlparse(url) components = urllib.parse.urlparse(url)
if components.scheme not in allowed_schemes: if components.scheme not in allowed_schemes:
raise IOError(_('Invalid URL scheme %s') % components.scheme) raise IOError(_('Invalid URL scheme %s') % components.scheme)
if components.scheme == 'file': if components.scheme == 'file':
try: try:
return urlutils.urlopen(url).read() return urllib.request.urlopen(url).read()
except urlutils.URLError as uex: except urllib.error.URLError as uex:
raise IOError(_('Failed to retrieve template: %s') % str(uex)) raise IOError(_('Failed to retrieve template: %s') % str(uex))
try: try:

View File

@ -23,13 +23,13 @@ import string
from oslo.config import cfg from oslo.config import cfg
import six import six
from six.moves.urllib import parse as urlparse
from heat.common import exception from heat.common import exception
from heat.engine import clients from heat.engine import clients
from heat.engine import scheduler from heat.engine import scheduler
from heat.openstack.common.gettextutils import _ from heat.openstack.common.gettextutils import _
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
from heat.openstack.common.py3kcompat import urlutils
from heat.openstack.common import uuidutils from heat.openstack.common import uuidutils
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -252,8 +252,8 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
# Create a boto config which the cfntools on the host use to know # Create a boto config which the cfntools on the host use to know
# where the cfn and cw API's are to be accessed # where the cfn and cw API's are to be accessed
cfn_url = urlutils.urlparse(cfg.CONF.heat_metadata_server_url) cfn_url = urlparse.urlparse(cfg.CONF.heat_metadata_server_url)
cw_url = urlutils.urlparse(cfg.CONF.heat_watch_server_url) cw_url = urlparse.urlparse(cfg.CONF.heat_watch_server_url)
is_secure = cfg.CONF.instance_connection_is_secure is_secure = cfg.CONF.instance_connection_is_secure
vcerts = cfg.CONF.instance_connection_https_validate_certificates vcerts = cfg.CONF.instance_connection_https_validate_certificates
boto_cfg = "\n".join(["[Boto]", boto_cfg = "\n".join(["[Boto]",

View File

@ -12,12 +12,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from six.moves.urllib import parse as urlparse
from heat.engine import clients from heat.engine import clients
from heat.engine import constraints from heat.engine import constraints
from heat.engine import properties from heat.engine import properties
from heat.engine import resource from heat.engine import resource
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
from heat.openstack.common.py3kcompat import urlutils
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -152,7 +153,7 @@ class S3Bucket(resource.Resource):
def _resolve_attribute(self, name): def _resolve_attribute(self, name):
url = self.swift().get_auth()[0] url = self.swift().get_auth()[0]
parsed = list(urlutils.urlparse(url)) parsed = list(urlparse.urlparse(url))
if name == 'DomainName': if name == 'DomainName':
return parsed[1].split(':')[0] return parsed[1].split(':')[0]
elif name == 'WebsiteURL': elif name == 'WebsiteURL':

View File

@ -12,12 +12,13 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from six.moves.urllib import parse as urlparse
from heat.common import exception from heat.common import exception
from heat.engine import clients from heat.engine import clients
from heat.engine import properties from heat.engine import properties
from heat.engine import resource from heat.engine import resource
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
from heat.openstack.common.py3kcompat import urlutils
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -133,7 +134,7 @@ class SwiftContainer(resource.Resource):
return unicode(self.resource_id) return unicode(self.resource_id)
def FnGetAtt(self, key): def FnGetAtt(self, key):
parsed = list(urlutils.urlparse(self.swift().url)) parsed = list(urlparse.urlparse(self.swift().url))
if key == 'DomainName': if key == 'DomainName':
return parsed[1].split(':')[0] return parsed[1].split(':')[0]
elif key == 'WebsiteURL': elif key == 'WebsiteURL':

View File

@ -12,6 +12,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from six.moves.urllib import parse as urlparse
from oslo.config import cfg from oslo.config import cfg
from keystoneclient.contrib.ec2 import utils as ec2_utils from keystoneclient.contrib.ec2 import utils as ec2_utils
@ -22,7 +24,6 @@ from heat.engine import stack_user
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
from heat.openstack.common.gettextutils import _ from heat.openstack.common.gettextutils import _
from heat.openstack.common.py3kcompat import urlutils
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -82,7 +83,7 @@ class SignalResponder(stack_user.StackUser):
waitcond_url = cfg.CONF.heat_waitcondition_server_url waitcond_url = cfg.CONF.heat_waitcondition_server_url
signal_url = waitcond_url.replace('/waitcondition', signal_type) signal_url = waitcond_url.replace('/waitcondition', signal_type)
host_url = urlutils.urlparse(signal_url) host_url = urlparse.urlparse(signal_url)
path = self.identifier().arn_url_path() path = self.identifier().arn_url_path()
@ -90,7 +91,7 @@ class SignalResponder(stack_user.StackUser):
# prcessing in the CFN API (ec2token.py) has an unquoted path, so we # prcessing in the CFN API (ec2token.py) has an unquoted path, so we
# need to calculate the signature with the path component unquoted, but # need to calculate the signature with the path component unquoted, but
# ensure the actual URL contains the quoted version... # ensure the actual URL contains the quoted version...
unquoted_path = urlutils.unquote(host_url.path + path) unquoted_path = urlparse.unquote(host_url.path + path)
request = {'host': host_url.netloc.lower(), request = {'host': host_url.netloc.lower(),
'verb': SIGNAL_VERB[signal_type], 'verb': SIGNAL_VERB[signal_type],
'path': unquoted_path, 'path': unquoted_path,
@ -104,7 +105,7 @@ class SignalResponder(stack_user.StackUser):
signer = ec2_utils.Ec2Signer(secret_key) signer = ec2_utils.Ec2Signer(secret_key)
request['params']['Signature'] = signer.generate(request) request['params']['Signature'] = signer.generate(request)
qs = urlutils.urlencode(request['params']) qs = urlparse.urlencode(request['params'])
url = "%s%s?%s" % (signal_url.lower(), url = "%s%s?%s" % (signal_url.lower(),
path, qs) path, qs)

View File

@ -30,11 +30,12 @@ import uuid
from migrate.versioning import repository from migrate.versioning import repository
import sqlalchemy import sqlalchemy
from six.moves.urllib import parse as urlparse
from heat.db.sqlalchemy import migrate_repo from heat.db.sqlalchemy import migrate_repo
from heat.db.sqlalchemy import migration from heat.db.sqlalchemy import migration
from heat.openstack.common.db.sqlalchemy import test_migrations from heat.openstack.common.db.sqlalchemy import test_migrations
from heat.openstack.common import log as logging from heat.openstack.common import log as logging
from heat.openstack.common.py3kcompat import urlutils
LOG = logging.getLogger(__name__) LOG = logging.getLogger(__name__)
@ -125,7 +126,7 @@ class TestHeatMigrations(test_migrations.BaseMigrationTestCase,
for key, eng in self.engines.items(): for key, eng in self.engines.items():
if eng is engine: if eng is engine:
conn_string = self.test_databases[key] conn_string = self.test_databases[key]
conn_pieces = urlutils.urlparse(conn_string) conn_pieces = urlparse.urlparse(conn_string)
if conn_string.startswith('mysql'): if conn_string.startswith('mysql'):
break break
else: else:

View File

@ -13,8 +13,9 @@
import mock import mock
from six.moves.urllib import parse as urlparse
from heat.api.openstack.v1.views import views_common from heat.api.openstack.v1.views import views_common
from heat.openstack.common.py3kcompat import urlutils
from heat.tests.common import HeatTestCase from heat.tests.common import HeatTestCase
@ -73,9 +74,9 @@ class TestViewsCommon(HeatTestCase):
next_link = filter(lambda link: link['rel'] == 'next', links).pop() next_link = filter(lambda link: link['rel'] == 'next', links).pop()
url = next_link['href'] url = next_link['href']
query_string = urlutils.urlparse(url).query query_string = urlparse.urlparse(url).query
params = {} params = {}
params.update(urlutils.parse_qsl(query_string)) params.update(urlparse.parse_qsl(query_string))
self.assertEqual('2', params['limit']) self.assertEqual('2', params['limit'])
self.assertEqual('bar', params['foo']) self.assertEqual('bar', params['foo'])

View File

@ -16,9 +16,9 @@ from oslo.config import cfg
import requests import requests
from requests import exceptions from requests import exceptions
from six.moves import cStringIO from six.moves import cStringIO
from six.moves import urllib
from heat.common import urlfetch from heat.common import urlfetch
from heat.openstack.common.py3kcompat import urlutils
from heat.tests.common import HeatTestCase from heat.tests.common import HeatTestCase
@ -49,8 +49,8 @@ class UrlFetchTest(HeatTestCase):
data = '{ "foo": "bar" }' data = '{ "foo": "bar" }'
url = 'file:///etc/profile' url = 'file:///etc/profile'
self.m.StubOutWithMock(urlutils, 'urlopen') self.m.StubOutWithMock(urllib.request, 'urlopen')
urlutils.urlopen(url).AndReturn(cStringIO(data)) urllib.request.urlopen(url).AndReturn(cStringIO(data))
self.m.ReplayAll() self.m.ReplayAll()
self.assertEqual(data, urlfetch.get(url, allowed_schemes=['file'])) self.assertEqual(data, urlfetch.get(url, allowed_schemes=['file']))
@ -59,8 +59,8 @@ class UrlFetchTest(HeatTestCase):
def test_file_scheme_failure(self): def test_file_scheme_failure(self):
url = 'file:///etc/profile' url = 'file:///etc/profile'
self.m.StubOutWithMock(urlutils, 'urlopen') self.m.StubOutWithMock(urllib.request, 'urlopen')
urlutils.urlopen(url).AndRaise(urlutils.URLError('oops')) urllib.request.urlopen(url).AndRaise(urllib.error.URLError('oops'))
self.m.ReplayAll() self.m.ReplayAll()
self.assertRaises(IOError, urlfetch.get, url, allowed_schemes=['file']) self.assertRaises(IOError, urlfetch.get, url, allowed_schemes=['file'])

View File

@ -15,10 +15,11 @@
import httplib2 import httplib2
from six.moves.urllib import parse as urlparse
from novaclient import client as base_client from novaclient import client as base_client
from novaclient.v1_1 import client from novaclient.v1_1 import client
from heat.openstack.common.py3kcompat import urlutils
from heat.tests import fakes from heat.tests import fakes
@ -46,7 +47,7 @@ class FakeHTTPClient(base_client.HTTPClient):
assert 'body' in kwargs assert 'body' in kwargs
# Call the method # Call the method
args = urlutils.parse_qsl(urlutils.urlparse(url)[4]) args = urlparse.parse_qsl(urlparse.urlparse(url)[4])
kwargs.update(args) kwargs.update(args)
munged_url = url.rsplit('?', 1)[0] munged_url = url.rsplit('?', 1)[0]
munged_url = munged_url.strip('/').replace('/', '_').replace('.', '_') munged_url = munged_url.strip('/').replace('/', '_').replace('.', '_')