summaryrefslogtreecommitdiffstats
path: root/ipapython
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2015-08-11 13:51:14 +0200
committerJan Cholasta <jcholast@redhat.com>2015-09-01 11:42:01 +0200
commit3bf91eab25c602a6fad2665456f57e8629c5a6f4 (patch)
tree52f713e898a385d57a914d539a7da9a20fc20166 /ipapython
parentdd16cc98b0d67f1448bf9de25f8adce512b1431c (diff)
downloadfreeipa-3bf91eab25c602a6fad2665456f57e8629c5a6f4.tar.gz
freeipa-3bf91eab25c602a6fad2665456f57e8629c5a6f4.tar.xz
freeipa-3bf91eab25c602a6fad2665456f57e8629c5a6f4.zip
Use Python3-compatible dict method names
Python 2 has keys()/values()/items(), which return lists, iterkeys()/itervalues()/iteritems(), which return iterators, and viewkeys()/viewvalues()/viewitems() which return views. Python 3 has only keys()/values()/items(), which return views. To get iterators, one can use iter() or a for loop/comprehension; for lists there's the list() constructor. When iterating through the entire dict, without modifying the dict, the difference between Python 2's items() and iteritems() is negligible, especially on small dicts (the main overhead is extra memory, not CPU time). In the interest of simpler code, this patch changes many instances of iteritems() to items(), iterkeys() to keys() etc. In other cases, helpers like six.itervalues are used. Reviewed-By: Christian Heimes <cheimes@redhat.com> Reviewed-By: Jan Cholasta <jcholast@redhat.com>
Diffstat (limited to 'ipapython')
-rw-r--r--ipapython/config.py2
-rw-r--r--ipapython/dnssec/abshsm.py18
-rw-r--r--ipapython/dnssec/ldapkeydb.py6
-rwxr-xr-xipapython/dnssec/localhsm.py20
-rw-r--r--ipapython/dogtag.py2
-rw-r--r--ipapython/graph.py2
-rw-r--r--ipapython/install/cli.py2
-rw-r--r--ipapython/install/core.py2
-rw-r--r--ipapython/install/util.py4
-rw-r--r--ipapython/ipaldap.py16
-rw-r--r--ipapython/ipautil.py29
11 files changed, 54 insertions, 49 deletions
diff --git a/ipapython/config.py b/ipapython/config.py
index d586d66d6..76168f29e 100644
--- a/ipapython/config.py
+++ b/ipapython/config.py
@@ -105,7 +105,7 @@ class IPAOptionParser(OptionParser):
all_opts_dict = dict([ (o.dest, o) for o in self._get_all_options() if hasattr(o, 'sensitive') ])
safe_opts_dict = {}
- for option, value in opts.__dict__.iteritems():
+ for option, value in opts.__dict__.items():
if all_opts_dict[option].sensitive != True:
safe_opts_dict[option] = value
diff --git a/ipapython/dnssec/abshsm.py b/ipapython/dnssec/abshsm.py
index 80292e5a7..156bcf32c 100644
--- a/ipapython/dnssec/abshsm.py
+++ b/ipapython/dnssec/abshsm.py
@@ -41,7 +41,7 @@ attrs_id2name = {
_ipap11helper.CKA_WRAP_WITH_TRUSTED: 'ipk11wrapwithtrusted',
}
-attrs_name2id = dict(zip(attrs_id2name.values(), attrs_id2name.keys()))
+attrs_name2id = {v: k for k, v in attrs_id2name.items()}
# attribute:
# http://www.freeipa.org/page/V4/PKCS11_in_LDAP/Schema#ipk11KeyType
@@ -53,7 +53,7 @@ keytype_name2id = {
"aes": _ipap11helper.KEY_TYPE_AES,
}
-keytype_id2name = dict(zip(keytype_name2id.values(), keytype_name2id.keys()))
+keytype_id2name = {v: k for k, v in keytype_name2id.items()}
wrappingmech_name2id = {
"rsaPkcs": _ipap11helper.MECH_RSA_PKCS,
@@ -62,8 +62,7 @@ wrappingmech_name2id = {
"aesKeyWrapPad": _ipap11helper.MECH_AES_KEY_WRAP_PAD
}
-wrappingmech_id2name = dict(zip(wrappingmech_name2id.values(),
- wrappingmech_name2id.keys()))
+wrappingmech_id2name = {v: k for k, v in wrappingmech_name2id.items()}
bool_attr_names = set([
@@ -105,8 +104,7 @@ modifiable_attrs_id2name = {
_ipap11helper.CKA_WRAP: 'ipk11wrap',
}
-modifiable_attrs_name2id = dict(zip(modifiable_attrs_id2name.values(),
- modifiable_attrs_id2name.keys()))
+modifiable_attrs_name2id = {v: k for k, v in modifiable_attrs_id2name.items()}
def sync_pkcs11_metadata(log, source, target):
"""sync ipk11 metadata from source object to target object"""
@@ -148,7 +146,7 @@ def ldap2p11helper_api_params(ldap_key):
"ipk11wrapwithtrusted": "cka_wrap_with_trusted"
}
- for ldap_name, p11h_name in direct_param_map.iteritems():
+ for ldap_name, p11h_name in direct_param_map.items():
if ldap_name in ldap_key:
unwrap_params[p11h_name] = ldap_key[ldap_name]
@@ -159,7 +157,7 @@ def ldap2p11helper_api_params(ldap_key):
"ipawrappingmech": ("wrapping_mech", wrappingmech_name2id),
}
- for ldap_name, rules in indirect_param_map.iteritems():
+ for ldap_name, rules in indirect_param_map.items():
p11h_name, mapping = rules
if ldap_name in ldap_key:
unwrap_params[p11h_name] = mapping[ldap_key[ldap_name]]
@@ -170,7 +168,7 @@ def ldap2p11helper_api_params(ldap_key):
class AbstractHSM(object):
def _filter_replica_keys(self, all_keys):
replica_keys = {}
- for key_id, key in all_keys.iteritems():
+ for key_id, key in all_keys.items():
if not key['ipk11label'].startswith('dnssec-replica:'):
continue
replica_keys[key_id] = key
@@ -178,7 +176,7 @@ class AbstractHSM(object):
def _filter_zone_keys(self, all_keys):
zone_keys = {}
- for key_id, key in all_keys.iteritems():
+ for key_id, key in all_keys.items():
if key['ipk11label'] == u'dnssec-master' \
or key['ipk11label'].startswith('dnssec-replica:'):
continue
diff --git a/ipapython/dnssec/ldapkeydb.py b/ipapython/dnssec/ldapkeydb.py
index 86a7d0ac1..806999375 100644
--- a/ipapython/dnssec/ldapkeydb.py
+++ b/ipapython/dnssec/ldapkeydb.py
@@ -128,7 +128,7 @@ class Key(collections.MutableMapping):
def __iter__(self):
"""generates list of ipa names of all PKCS#11 attributes present in the object"""
- for ipa_name in self.entry.keys():
+ for ipa_name in list(self.entry.keys()):
lowercase = ipa_name.lower()
if lowercase in attrs_name2id:
yield lowercase
@@ -247,7 +247,7 @@ class LdapKeyDB(AbstractHSM):
for cache in [self.cache_masterkeys, self.cache_replica_pubkeys_wrap,
self.cache_zone_keypairs]:
if cache:
- for key in cache.itervalues():
+ for key in cache.values():
self._update_key(key)
def flush(self):
@@ -326,7 +326,7 @@ class LdapKeyDB(AbstractHSM):
keys = self._get_key_dict(MasterKey,
'(&(objectClass=ipk11SecretKey)(|(ipk11UnWrap=TRUE)(!(ipk11UnWrap=*)))(ipk11Label=dnssec-master))')
- for key in keys.itervalues():
+ for key in keys.values():
prefix = 'dnssec-master'
assert key['ipk11label'] == prefix, \
'secret key dn="%s" ipk11id=0x%s ipk11label="%s" with ipk11UnWrap = TRUE does not have '\
diff --git a/ipapython/dnssec/localhsm.py b/ipapython/dnssec/localhsm.py
index 412b55df9..d3b4ae15c 100755
--- a/ipapython/dnssec/localhsm.py
+++ b/ipapython/dnssec/localhsm.py
@@ -69,7 +69,7 @@ class Key(collections.MutableMapping):
def __iter__(self):
"""generates list of ipa names of all attributes present in the object"""
- for pkcs11_id, ipa_name in attrs_id2name.iteritems():
+ for pkcs11_id, ipa_name in attrs_id2name.items():
try:
self.p11.get_attribute(self.handle, pkcs11_id)
except _ipap11helper.NotFound:
@@ -84,11 +84,7 @@ class Key(collections.MutableMapping):
return cnt
def __str__(self):
- d = {}
- for ipa_name, value in self.iteritems():
- d[ipa_name] = value
-
- return str(d)
+ return str(dict(self))
def __repr__(self):
return self.__str__()
@@ -139,7 +135,7 @@ class LocalHSM(AbstractHSM):
"""Get all usable DNSSEC master keys"""
keys = self.find_keys(objclass=_ipap11helper.KEY_CLASS_SECRET_KEY, label=u'dnssec-master', cka_unwrap=True)
- for key in keys.itervalues():
+ for key in keys.values():
prefix = 'dnssec-master'
assert key['ipk11label'] == prefix, \
'secret key ipk11id=0x%s ipk11label="%s" with ipk11UnWrap = TRUE does not have '\
@@ -198,34 +194,34 @@ if __name__ == '__main__':
print 'replica public keys: CKA_WRAP = TRUE'
print '===================================='
- for pubkey_id, pubkey in localhsm.replica_pubkeys_wrap.iteritems():
+ for pubkey_id, pubkey in localhsm.replica_pubkeys_wrap.items():
print hexlify(pubkey_id)
pprint(pubkey)
print ''
print 'replica public keys: all'
print '========================'
- for pubkey_id, pubkey in localhsm.replica_pubkeys.iteritems():
+ for pubkey_id, pubkey in localhsm.replica_pubkeys.items():
print hexlify(pubkey_id)
pprint(pubkey)
print ''
print 'master keys'
print '==========='
- for mkey_id, mkey in localhsm.master_keys.iteritems():
+ for mkey_id, mkey in localhsm.master_keys.items():
print hexlify(mkey_id)
pprint(mkey)
print ''
print 'zone public keys'
print '================'
- for key_id, key in localhsm.zone_pubkeys.iteritems():
+ for key_id, key in localhsm.zone_pubkeys.items():
print hexlify(key_id)
pprint(key)
print ''
print 'zone private keys'
print '================='
- for key_id, key in localhsm.zone_privkeys.iteritems():
+ for key_id, key in localhsm.zone_privkeys.items():
print hexlify(key_id)
pprint(key)
diff --git a/ipapython/dogtag.py b/ipapython/dogtag.py
index fc4154719..fe951cf5b 100644
--- a/ipapython/dogtag.py
+++ b/ipapython/dogtag.py
@@ -320,7 +320,7 @@ def _httplib_request(
headers = headers or {}
if (
method == 'POST'
- and 'content-type' not in (str(k).lower() for k in headers.viewkeys())
+ and 'content-type' not in (str(k).lower() for k in headers)
):
headers['content-type'] = 'application/x-www-form-urlencoded'
diff --git a/ipapython/graph.py b/ipapython/graph.py
index e27249466..b4373abea 100644
--- a/ipapython/graph.py
+++ b/ipapython/graph.py
@@ -44,7 +44,7 @@ class Graph():
# delete _adjacencies
del self._adj[vertex]
- for key, _adj in self._adj.iteritems():
+ for key, _adj in self._adj.items():
_adj[:] = [v for v in _adj if v != vertex]
# delete edges
diff --git a/ipapython/install/cli.py b/ipapython/install/cli.py
index 1ba9a815c..54ca58d26 100644
--- a/ipapython/install/cli.py
+++ b/ipapython/install/cli.py
@@ -145,7 +145,7 @@ class ConfigureTool(admintool.AdminTool):
help="unattended (un)installation never prompts the user",
)
- for group, opt_group in groups.iteritems():
+ for group, opt_group in groups.items():
parser.add_option_group(opt_group)
super(ConfigureTool, cls).add_options(parser,
diff --git a/ipapython/install/core.py b/ipapython/install/core.py
index c313c278e..dac8883fe 100644
--- a/ipapython/install/core.py
+++ b/ipapython/install/core.py
@@ -229,7 +229,7 @@ class Configurable(object):
setattr(self, name, value)
if kwargs:
- extra = sorted(kwargs.keys())
+ extra = sorted(kwargs)
raise TypeError(
"{0}() got {1} unexpected keyword arguments: {2}".format(
type(self).__name__,
diff --git a/ipapython/install/util.py b/ipapython/install/util.py
index 58da7bb77..12530d45a 100644
--- a/ipapython/install/util.py
+++ b/ipapython/install/util.py
@@ -8,6 +8,8 @@ Utilities.
import sys
+import six
+
def raise_exc_info(exc_info):
"""
@@ -155,7 +157,7 @@ class InnerClassMeta(type):
except KeyError:
cls, name, value = None, None, None
for cls in obj_type.__mro__:
- for name, value in cls.__dict__.iteritems():
+ for name, value in six.iteritems(cls.__dict__):
if value is self:
break
if value is self:
diff --git a/ipapython/ipaldap.py b/ipapython/ipaldap.py
index 124ab3c20..66622ef61 100644
--- a/ipapython/ipaldap.py
+++ b/ipapython/ipaldap.py
@@ -279,7 +279,7 @@ class LDAPEntry(collections.MutableMapping):
def __repr__(self):
data = dict(self._raw)
- data.update((k, v) for k, v in self._nice.iteritems() if v is not None)
+ data.update((k, v) for k, v in self._nice.items() if v is not None)
return '%s(%r, %r)' % (type(self).__name__, self._dn, data)
def copy(self):
@@ -495,7 +495,7 @@ class LDAPEntry(collections.MutableMapping):
def generate_modlist(self):
modlist = []
- names = set(self.iterkeys())
+ names = set(self)
names.update(self._orig)
for name in names:
new = self.raw.get(name, [])
@@ -548,7 +548,7 @@ class LDAPEntryView(collections.MutableMapping):
self._entry.clear()
def __iter__(self):
- return self._entry.iterkeys()
+ return iter(self._entry)
def __len__(self):
return len(self._entry)
@@ -842,7 +842,7 @@ class LDAPClient(object):
elif isinstance(val, tuple):
return tuple(self.encode(m) for m in val)
elif isinstance(val, dict):
- dct = dict((self.encode(k), self.encode(v)) for k, v in val.iteritems())
+ dct = dict((self.encode(k), self.encode(v)) for k, v in val.items())
return dct
elif isinstance(val, datetime.datetime):
return val.strftime(LDAP_GENERALIZED_TIME_FORMAT)
@@ -875,7 +875,7 @@ class LDAPClient(object):
elif isinstance(val, tuple):
return tuple(self.decode(m, attr) for m in val)
elif isinstance(val, dict):
- dct = dict((unicode_from_utf8(k), self.decode(v, k)) for k, v in val.iteritems())
+ dct = dict((unicode_from_utf8(k), self.decode(v, k)) for k, v in val.items())
return dct
elif val is None:
return None
@@ -1234,7 +1234,7 @@ class LDAPClient(object):
make_filter_rules = rules
flts = []
if attrs_list is None:
- for (k, v) in entry_attrs.iteritems():
+ for (k, v) in entry_attrs.items():
flts.append(
self.make_filter_from_attr(
k, v, make_filter_rules, exact,
@@ -1436,11 +1436,11 @@ class LDAPClient(object):
This should be called as add_entry(entry).
"""
# remove all [] values (python-ldap hates 'em)
- attrs = dict((k, v) for k, v in entry.raw.iteritems() if v)
+ attrs = dict((k, v) for k, v in entry.raw.items() if v)
with self.error_handler():
attrs = self.encode(attrs)
- self.conn.add_s(str(entry.dn), attrs.items())
+ self.conn.add_s(str(entry.dn), list(attrs.items()))
entry.reset_modlist()
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index 80ce83506..b6cbe50e9 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -545,13 +545,13 @@ class CIDict(dict):
for key in keys():
self.__setitem__(key, new[key], seen)
seen = set()
- for key, value in kwargs.iteritems():
+ for key, value in kwargs.items():
self.__setitem__(key, value, seen)
def __contains__(self, key):
return super(CIDict, self).__contains__(key.lower())
- if sys.version_info < (3, 0):
+ if six.PY2:
def has_key(self, key):
return super(CIDict, self).has_key(key.lower())
@@ -562,29 +562,38 @@ class CIDict(dict):
return failobj
def __iter__(self):
- return self._keys.itervalues()
+ return six.itervalues(self._keys)
def keys(self):
- return list(self.iterkeys())
+ if six.PY2:
+ return list(self.iterkeys())
+ else:
+ return self.iterkeys()
def items(self):
- return list(self.iteritems())
+ if six.PY2:
+ return list(self.iteritems())
+ else:
+ return self.iteritems()
def values(self):
- return list(self.itervalues())
+ if six.PY2:
+ return list(self.itervalues())
+ else:
+ return self.itervalues()
def copy(self):
"""Returns a shallow copy of this CIDict"""
- return CIDict(self.items())
+ return CIDict(list(self.items()))
def iteritems(self):
- return ((k, self[k]) for k in self._keys.itervalues())
+ return ((k, self[k]) for k in six.itervalues(self._keys))
def iterkeys(self):
- return self._keys.itervalues()
+ return six.itervalues(self._keys)
def itervalues(self):
- return (v for k, v in self.iteritems())
+ return (v for k, v in six.iteritems(self))
def setdefault(self, key, value=None):
try: