diff --git a/bin/nova-manage b/bin/nova-manage index 372d69ea6313..7ac365950fc5 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -1084,7 +1084,7 @@ class ServiceCommands(object): {"method": "show_host_resources", "args": {"host": host}}) - if type(result) != dict: + if not isinstance(result, dict): print _('An unexpected error has occurred.') print _('[Result]'), result else: diff --git a/nova/api/direct.py b/nova/api/direct.py index 1a86b0c97172..b3d683b53da5 100644 --- a/nova/api/direct.py +++ b/nova/api/direct.py @@ -285,7 +285,7 @@ class ServiceWrapper(object): params = dict([(str(k), v) for (k, v) in params.iteritems()]) result = method(context, **params) - if result is None or type(result) is str or type(result) is unicode: + if result is None or isinstance(result, basestring): return result try: diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py index a965b84b6292..dccb358aa8d6 100644 --- a/nova/api/ec2/cloud.py +++ b/nova/api/ec2/cloud.py @@ -812,7 +812,7 @@ class CloudController(object): LOG.audit(_("Get console output for instance %s"), instance_id, context=context) # instance_id may be passed in as a list of instances - if type(instance_id) == list: + if isinstance(instance_id, list): ec2_id = instance_id[0] else: ec2_id = instance_id diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py index 7b2f3b90dfe2..59cc67bb7e29 100644 --- a/nova/api/openstack/wsgi.py +++ b/nova/api/openstack/wsgi.py @@ -366,7 +366,7 @@ class XMLDictSerializer(DictSerializer): result.setAttribute('xmlns', xmlns) #TODO(bcwaldon): accomplish this without a type-check - if type(data) is list: + if isinstance(data, list): collections = metadata.get('list_collections', {}) if nodename in collections: metadata = collections[nodename] @@ -385,7 +385,7 @@ class XMLDictSerializer(DictSerializer): node = self._to_xml_node(doc, metadata, singular, item) result.appendChild(node) #TODO(bcwaldon): accomplish this without a type-check - elif type(data) is dict: + elif isinstance(data, dict): collections = metadata.get('dict_collections', {}) if nodename in collections: metadata = collections[nodename] @@ -573,7 +573,7 @@ class Resource(wsgi.Application): LOG.info(_("HTTP exception thrown: %s"), unicode(ex)) action_result = Fault(ex) - if type(action_result) is dict or action_result is None: + if isinstance(action_result, dict) or action_result is None: response = self.serializer.serialize(request, action_result, accept, diff --git a/nova/api/openstack/xmlutil.py b/nova/api/openstack/xmlutil.py index f0293b50fb7f..cc689e2c8e8c 100644 --- a/nova/api/openstack/xmlutil.py +++ b/nova/api/openstack/xmlutil.py @@ -29,7 +29,7 @@ XMLNS_ATOM = 'http://www.w3.org/2005/Atom' def validate_schema(xml, schema_name): - if type(xml) is str: + if isinstance(xml, str): xml = etree.fromstring(xml) base_path = 'nova/api/openstack/v2/schemas/v1.1/' if schema_name in ('atom', 'atom-link'): diff --git a/nova/auth/ldapdriver.py b/nova/auth/ldapdriver.py index 6b9969dad157..6f8ae6e67f58 100644 --- a/nova/auth/ldapdriver.py +++ b/nova/auth/ldapdriver.py @@ -85,7 +85,7 @@ def _clean(attr): """Clean attr for insertion into ldap""" if attr is None: return None - if type(attr) is unicode: + if isinstance(attr, unicode): return str(attr) return attr diff --git a/nova/common/cfg.py b/nova/common/cfg.py index 0cb7abfb68ea..68c5059325e5 100644 --- a/nova/common/cfg.py +++ b/nova/common/cfg.py @@ -962,9 +962,9 @@ class ConfigOpts(object): :param value: the string value, or list of string values :returns: the substituted string(s) """ - if type(value) is list: + if isinstance(value, list): return [self._substitute(i) for i in value] - elif type(value) is str: + elif isinstance(value, str): tmpl = string.Template(value) return tmpl.safe_substitute(self.StrSubWrapper(self)) else: diff --git a/nova/network/model.py b/nova/network/model.py index 92094f23b343..2a9a7741886a 100644 --- a/nova/network/model.py +++ b/nova/network/model.py @@ -17,7 +17,6 @@ import json import netaddr -import types from nova import exception @@ -247,7 +246,7 @@ class NetworkInfo(list): @classmethod def hydrate(cls, network_info): - if isinstance(network_info, types.StringTypes): + if isinstance(network_info, basestring): network_info = json.loads(network_info) return NetworkInfo([VIF.hydrate(vif) for vif in network_info]) diff --git a/nova/network/quantum/client.py b/nova/network/quantum/client.py index 0ba254e45425..bcf8e1cb7984 100644 --- a/nova/network/quantum/client.py +++ b/nova/network/quantum/client.py @@ -155,7 +155,7 @@ class Client(object): action = Client.action_prefix + action action = action.replace('{tenant_id}', self.tenant) - if type(params) is dict: + if isinstance(params, dict): action += '?' + urllib.urlencode(params) try: @@ -219,7 +219,7 @@ class Client(object): def serialize(self, data): if not data: return None - elif type(data) is dict: + elif isinstance(data, dict): return JSONSerializer().serialize(data, self.content_type()) else: raise Exception(_("unable to deserialize object of type = '%s'" % diff --git a/nova/rpc/impl_carrot.py b/nova/rpc/impl_carrot.py index d5a7d5ca4533..ee6bac1e52c7 100644 --- a/nova/rpc/impl_carrot.py +++ b/nova/rpc/impl_carrot.py @@ -24,11 +24,11 @@ No fan-out support yet. """ +import inspect import json import sys import time import traceback -import types import uuid from carrot import connection as carrot_connection @@ -284,7 +284,7 @@ class AdapterConsumer(Consumer): try: rval = node_func(context=ctxt, **node_args) # Check if the result was a generator - if isinstance(rval, types.GeneratorType): + if inspect.isgenerator(rval): for x in rval: ctxt.reply(x, None) else: diff --git a/nova/rpc/impl_fake.py b/nova/rpc/impl_fake.py index cacf2a37266f..9d7f867a2b58 100644 --- a/nova/rpc/impl_fake.py +++ b/nova/rpc/impl_fake.py @@ -17,9 +17,9 @@ queues. Casts will block, but this is very useful for tests. """ +import inspect import sys import traceback -import types from nova import context from nova.rpc import common as rpc_common @@ -60,7 +60,7 @@ class Consumer(object): # if ending not 'sent'...we might have more data to # return from the function itself if not ctxt._done: - if isinstance(rval, types.GeneratorType): + if inspect.isgenerator(rval): for val in rval: yield val else: diff --git a/nova/rpc/impl_kombu.py b/nova/rpc/impl_kombu.py index 810a6629e0d6..5f47737d0363 100644 --- a/nova/rpc/impl_kombu.py +++ b/nova/rpc/impl_kombu.py @@ -18,11 +18,11 @@ import kombu import kombu.entity import kombu.messaging import kombu.connection +import inspect import itertools import sys import time import traceback -import types import uuid import eventlet @@ -651,7 +651,7 @@ class ProxyCallback(object): try: rval = node_func(context=ctxt, **node_args) # Check if the result was a generator - if isinstance(rval, types.GeneratorType): + if inspect.isgenerator(rval): for x in rval: ctxt.reply(x, None) else: diff --git a/nova/scheduler/distributed_scheduler.py b/nova/scheduler/distributed_scheduler.py index 1d149a13926d..4ea27910d0ce 100644 --- a/nova/scheduler/distributed_scheduler.py +++ b/nova/scheduler/distributed_scheduler.py @@ -21,7 +21,6 @@ Weighing Functions. import json import operator -import types import M2Crypto @@ -358,7 +357,7 @@ class DistributedScheduler(driver.Scheduler): return getattr(filters, nm) return [get_itm(itm) for itm in dir(filters) - if (type(get_itm(itm)) is types.TypeType) + if isinstance(get_itm(itm), type) and issubclass(get_itm(itm), filters.AbstractHostFilter) and get_itm(itm) is not filters.AbstractHostFilter] diff --git a/nova/scheduler/zone_manager.py b/nova/scheduler/zone_manager.py index 543e8567e4fe..e7c7b6114f4c 100644 --- a/nova/scheduler/zone_manager.py +++ b/nova/scheduler/zone_manager.py @@ -140,7 +140,7 @@ class ReadOnlyDict(UserDict.IterableUserDict): return elif isinstance(source, UserDict.UserDict): self.data = source.data - elif isinstance(source, type({})): + elif isinstance(source, dict): self.data = source else: raise TypeError diff --git a/nova/tests/fake_utils.py b/nova/tests/fake_utils.py index 84ab641ea538..1f3b5e260ea6 100644 --- a/nova/tests/fake_utils.py +++ b/nova/tests/fake_utils.py @@ -17,7 +17,6 @@ """This modules stubs out functions in nova.utils.""" import re -import types from eventlet import greenthread diff --git a/nova/utils.py b/nova/utils.py index 7f37cc80122d..e6a6115fc602 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -33,7 +33,6 @@ import socket import struct import sys import time -import types import uuid import pyclbr from xml.sax import saxutils @@ -176,11 +175,11 @@ def execute(*cmd, **kwargs): process_input = kwargs.pop('process_input', None) check_exit_code = kwargs.pop('check_exit_code', [0]) ignore_exit_code = False - if type(check_exit_code) == int: - check_exit_code = [check_exit_code] - elif type(check_exit_code) == bool: + if isinstance(check_exit_code, bool): ignore_exit_code = not check_exit_code check_exit_code = [0] + elif isinstance(check_exit_code, int): + check_exit_code = [check_exit_code] delay_on_retry = kwargs.pop('delay_on_retry', True) attempts = kwargs.pop('attempts', 1) run_as_root = kwargs.pop('run_as_root', False) @@ -569,7 +568,7 @@ class LazyPluggable(object): raise exception.Error(_('Invalid backend: %s') % backend_name) backend = self.__backends[backend_name] - if type(backend) == type(tuple()): + if isinstance(backend, tuple): name = backend[0] fromlist = backend[1] else: @@ -696,13 +695,13 @@ def to_primitive(value, convert_instances=False, level=0): # The try block may not be necessary after the class check above, # but just in case ... try: - if type(value) is type([]) or type(value) is type((None,)): + if isinstance(value, (list, tuple)): o = [] for v in value: o.append(to_primitive(v, convert_instances=convert_instances, level=level)) return o - elif type(value) is type({}): + elif isinstance(value, dict): o = {} for k, v in value.iteritems(): o[k] = to_primitive(v, convert_instances=convert_instances, @@ -858,7 +857,7 @@ def get_from_path(items, path): if items is None: return results - if not isinstance(items, types.ListType): + if not isinstance(items, list): # Wrap single objects in a list items = [items] @@ -871,7 +870,7 @@ def get_from_path(items, path): child = get_method(first_token) if child is None: continue - if isinstance(child, types.ListType): + if isinstance(child, list): # Flatten intermediate lists for x in child: results.append(x) diff --git a/nova/virt/vmwareapi/vim.py b/nova/virt/vmwareapi/vim.py index 0cbdba3636f8..e657824da5f2 100644 --- a/nova/virt/vmwareapi/vim.py +++ b/nova/virt/vmwareapi/vim.py @@ -167,7 +167,7 @@ class Vim: def _request_managed_object_builder(self, managed_object): """Builds the request managed object.""" # Request Managed Object Builder - if type(managed_object) == type(""): + if isinstance(managed_object, str): mo = suds.sudsobject.Property(managed_object) mo._type = managed_object else: diff --git a/tools/ajaxterm/qweb.py b/tools/ajaxterm/qweb.py index 20c5092300ab..630325c9576a 100644 --- a/tools/ajaxterm/qweb.py +++ b/tools/ajaxterm/qweb.py @@ -1035,7 +1035,7 @@ class QWebRequest: name_dict = cgi.parse_header(sub['Content-Disposition'])[1] if 'filename' in name_dict: # Nested MIME Messages are not supported' - if type([]) == type(sub.get_payload()): + if isinstance(sub.get_payload(), list): continue if not name_dict['filename'].strip(): continue