Skip to content

Commit

Permalink
python: Convert dict iterators.
Browse files Browse the repository at this point in the history
In Python 2, dict.items(), dict.keys(), and dict.values() returned a
list.  dict.iteritems(), dict.iterkeys(), and dict.itervalues() returned
an iterator.

As of Python 3, dict.iteritems(), dict.itervalues(), and dict.iterkeys()
are gone.  items(), keys(), and values() now return an iterator.

In the case where we want an iterator, we now use the six.iter*()
helpers.  If we want a list, we explicitly create a list from the
iterator.

Signed-off-by: Russell Bryant <russell@ovn.org>
Acked-by: Ben Pfaff <blp@ovn.org>
  • Loading branch information
russellb committed Jan 22, 2016
1 parent f7683a7 commit cb96c1b
Show file tree
Hide file tree
Showing 12 changed files with 81 additions and 67 deletions.
13 changes: 7 additions & 6 deletions debian/ovs-monitor-ipsec
Expand Up @@ -40,6 +40,7 @@ import ovs.unixctl
import ovs.unixctl.server
import ovs.vlog
from six.moves import range
import six

vlog = ovs.vlog.Vlog("ovs-monitor-ipsec")
root_prefix = '' # Prefix for absolute file names, for testing.
Expand Down Expand Up @@ -152,7 +153,7 @@ path certificate "%s";
conf_file = open(root_prefix + self.conf_file, 'w')
conf_file.write(Racoon.conf_header % (self.psk_file, self.cert_dir))

for host, vals in self.cert_hosts.iteritems():
for host, vals in six.iteritems(self.cert_hosts):
conf_file.write(Racoon.cert_entry % (host, vals["certificate"],
vals["private_key"], vals["peer_cert_file"]))

Expand All @@ -169,7 +170,7 @@ path certificate "%s";

psk_file.write("# Generated by Open vSwitch...do not modify by hand!")
psk_file.write("\n\n")
for host, vals in self.psk_hosts.iteritems():
for host, vals in six.iteritems(self.psk_hosts):
psk_file.write("%s %s\n" % (host, vals["psk"]))
psk_file.close()

Expand Down Expand Up @@ -354,11 +355,11 @@ class IPsec:


def update_ipsec(ipsec, interfaces, new_interfaces):
for name, vals in interfaces.iteritems():
for name, vals in six.iteritems(interfaces):
if name not in new_interfaces:
ipsec.del_entry(vals["local_ip"], vals["remote_ip"])

for name, vals in new_interfaces.iteritems():
for name, vals in six.iteritems(new_interfaces):
orig_vals = interfaces.get(name)
if orig_vals:
# Configuration for this host already exists. Check if it's
Expand All @@ -377,7 +378,7 @@ def update_ipsec(ipsec, interfaces, new_interfaces):


def get_ssl_cert(data):
for ovs_rec in data["Open_vSwitch"].rows.itervalues():
for ovs_rec in data["Open_vSwitch"].rows.values():
if ovs_rec.ssl:
ssl = ovs_rec.ssl[0]
if ssl.certificate and ssl.private_key:
Expand Down Expand Up @@ -440,7 +441,7 @@ def main():
ssl_cert = get_ssl_cert(idl.tables)

new_interfaces = {}
for rec in idl.tables["Interface"].rows.itervalues():
for rec in six.itervalues(idl.tables["Interface"].rows):
if rec.type == "ipsec_gre":
name = rec.name
options = rec.options
Expand Down
2 changes: 1 addition & 1 deletion python/build/nroff.py
Expand Up @@ -89,7 +89,7 @@ def inline_xml_to_nroff(node, font, to_upper=False, newline='\n'):
s += node.attributes['db'].nodeValue
else:
raise error.Error("'ref' lacks required attributes: %s"
% node.attributes.keys())
% list(node.attributes.keys()))
return s + font
elif node.tagName in ['var', 'dfn', 'i']:
s = r'\fI'
Expand Down
18 changes: 10 additions & 8 deletions python/ovs/db/data.py
Expand Up @@ -15,6 +15,8 @@
import re
import uuid

import six

import ovs.poller
import ovs.socket_util
import ovs.json
Expand Down Expand Up @@ -293,7 +295,7 @@ def check_constraints(self):
This function is not commonly useful because the most ordinary way to
obtain a datum is ultimately via Datum.from_json() or Atom.from_json(),
which check constraints themselves."""
for keyAtom, valueAtom in self.values.iteritems():
for keyAtom, valueAtom in six.iteritems(self.values):
keyAtom.check_constraints(self.type.key)
if valueAtom is not None:
valueAtom.check_constraints(self.type.value)
Expand Down Expand Up @@ -354,7 +356,7 @@ def to_json(self):
return ["map", [[k.to_json(), v.to_json()]
for k, v in sorted(self.values.items())]]
elif len(self.values) == 1:
key = self.values.keys()[0]
key = next(six.iterkeys(self.values))
return key.to_json()
else:
return ["set", [k.to_json() for k in sorted(self.values.keys())]]
Expand Down Expand Up @@ -388,20 +390,20 @@ def to_string(self):

def as_list(self):
if self.type.is_map():
return [[k.value, v.value] for k, v in self.values.iteritems()]
return [[k.value, v.value] for k, v in six.iteritems(self.values)]
else:
return [k.value for k in self.values.iterkeys()]
return [k.value for k in six.iterkeys(self.values)]

def as_dict(self):
return dict(self.values)

def as_scalar(self):
if len(self.values) == 1:
if self.type.is_map():
k, v = self.values.iteritems()[0]
k, v = next(six.iteritems(self.values))
return [k.value, v.value]
else:
return self.values.keys()[0].value
return next(six.iterkeys(self.values)).value
else:
return None

Expand Down Expand Up @@ -448,7 +450,7 @@ def to_python(self, uuid_to_row):
return value
elif self.type.is_map():
value = {}
for k, v in self.values.iteritems():
for k, v in six.iteritems(self.values):
dk = uuid_to_row(k.value, self.type.key)
dv = uuid_to_row(v.value, self.type.value)
if dk is not None and dv is not None:
Expand Down Expand Up @@ -476,7 +478,7 @@ def from_python(type_, value, row_to_uuid):
'type_'."""
d = {}
if type(value) == dict:
for k, v in value.iteritems():
for k, v in six.iteritems(value):
ka = Atom.from_python(type_.key, row_to_uuid(k))
va = Atom.from_python(type_.value, row_to_uuid(v))
d[ka] = va
Expand Down
34 changes: 18 additions & 16 deletions python/ovs/db/idl.py
Expand Up @@ -14,6 +14,8 @@

import uuid

import six

import ovs.jsonrpc
import ovs.db.parser
import ovs.db.schema
Expand Down Expand Up @@ -124,8 +126,8 @@ def __init__(self, remote, schema):
self.txn = None
self._outstanding_txns = {}

for table in schema.tables.itervalues():
for column in table.columns.itervalues():
for table in six.itervalues(schema.tables):
for column in six.itervalues(table.columns):
if not hasattr(column, 'alert'):
column.alert = True
table.need_table = False
Expand Down Expand Up @@ -283,7 +285,7 @@ def notify(self, event, row, updates=None):
def __clear(self):
changed = False

for table in self.tables.itervalues():
for table in six.itervalues(self.tables):
if table.rows:
changed = True
table.rows = {}
Expand Down Expand Up @@ -338,9 +340,9 @@ def __parse_lock_notify(self, params, new_has_lock):

def __send_monitor_request(self):
monitor_requests = {}
for table in self.tables.itervalues():
for table in six.itervalues(self.tables):
columns = []
for column in table.columns.keys():
for column in six.iterkeys(table.columns):
if ((table.name not in self.readonly) or
(table.name in self.readonly) and
(column not in self.readonly[table.name])):
Expand All @@ -363,7 +365,7 @@ def __do_parse_update(self, table_updates):
raise error.Error("<table-updates> is not an object",
table_updates)

for table_name, table_update in table_updates.iteritems():
for table_name, table_update in six.iteritems(table_updates):
table = self.tables.get(table_name)
if not table:
raise error.Error('<table-updates> includes unknown '
Expand All @@ -373,7 +375,7 @@ def __do_parse_update(self, table_updates):
raise error.Error('<table-update> for table "%s" is not '
'an object' % table_name, table_update)

for uuid_string, row_update in table_update.iteritems():
for uuid_string, row_update in six.iteritems(table_update):
if not ovs.ovsuuid.is_valid_string(uuid_string):
raise error.Error('<table-update> for table "%s" '
'contains bad UUID "%s" as member '
Expand Down Expand Up @@ -441,7 +443,7 @@ def __process_update(self, table, uuid, old, new):

def __row_update(self, table, row, row_json):
changed = False
for column_name, datum_json in row_json.iteritems():
for column_name, datum_json in six.iteritems(row_json):
column = table.columns.get(column_name)
if not column:
# XXX rate-limit
Expand Down Expand Up @@ -469,7 +471,7 @@ def __row_update(self, table, row, row_json):

def __create_row(self, table, uuid):
data = {}
for column in table.columns.itervalues():
for column in six.itervalues(table.columns):
data[column.name] = ovs.db.data.Datum.default(column.type)
row = table.rows[uuid] = Row(self, table, uuid, data)
return row
Expand Down Expand Up @@ -610,7 +612,7 @@ def __setattr__(self, column_name, value):
@classmethod
def from_json(cls, idl, table, uuid, row_json):
data = {}
for column_name, datum_json in row_json.iteritems():
for column_name, datum_json in six.iteritems(row_json):
column = table.columns.get(column_name)
if not column:
# XXX rate-limit
Expand Down Expand Up @@ -840,7 +842,7 @@ def _substitute_uuids(self, json):
def __disassemble(self):
self.idl.txn = None

for row in self._txn_rows.itervalues():
for row in six.itervalues(self._txn_rows):
if row._changes is None:
row._table.rows[row.uuid] = row
elif row._data is None:
Expand Down Expand Up @@ -919,7 +921,7 @@ def commit(self):
"lock": self.idl.lock_name})

# Add prerequisites and declarations of new rows.
for row in self._txn_rows.itervalues():
for row in six.itervalues(self._txn_rows):
if row._prereqs:
rows = {}
columns = []
Expand All @@ -936,7 +938,7 @@ def commit(self):

# Add updates.
any_updates = False
for row in self._txn_rows.itervalues():
for row in six.itervalues(self._txn_rows):
if row._changes is None:
if row._table.is_root:
operations.append({"op": "delete",
Expand All @@ -962,7 +964,7 @@ def commit(self):
row_json = {}
op["row"] = row_json

for column_name, datum in row._changes.iteritems():
for column_name, datum in six.iteritems(row._changes):
if row._data is not None or not datum.is_default():
row_json[column_name] = (
self._substitute_uuids(datum.to_json()))
Expand Down Expand Up @@ -1190,7 +1192,7 @@ def _process_reply(self, msg):
else:
hard_errors = True

for insert in self._inserted_rows.itervalues():
for insert in six.itervalues(self._inserted_rows):
if not self.__process_insert_reply(insert, ops):
hard_errors = True

Expand Down Expand Up @@ -1390,7 +1392,7 @@ def get_idl_schema(self):

if not self._all:
schema_tables = {}
for table, columns in self._tables.iteritems():
for table, columns in six.iteritems(self._tables):
schema_tables[table] = (
self._keep_table_columns(schema, table, columns))

Expand Down
18 changes: 10 additions & 8 deletions python/ovs/db/schema.py
Expand Up @@ -15,6 +15,8 @@
import re
import sys

import six

from ovs.db import error
import ovs.db.parser
import ovs.db.types
Expand All @@ -40,23 +42,23 @@ def __init__(self, name, version, tables):
# backward compatibility, if the root set is empty then assume that
# every table is in the root set.
if self.__root_set_size() == 0:
for table in self.tables.itervalues():
for table in six.itervalues(self.tables):
table.is_root = True

# Find the "ref_table"s referenced by "ref_table_name"s.
#
# Also force certain columns to be persistent, as explained in
# __check_ref_table(). This requires 'is_root' to be known, so this
# must follow the loop updating 'is_root' above.
for table in self.tables.itervalues():
for column in table.columns.itervalues():
for table in six.itervalues(self.tables):
for column in six.itervalues(table.columns):
self.__follow_ref_table(column, column.type.key, "key")
self.__follow_ref_table(column, column.type.value, "value")

def __root_set_size(self):
"""Returns the number of tables in the schema's root set."""
n_root = 0
for table in self.tables.itervalues():
for table in six.itervalues(self.tables):
if table.is_root:
n_root += 1
return n_root
Expand All @@ -76,7 +78,7 @@ def from_json(json):
% version)

tables = {}
for tableName, tableJson in tablesJson.iteritems():
for tableName, tableJson in six.iteritems(tablesJson):
_check_id(tableName, json)
tables[tableName] = TableSchema.from_json(tableJson, tableName)

Expand All @@ -90,7 +92,7 @@ def to_json(self):
default_is_root = self.__root_set_size() == len(self.tables)

tables = {}
for table in self.tables.itervalues():
for table in six.itervalues(self.tables):
tables[table.name] = table.to_json(default_is_root)
json = {"name": self.name, "tables": tables}
if self.version:
Expand Down Expand Up @@ -191,7 +193,7 @@ def from_json(json, name):
raise error.Error("table must have at least one column", json)

columns = {}
for column_name, column_json in columns_json.iteritems():
for column_name, column_json in six.iteritems(columns_json):
_check_id(column_name, json)
columns[column_name] = ColumnSchema.from_json(column_json,
column_name)
Expand Down Expand Up @@ -230,7 +232,7 @@ def to_json(self, default_is_root=False):
json["isRoot"] = self.is_root

json["columns"] = columns = {}
for column in self.columns.itervalues():
for column in six.itervalues(self.columns):
if not column.name.startswith("_"):
columns[column.name] = column.to_json()

Expand Down
3 changes: 2 additions & 1 deletion python/ovs/json.py
Expand Up @@ -16,6 +16,7 @@
import StringIO
import sys

import six
from six.moves import range

__pychecker__ = 'no-stringiter'
Expand Down Expand Up @@ -73,7 +74,7 @@ def serialize(self, obj):
if self.sort_keys:
items = sorted(obj.items())
else:
items = obj.iteritems()
items = six.iteritems(obj)
for i, (key, value) in enumerate(items):
if i > 0:
self.stream.write(u",")
Expand Down
2 changes: 1 addition & 1 deletion python/ovs/poller.py
Expand Up @@ -85,7 +85,7 @@ def poll(self, timeout):
events_dict[fd] = events_dict.get(fd, 0) | (POLLERR |
POLLHUP |
POLLNVAL)
return events_dict.items()
return list(events_dict.items())


SelectPoll = _SelectSelect
Expand Down
4 changes: 3 additions & 1 deletion python/ovs/stream.py
Expand Up @@ -16,6 +16,8 @@
import os
import socket

import six

import ovs.poller
import ovs.socket_util
import ovs.vlog
Expand Down Expand Up @@ -58,7 +60,7 @@ def register_method(method, cls):

@staticmethod
def _find_method(name):
for method, cls in Stream._SOCKET_METHODS.items():
for method, cls in six.iteritems(Stream._SOCKET_METHODS):
if name.startswith(method):
return cls
return None
Expand Down

0 comments on commit cb96c1b

Please sign in to comment.