Merge "Nova-all: Replace basestring by six for python3 compatability"
This commit is contained in:
commit
8af5c61ab0
|
@ -24,6 +24,7 @@ import urlparse
|
|||
|
||||
from eventlet.green import httplib
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
import webob
|
||||
import webob.dec
|
||||
import webob.exc
|
||||
|
@ -521,7 +522,7 @@ def ec2_error_ex(ex, req, code=None, message=None, unexpected=False):
|
|||
# Log filtered environment for unexpected errors.
|
||||
env = req.environ.copy()
|
||||
for k in env.keys():
|
||||
if not isinstance(env[k], basestring):
|
||||
if not isinstance(env[k], six.string_types):
|
||||
env.pop(k)
|
||||
log_fun(_('Environment: %s') % jsonutils.dumps(env))
|
||||
if not message:
|
||||
|
|
|
@ -57,6 +57,7 @@ import os
|
|||
import sys
|
||||
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import config
|
||||
from nova.openstack.common import cliutils
|
||||
|
@ -186,7 +187,7 @@ def main():
|
|||
v = getattr(CONF.category, 'action_kwarg_' + k)
|
||||
if v is None:
|
||||
continue
|
||||
if isinstance(v, basestring):
|
||||
if isinstance(v, six.string_types):
|
||||
v = v.decode('utf-8')
|
||||
fn_kwargs[k] = v
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@ import sys
|
|||
|
||||
import netaddr
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova.api.ec2 import ec2utils
|
||||
from nova import availability_zones
|
||||
|
@ -1357,7 +1358,7 @@ def main():
|
|||
v = getattr(CONF.category, 'action_kwarg_' + k)
|
||||
if v is None:
|
||||
continue
|
||||
if isinstance(v, basestring):
|
||||
if isinstance(v, six.string_types):
|
||||
v = v.decode('utf-8')
|
||||
fn_kwargs[k] = v
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@ import string
|
|||
import uuid
|
||||
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import availability_zones
|
||||
from nova import block_device
|
||||
|
@ -1760,7 +1761,7 @@ class API(base.Base):
|
|||
else:
|
||||
# Remaps are strings to translate to, or functions to call
|
||||
# to do the translating as defined by the table above.
|
||||
if isinstance(remap_object, basestring):
|
||||
if isinstance(remap_object, six.string_types):
|
||||
filters[remap_object] = value
|
||||
else:
|
||||
try:
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
|
||||
"""Handles database requests from other nova services."""
|
||||
|
||||
import six
|
||||
|
||||
from nova.api.ec2 import ec2utils
|
||||
from nova import block_device
|
||||
from nova.cells import rpcapi as cells_rpcapi
|
||||
|
@ -124,7 +126,7 @@ class ConductorManager(manager.Manager):
|
|||
"'%(key)s' on %(instance_uuid)s"),
|
||||
{'key': key, 'instance_uuid': instance_uuid})
|
||||
raise KeyError("unexpected update keyword '%s'" % key)
|
||||
if key in datetime_fields and isinstance(value, basestring):
|
||||
if key in datetime_fields and isinstance(value, six.string_types):
|
||||
updates[key] = timeutils.parse_strtime(value)
|
||||
|
||||
old_ref, instance_ref = self.db.instance_update_and_get_original(
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
import copy
|
||||
import uuid
|
||||
|
||||
import six
|
||||
|
||||
from nova import exception
|
||||
from nova.openstack.common.gettextutils import _
|
||||
from nova.openstack.common import local
|
||||
|
@ -71,7 +73,7 @@ class RequestContext(object):
|
|||
self.remote_address = remote_address
|
||||
if not timestamp:
|
||||
timestamp = timeutils.utcnow()
|
||||
if isinstance(timestamp, basestring):
|
||||
if isinstance(timestamp, six.string_types):
|
||||
timestamp = timeutils.parse_strtime(timestamp)
|
||||
self.timestamp = timestamp
|
||||
if not request_id:
|
||||
|
|
|
@ -29,6 +29,7 @@ import time
|
|||
import uuid
|
||||
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
from sqlalchemy import and_
|
||||
from sqlalchemy import Boolean
|
||||
from sqlalchemy.exc import DataError
|
||||
|
@ -290,7 +291,7 @@ def exact_filter(query, model, filters, legal_keys):
|
|||
|
||||
def convert_datetimes(values, *datetime_keys):
|
||||
for key in values:
|
||||
if key in datetime_keys and isinstance(values[key], basestring):
|
||||
if key in datetime_keys and isinstance(values[key], six.string_types):
|
||||
values[key] = timeutils.parse_strtime(values[key])
|
||||
return values
|
||||
|
||||
|
@ -1580,7 +1581,7 @@ def _handle_objects_related_type_conversions(values):
|
|||
for key in ('created_at', 'deleted_at', 'updated_at',
|
||||
'launched_at', 'terminated_at', 'scheduled_at'):
|
||||
if key in values and values[key]:
|
||||
if isinstance(values[key], basestring):
|
||||
if isinstance(values[key], six.string_types):
|
||||
values[key] = timeutils.parse_strtime(values[key])
|
||||
values[key] = values[key].replace(tzinfo=None)
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ import urlparse
|
|||
import glanceclient
|
||||
import glanceclient.exc
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import exception
|
||||
import nova.image.download as image_xfers
|
||||
|
@ -467,13 +468,13 @@ def _convert_timestamps_to_datetimes(image_meta):
|
|||
# NOTE(bcwaldon): used to store non-string data in glance metadata
|
||||
def _json_loads(properties, attr):
|
||||
prop = properties[attr]
|
||||
if isinstance(prop, basestring):
|
||||
if isinstance(prop, six.string_types):
|
||||
properties[attr] = jsonutils.loads(prop)
|
||||
|
||||
|
||||
def _json_dumps(properties, attr):
|
||||
prop = properties[attr]
|
||||
if not isinstance(prop, basestring):
|
||||
if not isinstance(prop, six.string_types):
|
||||
properties[attr] = jsonutils.dumps(prop)
|
||||
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ import re
|
|||
|
||||
import netaddr
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import db
|
||||
from nova import exception
|
||||
|
@ -292,7 +293,7 @@ class IptablesTable(object):
|
|||
|
||||
def remove_rules_regex(self, regex):
|
||||
"""Remove all rules matching regex."""
|
||||
if isinstance(regex, basestring):
|
||||
if isinstance(regex, six.string_types):
|
||||
regex = re.compile(regex)
|
||||
num_rules = len(self.rules)
|
||||
self.rules = filter(lambda r: not regex.match(str(r)), self.rules)
|
||||
|
|
|
@ -19,6 +19,7 @@ import functools
|
|||
|
||||
import eventlet
|
||||
import netaddr
|
||||
import six
|
||||
|
||||
from nova import exception
|
||||
from nova.openstack.common.gettextutils import _
|
||||
|
@ -324,7 +325,7 @@ class NetworkInfo(list):
|
|||
|
||||
@classmethod
|
||||
def hydrate(cls, network_info):
|
||||
if isinstance(network_info, basestring):
|
||||
if isinstance(network_info, six.string_types):
|
||||
network_info = jsonutils.loads(network_info)
|
||||
return cls([VIF.hydrate(vif) for vif in network_info])
|
||||
|
||||
|
|
|
@ -206,7 +206,7 @@ class Field(object):
|
|||
class String(FieldType):
|
||||
def coerce(self, obj, attr, value):
|
||||
# FIXME(danms): We should really try to avoid the need to do this
|
||||
if isinstance(value, (basestring, int, long, float,
|
||||
if isinstance(value, (six.string_types, int, long, float,
|
||||
datetime.datetime)):
|
||||
return unicode(value)
|
||||
else:
|
||||
|
@ -232,7 +232,7 @@ class Boolean(FieldType):
|
|||
|
||||
class DateTime(FieldType):
|
||||
def coerce(self, obj, attr, value):
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, six.string_types):
|
||||
value = timeutils.parse_isotime(value)
|
||||
elif not isinstance(value, datetime.datetime):
|
||||
raise ValueError(_('A datetime.datetime is required here'))
|
||||
|
@ -302,8 +302,12 @@ class Dict(CompoundFieldType):
|
|||
if not isinstance(value, dict):
|
||||
raise ValueError(_('A dict is required here'))
|
||||
for key, element in value.items():
|
||||
if not isinstance(key, basestring):
|
||||
raise KeyTypeError(basestring, key)
|
||||
if not isinstance(key, six.string_types):
|
||||
#NOTE(guohliu) In order to keep compatibility with python3
|
||||
#we need to use six.string_types rather than basestring here,
|
||||
#since six.string_types is a tuple, so we need to pass the
|
||||
#real type in.
|
||||
raise KeyTypeError(six.string_types[0], key)
|
||||
value[key] = self._element_type.coerce(
|
||||
obj, '%s["%s"]' % (attr, key), element)
|
||||
return value
|
||||
|
@ -355,7 +359,7 @@ class NetworkModel(FieldType):
|
|||
def coerce(self, obj, attr, value):
|
||||
if isinstance(value, network_model.NetworkInfo):
|
||||
return value
|
||||
elif isinstance(value, basestring):
|
||||
elif isinstance(value, six.string_types):
|
||||
# Hmm, do we need this?
|
||||
return network_model.NetworkInfo.hydrate(value)
|
||||
else:
|
||||
|
|
|
@ -18,6 +18,7 @@ import datetime
|
|||
import iso8601
|
||||
|
||||
import netaddr
|
||||
import six
|
||||
|
||||
from nova.network import model as network_model
|
||||
from nova.openstack.common.gettextutils import _
|
||||
|
@ -42,7 +43,7 @@ def datetime_or_none(dt):
|
|||
# NOTE(danms): Being tolerant of isotime strings here will help us
|
||||
# during our objects transition
|
||||
def datetime_or_str_or_none(val):
|
||||
if isinstance(val, basestring):
|
||||
if isinstance(val, six.string_types):
|
||||
return timeutils.parse_isotime(val)
|
||||
return datetime_or_none(val)
|
||||
|
||||
|
@ -109,7 +110,7 @@ def list_of_strings_or_none(val):
|
|||
return val
|
||||
if not isinstance(val, list):
|
||||
raise ValueError(_('A list of strings is required here'))
|
||||
if not all([isinstance(x, basestring) for x in val]):
|
||||
if not all([isinstance(x, six.string_types) for x in val]):
|
||||
raise ValueError(_('Invalid values found in list '
|
||||
'(strings are required)'))
|
||||
return val
|
||||
|
@ -123,10 +124,10 @@ def dict_of_strings_or_none(val):
|
|||
val = dict(val.iteritems())
|
||||
except Exception:
|
||||
raise ValueError(_('A dict of strings is required here'))
|
||||
if not all([isinstance(x, basestring) for x in val.keys()]):
|
||||
if not all([isinstance(x, six.string_types) for x in val.keys()]):
|
||||
raise ValueError(_('Invalid keys found in dict '
|
||||
'(strings are required)'))
|
||||
if not all([isinstance(x, basestring) for x in val.values()]):
|
||||
if not all([isinstance(x, six.string_types) for x in val.values()]):
|
||||
raise ValueError(_('Invalid values found in dict '
|
||||
'(strings are required)'))
|
||||
return val
|
||||
|
|
|
@ -43,6 +43,7 @@ import urllib
|
|||
|
||||
from oslo.config import cfg
|
||||
import routes
|
||||
import six
|
||||
import webob
|
||||
|
||||
from nova.openstack.common import fileutils
|
||||
|
@ -184,7 +185,7 @@ class BaseRequestHandler(object):
|
|||
if not parts:
|
||||
parts = []
|
||||
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, six.string_types):
|
||||
parts.append(utils.xhtml_escape(value))
|
||||
elif isinstance(value, int) or isinstance(value, long):
|
||||
parts.append(str(value))
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
import datetime
|
||||
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import db
|
||||
from nova import exception
|
||||
|
@ -1057,7 +1058,7 @@ class QuotaEngine(object):
|
|||
return self.__driver
|
||||
if not self._driver_cls:
|
||||
self._driver_cls = CONF.quota_driver
|
||||
if isinstance(self._driver_cls, basestring):
|
||||
if isinstance(self._driver_cls, six.string_types):
|
||||
self._driver_cls = importutils.import_object(self._driver_cls)
|
||||
self.__driver = self._driver_cls
|
||||
return self.__driver
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
|
||||
import netaddr
|
||||
import six
|
||||
|
||||
from nova.compute import api as compute
|
||||
from nova.openstack.common.gettextutils import _
|
||||
|
@ -41,7 +42,7 @@ class DifferentHostFilter(AffinityFilter):
|
|||
scheduler_hints = filter_properties.get('scheduler_hints') or {}
|
||||
|
||||
affinity_uuids = scheduler_hints.get('different_host', [])
|
||||
if isinstance(affinity_uuids, basestring):
|
||||
if isinstance(affinity_uuids, six.string_types):
|
||||
affinity_uuids = [affinity_uuids]
|
||||
if affinity_uuids:
|
||||
return not self.compute_api.get_all(context,
|
||||
|
@ -65,7 +66,7 @@ class SameHostFilter(AffinityFilter):
|
|||
scheduler_hints = filter_properties.get('scheduler_hints') or {}
|
||||
|
||||
affinity_uuids = scheduler_hints.get('same_host', [])
|
||||
if isinstance(affinity_uuids, basestring):
|
||||
if isinstance(affinity_uuids, six.string_types):
|
||||
affinity_uuids = [affinity_uuids]
|
||||
if affinity_uuids:
|
||||
return self.compute_api.get_all(context, {'host': host_state.host,
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
|
||||
|
||||
import operator
|
||||
import six
|
||||
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova.scheduler import filters
|
||||
|
@ -117,7 +118,7 @@ class JsonFilter(filters.BaseHostFilter):
|
|||
for arg in query[1:]:
|
||||
if isinstance(arg, list):
|
||||
arg = self._process_filter(arg, host_state)
|
||||
elif isinstance(arg, basestring):
|
||||
elif isinstance(arg, six.string_types):
|
||||
arg = self._parse_string(arg, host_state)
|
||||
if arg is not None:
|
||||
cooked_args.append(arg)
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
# limitations under the License.
|
||||
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import conductor
|
||||
from nova import context
|
||||
|
@ -55,7 +56,7 @@ class DbDriver(api.ServiceGroupDriver):
|
|||
Check whether a service is up based on last heartbeat.
|
||||
"""
|
||||
last_heartbeat = service_ref['updated_at'] or service_ref['created_at']
|
||||
if isinstance(last_heartbeat, basestring):
|
||||
if isinstance(last_heartbeat, six.string_types):
|
||||
# NOTE(russellb) If this service_ref came in over rpc via
|
||||
# conductor, then the timestamp will be a string and needs to be
|
||||
# converted back to a datetime.
|
||||
|
|
|
@ -20,6 +20,7 @@ import uuid
|
|||
|
||||
import glanceclient.v1.images
|
||||
import routes
|
||||
import six
|
||||
import webob
|
||||
import webob.dec
|
||||
import webob.request
|
||||
|
@ -418,7 +419,7 @@ def create_info_cache(nw_cache):
|
|||
{'cidr': 'b33f::/64',
|
||||
'ips': [_ip(ip) for ip in pub1]}]}}]
|
||||
|
||||
if not isinstance(nw_cache, basestring):
|
||||
if not isinstance(nw_cache, six.string_types):
|
||||
nw_cache = jsonutils.dumps(nw_cache)
|
||||
|
||||
return {
|
||||
|
|
|
@ -17,6 +17,7 @@ Tests For Cells RPCAPI
|
|||
"""
|
||||
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova.cells import rpcapi as cells_rpcapi
|
||||
from nova import exception
|
||||
|
@ -56,7 +57,7 @@ class CellsAPITestCase(test.NoDBTestCase):
|
|||
self.assertEqual(self.fake_topic, call_info['topic'])
|
||||
self.assertEqual(method, call_info['msg']['method'])
|
||||
msg_version = call_info['msg']['version']
|
||||
self.assertIsInstance(msg_version, basestring,
|
||||
self.assertIsInstance(msg_version, six.string_types,
|
||||
msg="Message version %s is not a string" %
|
||||
msg_version)
|
||||
self.assertEqual(version, call_info['msg']['version'])
|
||||
|
|
|
@ -28,6 +28,7 @@ import uuid as stdlib_uuid
|
|||
import mox
|
||||
import netaddr
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
from sqlalchemy.dialects import sqlite
|
||||
from sqlalchemy import exc
|
||||
from sqlalchemy.exc import IntegrityError
|
||||
|
@ -1889,11 +1890,11 @@ class InstanceTestCase(test.TestCase, ModelsObjectComparatorMixin):
|
|||
self.ctxt, instance['uuid'],
|
||||
{'access_ip_v4': netaddr.IPAddress('1.2.3.4'),
|
||||
'access_ip_v6': netaddr.IPAddress('::1')})
|
||||
self.assertIsInstance(instance['access_ip_v4'], basestring)
|
||||
self.assertIsInstance(instance['access_ip_v6'], basestring)
|
||||
self.assertIsInstance(instance['access_ip_v4'], six.string_types)
|
||||
self.assertIsInstance(instance['access_ip_v6'], six.string_types)
|
||||
instance = db.instance_get_by_uuid(self.ctxt, instance['uuid'])
|
||||
self.assertIsInstance(instance['access_ip_v4'], basestring)
|
||||
self.assertIsInstance(instance['access_ip_v6'], basestring)
|
||||
self.assertIsInstance(instance['access_ip_v4'], six.string_types)
|
||||
self.assertIsInstance(instance['access_ip_v6'], six.string_types)
|
||||
|
||||
|
||||
class InstanceMetadataTestCase(test.TestCase):
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
import re
|
||||
|
||||
from eventlet import greenthread
|
||||
import six
|
||||
|
||||
from nova.openstack.common.gettextutils import _
|
||||
from nova.openstack.common import log as logging
|
||||
|
@ -80,7 +81,7 @@ def fake_execute(*cmd_parts, **kwargs):
|
|||
LOG.debug(_('Faked command matched %s') % fake_replier[0])
|
||||
break
|
||||
|
||||
if isinstance(reply_handler, basestring):
|
||||
if isinstance(reply_handler, six.string_types):
|
||||
# If the reply handler is a string, return it as stdout
|
||||
reply = reply_handler, ''
|
||||
else:
|
||||
|
|
|
@ -18,6 +18,7 @@ import os
|
|||
import re
|
||||
|
||||
from lxml import etree
|
||||
import six
|
||||
|
||||
from nova.openstack.common.gettextutils import _
|
||||
from nova.openstack.common import importutils
|
||||
|
@ -169,7 +170,7 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase):
|
|||
|
||||
if error:
|
||||
raise NoMatch('\n'.join(error))
|
||||
elif isinstance(expected, basestring) and '%' in expected:
|
||||
elif isinstance(expected, six.string_types) and '%' in expected:
|
||||
# NOTE(vish): escape stuff for regex
|
||||
for char in '[]<>?':
|
||||
expected = expected.replace(char, '\\%s' % char)
|
||||
|
@ -194,7 +195,7 @@ class ApiSampleTestBase(integrated_helpers._IntegratedTestBase):
|
|||
if match.groups():
|
||||
matched_value = match.groups()[0]
|
||||
else:
|
||||
if isinstance(expected, basestring):
|
||||
if isinstance(expected, six.string_types):
|
||||
# NOTE(danms): Ignore whitespace in this comparison
|
||||
expected = expected.strip()
|
||||
result = result.strip()
|
||||
|
|
|
@ -21,6 +21,7 @@ import traceback
|
|||
|
||||
from mock import MagicMock
|
||||
import netaddr
|
||||
import six
|
||||
|
||||
from nova.compute import manager
|
||||
from nova import exception
|
||||
|
@ -496,7 +497,7 @@ class _VirtDriverTestCase(_FakeDriverBackendTestCase):
|
|||
fake_libvirt_utils.files['dummy.log'] = ''
|
||||
instance_ref, network_info = self._get_running_instance()
|
||||
console_output = self.connection.get_console_output(instance_ref)
|
||||
self.assertIsInstance(console_output, basestring)
|
||||
self.assertIsInstance(console_output, six.string_types)
|
||||
|
||||
@catch_notimplementederror
|
||||
def test_get_vnc_console(self):
|
||||
|
|
|
@ -37,6 +37,7 @@ from xml.sax import saxutils
|
|||
import eventlet
|
||||
import netaddr
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import exception
|
||||
from nova.openstack.common import excutils
|
||||
|
@ -948,7 +949,7 @@ def check_string_length(value, name, min_length=0, max_length=None):
|
|||
:param min_length: the min_length of the string
|
||||
:param max_length: the max_length of the string
|
||||
"""
|
||||
if not isinstance(value, basestring):
|
||||
if not isinstance(value, six.string_types):
|
||||
msg = _("%s is not a string or unicode") % name
|
||||
raise exception.InvalidInput(message=msg)
|
||||
|
||||
|
@ -1002,7 +1003,7 @@ def is_none_string(val):
|
|||
"""
|
||||
Check if a string represents a None value.
|
||||
"""
|
||||
if not isinstance(val, basestring):
|
||||
if not isinstance(val, six.string_types):
|
||||
return False
|
||||
|
||||
return val.lower() == 'none'
|
||||
|
|
|
@ -19,6 +19,7 @@ import functools
|
|||
import socket
|
||||
|
||||
from eventlet.green import httplib
|
||||
import six
|
||||
|
||||
from nova.openstack.common import jsonutils
|
||||
from nova.openstack.common import log as logging
|
||||
|
@ -43,7 +44,7 @@ def filter_data(f):
|
|||
obj = new_list
|
||||
if isinstance(obj, dict):
|
||||
for k, v in obj.items():
|
||||
if isinstance(k, basestring):
|
||||
if isinstance(k, six.string_types):
|
||||
obj[k.lower()] = _filter(v)
|
||||
return obj
|
||||
return _filter(out)
|
||||
|
|
|
@ -26,6 +26,7 @@ import urllib2
|
|||
import urlparse
|
||||
|
||||
from oslo.config import cfg
|
||||
import six
|
||||
|
||||
from nova import exception
|
||||
from nova.openstack.common.gettextutils import _
|
||||
|
@ -806,7 +807,7 @@ class LibvirtFibreChannelVolumeDriver(LibvirtBaseVolumeDriver):
|
|||
if isinstance(ports, list):
|
||||
for wwn in ports:
|
||||
wwns.append(str(wwn))
|
||||
elif isinstance(ports, basestring):
|
||||
elif isinstance(ports, six.string_types):
|
||||
wwns.append(str(ports))
|
||||
|
||||
# We need to look for wwns on every hba
|
||||
|
|
Loading…
Reference in New Issue