From 25afe4574c6f07e966d0d5afdc5c89e65432e3b6 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sat, 27 Jul 2013 09:04:22 -0700 Subject: [PATCH] Enabled hacking check for Python3 compatible print (H233) Also fixed all violators of this check. Change-Id: Id87ff6f44ab76fc59b18d5da739df475400e1259 --- nova/cmd/dhcpbridge.py | 4 +- nova/cmd/manage.py | 234 ++++++++++++++++++------------------ nova/cmd/novncproxy.py | 6 +- nova/cmd/spicehtml5proxy.py | 6 +- nova/wsgi.py | 16 +-- smoketests/run_tests.py | 6 +- tox.ini | 3 +- 7 files changed, 143 insertions(+), 132 deletions(-) diff --git a/nova/cmd/dhcpbridge.py b/nova/cmd/dhcpbridge.py index 55db5b77979b..bbd8df76e0a0 100644 --- a/nova/cmd/dhcpbridge.py +++ b/nova/cmd/dhcpbridge.py @@ -20,6 +20,8 @@ Handle lease database updates from DHCP servers. """ +from __future__ import print_function + import os import sys @@ -127,6 +129,6 @@ def main(): LOG.error(_("Environment variable 'NETWORK_ID' must be set.")) return(1) - print init_leases(network_id) + print(init_leases(network_id)) rpc.cleanup() diff --git a/nova/cmd/manage.py b/nova/cmd/manage.py index 3bcb01578c6a..2b1396dfcf07 100644 --- a/nova/cmd/manage.py +++ b/nova/cmd/manage.py @@ -53,6 +53,8 @@ CLI interface for nova management. """ +from __future__ import print_function + import netaddr import os import sys @@ -204,10 +206,10 @@ class ShellCommands(object): def _db_error(caught_exception): - print caught_exception - print _("The above error may show that the database has not " + print(caught_exception) + print(_("The above error may show that the database has not " "been created.\nPlease create a database using " - "'nova-manage db sync' before running this command.") + "'nova-manage db sync' before running this command.")) exit(1) @@ -247,14 +249,14 @@ class ProjectCommands(object): if value.lower() == 'unlimited': value = -1 if int(value) < -1: - print _('Quota limit must be -1 or greater.') + print(_('Quota limit must be -1 or greater.')) return(2) if ((int(value) < minimum) and (maximum != -1 or (maximum == -1 and int(value) != -1))): - print _('Quota limit must greater than %s.') % minimum + print(_('Quota limit must greater than %s.') % minimum) return(2) if maximum != -1 and int(value) > maximum: - print _('Quota limit must less than %s.') % maximum + print(_('Quota limit must less than %s.') % maximum) return(2) try: db.quota_create(ctxt, project_id, key, value, @@ -263,16 +265,16 @@ class ProjectCommands(object): db.quota_update(ctxt, project_id, key, value, user_id=user_id) else: - print _('%(key)s is not a valid quota key. Valid options are: ' + print(_('%(key)s is not a valid quota key. Valid options are: ' '%(options)s.') % {'key': key, - 'options': ', '.join(quota)} + 'options': ', '.join(quota)}) return(2) print_format = "%-36s %-10s %-10s %-10s" - print print_format % ( + print(print_format % ( _('Quota'), _('Limit'), _('In Use'), - _('Reserved')) + _('Reserved'))) # Retrieve the quota after update if user_id: quota = QUOTAS.get_user_quotas(ctxt, project_id, user_id) @@ -281,8 +283,8 @@ class ProjectCommands(object): for key, value in quota.iteritems(): if value['limit'] < 0 or value['limit'] is None: value['limit'] = 'unlimited' - print print_format % (key, value['limit'], value['in_use'], - value['reserved']) + print(print_format % (key, value['limit'], value['in_use'], + value['reserved'])) @args('--project', dest='project_id', metavar='', help='Project name') @@ -315,7 +317,7 @@ class FixedIpCommands(object): fixed_ips = db.fixed_ip_get_by_host(ctxt, host) except exception.NotFound as ex: - print _("error: %s") % ex + print(_("error: %s") % ex) return(2) instances = db.instance_get_all(context.get_admin_context()) @@ -323,10 +325,10 @@ class FixedIpCommands(object): for instance in instances: instances_by_uuid[instance['uuid']] = instance - print "%-18s\t%-15s\t%-15s\t%s" % (_('network'), + print("%-18s\t%-15s\t%-15s\t%s" % (_('network'), _('IP address'), _('hostname'), - _('host')) + _('host'))) all_networks = {} try: @@ -338,7 +340,7 @@ class FixedIpCommands(object): except exception.NoNetworksFound: # do not have any networks, so even if there are IPs, these # IPs should have been deleted ones, so return. - print _('No fixed IP found.') + print(_('No fixed IP found.')) return has_ip = False @@ -354,15 +356,15 @@ class FixedIpCommands(object): hostname = instance['hostname'] host = instance['host'] else: - print _('WARNING: fixed ip %s allocated to missing' - ' instance') % str(fixed_ip['address']) - print "%-18s\t%-15s\t%-15s\t%s" % ( + print(_('WARNING: fixed ip %s allocated to missing' + ' instance') % str(fixed_ip['address'])) + print("%-18s\t%-15s\t%-15s\t%s" % ( network['cidr'], fixed_ip['address'], - hostname, host) + hostname, host)) if not has_ip: - print _('No fixed IP found.') + print(_('No fixed IP found.')) @args('--address', metavar='', help='IP address') def reserve(self, address): @@ -390,7 +392,7 @@ class FixedIpCommands(object): db.fixed_ip_update(ctxt, fixed_ip['address'], {'reserved': reserved}) except exception.NotFound as ex: - print _("error: %s") % ex + print(_("error: %s") % ex) return(2) @@ -468,7 +470,7 @@ class FloatingIpCommands(object): else: floating_ips = db.floating_ip_get_all_by_host(ctxt, host) except exception.NoFloatingIpsDefined: - print _("No floating IP addresses have been defined.") + print(_("No floating IP addresses have been defined.")) return for floating_ip in floating_ips: instance_uuid = None @@ -476,11 +478,11 @@ class FloatingIpCommands(object): fixed_ip = db.fixed_ip_get(ctxt, floating_ip['fixed_ip_id']) instance_uuid = fixed_ip['instance_uuid'] - print "%s\t%s\t%s\t%s\t%s" % (floating_ip['project_id'], + print("%s\t%s\t%s\t%s\t%s" % (floating_ip['project_id'], floating_ip['address'], instance_uuid, floating_ip['pool'], - floating_ip['interface']) + floating_ip['interface'])) class NetworkCommands(object): @@ -530,7 +532,7 @@ class NetworkCommands(object): def list(self): """List all created networks.""" _fmt = "%-5s\t%-18s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s\t%-15s" - print _fmt % (_('id'), + print(_fmt % (_('id'), _('IPv4'), _('IPv6'), _('start address'), @@ -538,17 +540,17 @@ class NetworkCommands(object): _('DNS2'), _('VlanID'), _('project'), - _("uuid")) + _("uuid"))) try: # Since network_get_all can throw exception.NoNetworksFound # for this command to show a nice result, this exception # should be caught and handled as such. networks = db.network_get_all(context.get_admin_context()) except exception.NoNetworksFound: - print _('No networks found') + print(_('No networks found')) else: for network in networks: - print _fmt % (network.id, + print(_fmt % (network.id, network.cidr, network.cidr_v6, network.dhcp_start, @@ -556,7 +558,7 @@ class NetworkCommands(object): network.dns2, network.vlan, network.project_id, - network.uuid) + network.uuid)) @args('--fixed_range', metavar='', help='Network to delete') @args('--uuid', metavar='', help='UUID of network to delete') @@ -634,7 +636,7 @@ class VmCommands(object): def list(self, host=None): """Show a list of all instances.""" - print ("%-10s %-15s %-10s %-10s %-26s %-9s %-9s %-9s" + print(("%-10s %-15s %-10s %-10s %-26s %-9s %-9s %-9s" " %-10s %-10s %-10s %-5s" % (_('instance'), _('node'), _('type'), @@ -646,7 +648,7 @@ class VmCommands(object): _('project'), _('user'), _('zone'), - _('index'))) + _('index')))) if host is None: instances = db.instance_get_all(context.get_admin_context()) @@ -656,7 +658,7 @@ class VmCommands(object): for instance in instances: instance_type = flavors.extract_flavor(instance) - print ("%-10s %-15s %-10s %-10s %-26s %-9s %-9s %-9s" + print(("%-10s %-15s %-10s %-10s %-26s %-9s %-9s %-9s" " %-10s %-10s %-10s %-5d" % (instance['display_name'], instance['host'], instance_type['name'], @@ -668,7 +670,7 @@ class VmCommands(object): instance['project_id'], instance['user_id'], instance['availability_zone'], - instance['launch_index'])) + instance['launch_index']))) class ServiceCommands(object): @@ -689,22 +691,22 @@ class ServiceCommands(object): if service: services = [s for s in services if s['binary'] == service] print_format = "%-16s %-36s %-16s %-10s %-5s %-10s" - print print_format % ( + print(print_format % ( _('Binary'), _('Host'), _('Zone'), _('Status'), _('State'), - _('Updated_At')) + _('Updated_At'))) for svc in services: alive = servicegroup_api.service_is_up(svc) art = (alive and ":-)") or "XXX" active = 'enabled' if svc['disabled']: active = 'disabled' - print print_format % (svc['binary'], svc['host'], + print(print_format % (svc['binary'], svc['host'], svc['availability_zone'], active, art, - svc['updated_at']) + svc['updated_at'])) @args('--host', metavar='', help='Host') @args('--service', metavar='', help='Nova service') @@ -715,10 +717,10 @@ class ServiceCommands(object): svc = db.service_get_by_args(ctxt, host, service) db.service_update(ctxt, svc['id'], {'disabled': False}) except exception.NotFound as ex: - print _("error: %s") % ex + print(_("error: %s") % ex) return(2) - print (_("Service %(service)s on host %(host)s enabled.") % - {'service': service, 'host': host}) + print((_("Service %(service)s on host %(host)s enabled.") % + {'service': service, 'host': host})) @args('--host', metavar='', help='Host') @args('--service', metavar='', help='Nova service') @@ -729,10 +731,10 @@ class ServiceCommands(object): svc = db.service_get_by_args(ctxt, host, service) db.service_update(ctxt, svc['id'], {'disabled': True}) except exception.NotFound as ex: - print _("error: %s") % ex + print(_("error: %s") % ex) return(2) - print (_("Service %(service)s on host %(host)s disabled.") % - {'service': service, 'host': host}) + print((_("Service %(service)s on host %(host)s disabled.") % + {'service': service, 'host': host})) def _show_host_resources(self, context, host): """Shows the physical/usage resource given by hosts. @@ -799,27 +801,27 @@ class ServiceCommands(object): host=host) if not isinstance(result, dict): - print _('An unexpected error has occurred.') - print _('[Result]'), result + print(_('An unexpected error has occurred.')) + print(_('[Result]'), result) else: # Printing a total and used_now # (NOTE)The host name width 16 characters - print '%(a)-25s%(b)16s%(c)8s%(d)8s%(e)8s' % {"a": _('HOST'), + print('%(a)-25s%(b)16s%(c)8s%(d)8s%(e)8s' % {"a": _('HOST'), "b": _('PROJECT'), "c": _('cpu'), "d": _('mem(mb)'), - "e": _('hdd')} - print ('%(a)-16s(total)%(b)26s%(c)8s%(d)8s' % + "e": _('hdd')}) + print(('%(a)-16s(total)%(b)26s%(c)8s%(d)8s' % {"a": host, "b": result['resource']['vcpus'], "c": result['resource']['memory_mb'], - "d": result['resource']['local_gb']}) + "d": result['resource']['local_gb']})) - print ('%(a)-16s(used_now)%(b)23s%(c)8s%(d)8s' % + print(('%(a)-16s(used_now)%(b)23s%(c)8s%(d)8s' % {"a": host, "b": result['resource']['vcpus_used'], "c": result['resource']['memory_mb_used'], - "d": result['resource']['local_gb_used']}) + "d": result['resource']['local_gb_used']})) # Printing a used_max cpu_sum = 0 @@ -830,18 +832,18 @@ class ServiceCommands(object): mem_sum += val['memory_mb'] hdd_sum += val['root_gb'] hdd_sum += val['ephemeral_gb'] - print '%(a)-16s(used_max)%(b)23s%(c)8s%(d)8s' % {"a": host, + print('%(a)-16s(used_max)%(b)23s%(c)8s%(d)8s' % {"a": host, "b": cpu_sum, "c": mem_sum, - "d": hdd_sum} + "d": hdd_sum}) for p_id, val in result['usage'].items(): - print '%(a)-25s%(b)16s%(c)8s%(d)8s%(e)8s' % { + print('%(a)-25s%(b)16s%(c)8s%(d)8s%(e)8s' % { "a": host, "b": p_id, "c": val['vcpus'], "d": val['memory_mb'], - "e": val['root_gb'] + val['ephemeral_gb']} + "e": val['root_gb'] + val['ephemeral_gb']}) class HostCommands(object): @@ -851,8 +853,8 @@ class HostCommands(object): """Show a list of all physical hosts. Filter by zone. args: [zone] """ - print "%-25s\t%-15s" % (_('host'), - _('zone')) + print("%-25s\t%-15s" % (_('host'), + _('zone'))) ctxt = context.get_admin_context() services = db.service_get_all(ctxt) services = availability_zones.set_availability_zones(ctxt, services) @@ -864,7 +866,7 @@ class HostCommands(object): hosts.append(srv) for h in hosts: - print "%-25s\t%-15s" % (h['host'], h['availability_zone']) + print("%-25s\t%-15s" % (h['host'], h['availability_zone'])) class DbCommands(object): @@ -880,7 +882,7 @@ class DbCommands(object): def version(self): """Print the current database version.""" - print migration.db_version() + print(migration.db_version()) @args('--max_rows', metavar='', help='Maximum number of deleted rows to archive') @@ -891,7 +893,7 @@ class DbCommands(object): if max_rows is not None: max_rows = int(max_rows) if max_rows < 0: - print _("Must supply a positive value for max_rows") + print(_("Must supply a positive value for max_rows")) return(1) admin_context = context.get_admin_context() db.archive_deleted_rows(admin_context, max_rows) @@ -905,11 +907,11 @@ class FlavorCommands(object): def _print_flavors(self, name, val): is_public = ('private', 'public')[val["is_public"] == 1] - print ("%s: Memory: %sMB, VCPUS: %s, Root: %sGB, Ephemeral: %sGb, " + print(("%s: Memory: %sMB, VCPUS: %s, Root: %sGB, Ephemeral: %sGb, " "FlavorID: %s, Swap: %sMB, RXTX Factor: %s, %s, ExtraSpecs %s") % ( name, val["memory_mb"], val["vcpus"], val["root_gb"], val["ephemeral_gb"], val["flavorid"], val["swap"], - val["rxtx_factor"], is_public, val["extra_specs"]) + val["rxtx_factor"], is_public, val["extra_specs"])) @args('--name', metavar='', help='Name of flavor') @@ -933,22 +935,22 @@ class FlavorCommands(object): swap=swap, rxtx_factor=rxtx_factor, is_public=is_public) except exception.InvalidInput as e: - print _("Must supply valid parameters to create flavor") - print e - return(1) + print(_("Must supply valid parameters to create flavor")) + print(e) + return 1 except exception.InstanceTypeExists: - print _("Flavor exists.") - print _("Please ensure flavor name and flavorid are " - "unique.") - print _("Currently defined flavor names and flavorids:") - print + print(_("Flavor exists.")) + print(_("Please ensure flavor name and flavorid are " + "unique.")) + print(_("Currently defined flavor names and flavorids:")) + print() self.list() - return(2) + return 2 except Exception: - print _("Unknown error") - return(3) + print(_("Unknown error")) + return 3 else: - print _("%s created") % name + print(_("%s created") % name) @args('--name', metavar='', help='Name of flavor') def delete(self, name): @@ -956,15 +958,15 @@ class FlavorCommands(object): try: flavors.destroy(name) except exception.InstanceTypeNotFound: - print _("Valid flavor name is required") - return(1) + print(_("Valid flavor name is required")) + return 1 except db_exc.DBError as e: - print _("DB Error: %s") % e + print(_("DB Error: %s") % e) return(2) except Exception: return(3) else: - print _("%s deleted") % name + print(_("%s deleted") % name) @args('--name', metavar='', help='Name of flavor') def list(self, name=None): @@ -991,7 +993,7 @@ class FlavorCommands(object): try: inst_type = flavors.get_flavor_by_name(name) except exception.InstanceTypeNotFoundByName as e: - print e + print(e) return(2) ctxt = context.get_admin_context() @@ -1000,9 +1002,9 @@ class FlavorCommands(object): ctxt, inst_type["flavorid"], ext_spec) - print (_("Key %(key)s set to %(value)s on instance " + print((_("Key %(key)s set to %(value)s on instance " "type %(name)s") % - {'key': key, 'value': value, 'name': name}) + {'key': key, 'value': value, 'name': name})) except db_exc.DBError as e: _db_error(e) @@ -1014,7 +1016,7 @@ class FlavorCommands(object): try: inst_type = flavors.get_flavor_by_name(name) except exception.InstanceTypeNotFoundByName as e: - print e + print(e) return(2) ctxt = context.get_admin_context() @@ -1023,8 +1025,8 @@ class FlavorCommands(object): inst_type["flavorid"], key) - print (_("Key %(key)s on flavor %(name)s unset") % - {'key': key, 'name': name}) + print((_("Key %(key)s on flavor %(name)s unset") % + {'key': key, 'name': name})) except db_exc.DBError as e: _db_error(e) @@ -1084,12 +1086,12 @@ class AgentBuildCommands(object): if hypervisor and key != hypervisor: continue - print _('Hypervisor: %s') % key - print fmt % ('-' * 10, '-' * 8, '-' * 12, '-' * 32) + print(_('Hypervisor: %s') % key) + print(fmt % ('-' * 10, '-' * 8, '-' * 12, '-' * 32)) for agent_build in buildlist: - print fmt % (agent_build.os, agent_build.architecture, - agent_build.version, agent_build.md5hash) - print ' %s' % agent_build.url + print(fmt % (agent_build.os, agent_build.architecture, + agent_build.version, agent_build.md5hash)) + print(' %s' % agent_build.url) print @@ -1130,13 +1132,13 @@ class GetLogCommands(object): if line.find(" ERROR ") > 0: error_found += 1 if print_name == 0: - print log_file + ":-" + print(log_file + ":-") print_name = 1 linenum = len(lines) - index - print (_('Line %(linenum)d : %(line)s') % - {'linenum': linenum, 'line': line}) + print((_('Line %(linenum)d : %(line)s') % + {'linenum': linenum, 'line': line})) if error_found == 0: - print _('No errors in logfiles!') + print(_('No errors in logfiles!')) @args('--num_entries', metavar='', help='number of entries(default: 10)') @@ -1150,20 +1152,20 @@ class GetLogCommands(object): elif os.path.exists('/var/log/messages'): log_file = '/var/log/messages' else: - print _('Unable to find system log file!') + print(_('Unable to find system log file!')) return(1) lines = [line.strip() for line in open(log_file, "r")] lines.reverse() - print _('Last %s nova syslog entries:-') % (entries) + print(_('Last %s nova syslog entries:-') % (entries)) for line in lines: if line.find("nova") > 0: count += 1 - print "%s" % (line) + print("%s" % (line)) if count == entries: break if count == 0: - print _('No nova entries in syslog!') + print(_('No nova entries in syslog!')) class CellCommands(object): @@ -1189,7 +1191,7 @@ class CellCommands(object): woffset=None, wscale=None): if cell_type not in ['parent', 'child']: - print "Error: cell type must be 'parent' or 'child'" + print("Error: cell type must be 'parent' or 'child'") return(2) # Set up the transport URL @@ -1221,18 +1223,18 @@ class CellCommands(object): ctxt = context.get_admin_context() cells = db.cell_get_all(ctxt) fmt = "%3s %-10s %-6s %-10s %-15s %-5s %-10s" - print fmt % ('Id', 'Name', 'Type', 'Username', 'Hostname', - 'Port', 'VHost') - print fmt % ('-' * 3, '-' * 10, '-' * 6, '-' * 10, '-' * 15, - '-' * 5, '-' * 10) + print(fmt % ('Id', 'Name', 'Type', 'Username', 'Hostname', + 'Port', 'VHost')) + print(fmt % ('-' * 3, '-' * 10, '-' * 6, '-' * 10, '-' * 15, + '-' * 5, '-' * 10)) for cell in cells: transport = rpc_driver.parse_transport_url(cell.transport_url) - print fmt % (cell.id, cell.name, + print(fmt % (cell.id, cell.name, 'parent' if cell.is_parent else 'child', transport['username'], transport['hostname'], - transport['port'], transport['virtual_host']) - print fmt % ('-' * 3, '-' * 10, '-' * 6, '-' * 10, '-' * 15, - '-' * 5, '-' * 10) + transport['port'], transport['virtual_host'])) + print(fmt % ('-' * 3, '-' * 10, '-' * 6, '-' * 10, '-' * 15, + '-' * 5, '-' * 10)) CATEGORIES = { @@ -1321,27 +1323,27 @@ def main(): cfgfile = CONF.config_file[-1] if CONF.config_file else None if cfgfile and not os.access(cfgfile, os.R_OK): st = os.stat(cfgfile) - print _("Could not read %s. Re-running with sudo") % cfgfile + print(_("Could not read %s. Re-running with sudo") % cfgfile) try: os.execvp('sudo', ['sudo', '-u', '#%s' % st.st_uid] + sys.argv) except Exception: - print _('sudo failed, continuing as if nothing happened') + print(_('sudo failed, continuing as if nothing happened')) - print _('Please re-run nova-manage as root.') + print(_('Please re-run nova-manage as root.')) return(2) if CONF.category.name == "version": - print version.version_string_with_package() + print(version.version_string_with_package()) return(0) if CONF.category.name == "bash-completion": if not CONF.category.query_category: - print " ".join(CATEGORIES.keys()) + print(" ".join(CATEGORIES.keys())) elif CONF.category.query_category in CATEGORIES: fn = CATEGORIES[CONF.category.query_category] command_object = fn() actions = methods_of(command_object) - print " ".join([k for (k, v) in actions]) + print(" ".join([k for (k, v) in actions])) return(0) fn = CONF.category.action_fn @@ -1363,14 +1365,14 @@ def main(): # NOTE(mikal): this isn't the most helpful error message ever. It is # long, and tells you a lot of things you probably don't want to know # if you just got a single arg wrong. - print fn.__doc__ + print(fn.__doc__) CONF.print_help() - print e + print(e) return(1) try: ret = fn(*fn_args, **fn_kwargs) rpc.cleanup() return(ret) except Exception: - print _("Command failed, please check log for more info") + print(_("Command failed, please check log for more info")) raise diff --git a/nova/cmd/novncproxy.py b/nova/cmd/novncproxy.py index 21d878651120..c19d24981b36 100644 --- a/nova/cmd/novncproxy.py +++ b/nova/cmd/novncproxy.py @@ -20,6 +20,8 @@ Websocket proxy that is compatible with OpenStack Nova noVNC consoles. Leverages websockify.py by Joel Martin """ +from __future__ import print_function + import os import sys @@ -55,12 +57,12 @@ def main(): config.parse_args(sys.argv) if CONF.ssl_only and not os.path.exists(CONF.cert): - print "SSL only and %s not found" % CONF.cert + print("SSL only and %s not found" % CONF.cert) return(-1) # Check to see if novnc html/js/css files are present if not os.path.exists(CONF.web): - print "Can not find novnc html/js/css files at %s." % CONF.web + print("Can not find novnc html/js/css files at %s." % CONF.web) return(-1) # Create and start the NovaWebSockets proxy diff --git a/nova/cmd/spicehtml5proxy.py b/nova/cmd/spicehtml5proxy.py index 561c6e7aa67b..76cca61c98d2 100644 --- a/nova/cmd/spicehtml5proxy.py +++ b/nova/cmd/spicehtml5proxy.py @@ -20,6 +20,8 @@ Websocket proxy that is compatible with OpenStack Nova SPICE HTML5 consoles. Leverages websockify.py by Joel Martin """ +from __future__ import print_function + import os import sys @@ -53,12 +55,12 @@ def main(): config.parse_args(sys.argv) if CONF.ssl_only and not os.path.exists(CONF.cert): - print "SSL only and %s not found." % CONF.cert + print("SSL only and %s not found." % CONF.cert) return(-1) # Check to see if spice html/js/css files are present if not os.path.exists(CONF.web): - print "Can not find spice html/js/css files at %s." % CONF.web + print("Can not find spice html/js/css files at %s." % CONF.web) return(-1) # Create and start the NovaWebSockets proxy diff --git a/nova/wsgi.py b/nova/wsgi.py index 7e88e6b8bbe3..bb3d82ecba93 100644 --- a/nova/wsgi.py +++ b/nova/wsgi.py @@ -19,6 +19,8 @@ """Utility methods for working with WSGI servers.""" +from __future__ import print_function + import os.path import socket import sys @@ -371,15 +373,15 @@ class Debug(Middleware): @webob.dec.wsgify(RequestClass=Request) def __call__(self, req): - print ('*' * 40) + ' REQUEST ENVIRON' + print(('*' * 40) + ' REQUEST ENVIRON') for key, value in req.environ.items(): - print key, '=', value - print + print(key, '=', value) + print() resp = req.get_response(self.application) - print ('*' * 40) + ' RESPONSE HEADERS' + print(('*' * 40) + ' RESPONSE HEADERS') for (key, value) in resp.headers.iteritems(): - print key, '=', value + print(key, '=', value) print resp.app_iter = self.print_generator(resp.app_iter) @@ -389,12 +391,12 @@ class Debug(Middleware): @staticmethod def print_generator(app_iter): """Iterator that prints the contents of a wrapper string.""" - print ('*' * 40) + ' BODY' + print(('*' * 40) + ' BODY') for part in app_iter: sys.stdout.write(part) sys.stdout.flush() yield part - print + print() class Router(object): diff --git a/smoketests/run_tests.py b/smoketests/run_tests.py index fb429f7ff989..e8caff4c77d1 100644 --- a/smoketests/run_tests.py +++ b/smoketests/run_tests.py @@ -55,6 +55,8 @@ To run a single test module: """ +from __future__ import print_function + import os import sys import unittest @@ -295,9 +297,9 @@ class NovaTestRunner(core.TextTestRunner): if __name__ == '__main__': if not os.getenv('EC2_ACCESS_KEY'): - print _('Missing EC2 environment variables. Please ' + print(_('Missing EC2 environment variables. Please ' 'source the appropriate novarc file before ' - 'running this test.') + 'running this test.')) sys.exit(1) argv = FLAGS(sys.argv) diff --git a/tox.ini b/tox.ini index b247e45ea97e..4bbc1d03b548 100644 --- a/tox.ini +++ b/tox.ini @@ -43,10 +43,9 @@ commands = {posargs} [flake8] # TODO Hacking 0.6 checks to fix # H102 Apache 2.0 license header not found -# H233 Python 3.x incompatible use of print operator # H501 Do not use locals() for string formatting -ignore = E121,E122,E123,E124,E126,E127,E128,E711,E712,H102,H233,H302,H303,H404,F403,H501,F811,F841,N309 +ignore = E121,E122,E123,E124,E126,E127,E128,E711,E712,H102,H302,H303,H404,F403,H501,F811,F841,N309 exclude = .venv,.git,.tox,dist,doc,*openstack/common*,*lib/python*,*egg,build,*plugins/xenserver*,tools [hacking]