summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2015-08-10 18:29:33 +0200
committerJan Cholasta <jcholast@redhat.com>2015-09-01 11:42:01 +0200
commitdd16cc98b0d67f1448bf9de25f8adce512b1431c (patch)
treee9fa6c41da6894b16a366b02d61c29b15c5a9b4a
parent404177f7a322ced4e05cfc6b2ed330b6fcce0c04 (diff)
downloadfreeipa-dd16cc98b0d67f1448bf9de25f8adce512b1431c.tar.gz
freeipa-dd16cc98b0d67f1448bf9de25f8adce512b1431c.tar.xz
freeipa-dd16cc98b0d67f1448bf9de25f8adce512b1431c.zip
Use six.string_types instead of "basestring"
Reviewed-By: Christian Heimes <cheimes@redhat.com> Reviewed-By: Jan Cholasta <jcholast@redhat.com>
-rwxr-xr-xipalib/aci.py4
-rw-r--r--ipalib/base.py4
-rw-r--r--ipalib/cli.py7
-rw-r--r--ipalib/config.py6
-rw-r--r--ipalib/messages.py4
-rw-r--r--ipalib/parameters.py19
-rw-r--r--ipalib/plugins/baseldap.py6
-rw-r--r--ipalib/plugins/baseuser.py6
-rw-r--r--ipalib/plugins/dns.py6
-rw-r--r--ipalib/plugins/group.py5
-rw-r--r--ipalib/plugins/permission.py4
-rw-r--r--ipalib/rpc.py5
-rw-r--r--ipalib/util.py10
-rw-r--r--ipapython/cookie.py7
-rw-r--r--ipapython/dn.py24
-rw-r--r--ipapython/ipaldap.py3
-rw-r--r--ipapython/ipautil.py12
-rw-r--r--ipapython/log_manager.py20
-rw-r--r--ipaserver/install/bindinstance.py3
-rw-r--r--ipatests/test_integration/env_config.py4
-rw-r--r--ipatests/test_xmlrpc/xmlrpc_test.py11
-rw-r--r--ipatests/util.py15
22 files changed, 114 insertions, 71 deletions
diff --git a/ipalib/aci.py b/ipalib/aci.py
index f78c5327d..3019375c1 100755
--- a/ipalib/aci.py
+++ b/ipalib/aci.py
@@ -20,6 +20,8 @@
import shlex
import re
+import six
+
# The Python re module doesn't do nested parenthesis
# Break the ACI into 3 pieces: target, name, permissions/bind_rules
@@ -159,7 +161,7 @@ class ACI:
raise SyntaxError, "invalid permission: '%s'" % p
if not self.name:
raise SyntaxError, "name must be set"
- if not isinstance(self.name, basestring):
+ if not isinstance(self.name, six.string_types):
raise SyntaxError, "name must be a string"
if not isinstance(self.target, dict) or len(self.target) == 0:
raise SyntaxError, "target must be a non-empty dictionary"
diff --git a/ipalib/base.py b/ipalib/base.py
index 12b2efd00..33b33eeb2 100644
--- a/ipalib/base.py
+++ b/ipalib/base.py
@@ -23,6 +23,8 @@ Foundational classes and functions.
import re
+import six
+
from ipalib.constants import NAME_REGEX, NAME_ERROR
from ipalib.constants import TYPE_ERROR, SET_ERROR, DEL_ERROR, OVERRIDE_ERROR
@@ -466,7 +468,7 @@ class NameSpace(ReadOnly):
:param key: The name or index of a member, or a slice object.
"""
key = getattr(key, '__name__', key)
- if isinstance(key, basestring):
+ if isinstance(key, six.string_types):
return self.__map[key]
if type(key) in (int, slice):
return self.__members[key]
diff --git a/ipalib/cli.py b/ipalib/cli.py
index abd691bc1..9c6d570f7 100644
--- a/ipalib/cli.py
+++ b/ipalib/cli.py
@@ -31,6 +31,9 @@ import termios
import struct
import base64
import traceback
+
+import six
+
try:
#pylint: disable=F0401
import default_encoding_utf8
@@ -280,7 +283,7 @@ class textui(backend.Backend):
objectClass: top
objectClass: someClass
"""
- assert isinstance(attr, basestring)
+ assert isinstance(attr, six.string_types)
if not isinstance(value, (list, tuple)):
# single-value attribute
self.print_indented(format % (attr, self.encode_binary(value)), indent)
@@ -420,7 +423,7 @@ class textui(backend.Backend):
------------------
Only dashed above.
"""
- assert isinstance(dash, basestring)
+ assert isinstance(dash, six.string_types)
assert len(dash) == 1
dashes = dash * len(string)
if above:
diff --git a/ipalib/config.py b/ipalib/config.py
index 760fa5bdd..90933b7a2 100644
--- a/ipalib/config.py
+++ b/ipalib/config.py
@@ -35,8 +35,10 @@ from types import NoneType
import os
from os import path
import sys
-from ipapython.dn import DN
+import six
+
+from ipapython.dn import DN
from ipalib.base import check_name
from ipalib.constants import CONFIG_SECTION
from ipalib.constants import OVERRIDE_ERROR, SET_ERROR, DEL_ERROR
@@ -239,7 +241,7 @@ class Env(object):
(self.__class__.__name__, key, self.__d[key], value)
)
assert not hasattr(self, key)
- if isinstance(value, basestring):
+ if isinstance(value, six.string_types):
value = value.strip()
if isinstance(value, str):
value = value.decode('utf-8')
diff --git a/ipalib/messages.py b/ipalib/messages.py
index 58ae1f3ec..4615cbc2b 100644
--- a/ipalib/messages.py
+++ b/ipalib/messages.py
@@ -32,6 +32,8 @@ Messages also have the 'type' argument, set to one of 'debug', 'info',
from inspect import isclass
+import six
+
from ipalib.constants import TYPE_ERROR
from ipalib.text import _ as ugettext
from ipalib.text import Gettext, NGettext
@@ -60,7 +62,7 @@ def process_message_arguments(obj, format=None, message=None, **kw):
obj.format = format
obj.forwarded = False
obj.msg = obj.format % kw
- if isinstance(obj.format, basestring):
+ if isinstance(obj.format, six.string_types):
obj.strerror = ugettext(obj.format) % kw
else:
obj.strerror = obj.format % kw
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index f9da3b0f5..c9baf414a 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -108,6 +108,7 @@ from types import NoneType
import encodings.idna
import dns.name
+import six
from ipalib.text import _ as ugettext
from ipalib.plugable import ReadOnly, lock, check_name
@@ -394,8 +395,8 @@ class Param(ReadOnly):
('cli_name', str, None),
('cli_short_name', str, None),
('deprecated_cli_aliases', frozenset, frozenset()),
- ('label', (basestring, Gettext), None),
- ('doc', (basestring, Gettext), None),
+ ('label', (six.string_types, Gettext), None),
+ ('doc', (six.string_types, Gettext), None),
('required', bool, True),
('multivalue', bool, False),
('primary_key', bool, False),
@@ -964,7 +965,7 @@ class Bool(Param):
"""
if type(value) in self.allowed_types:
return value
- if isinstance(value, basestring):
+ if isinstance(value, six.string_types):
value = value.lower()
if value in self.truths:
return True
@@ -1143,7 +1144,7 @@ class Decimal(Number):
value = kw.get(kwparam)
if value is None:
continue
- if isinstance(value, (basestring, float)):
+ if isinstance(value, (six.string_types, float)):
try:
value = decimal.Decimal(value)
except Exception as e:
@@ -1233,7 +1234,7 @@ class Decimal(Number):
return value
def _convert_scalar(self, value, index=None):
- if isinstance(value, (basestring, float)):
+ if isinstance(value, (six.string_types, float)):
try:
value = decimal.Decimal(value)
except decimal.DecimalException as e:
@@ -1264,8 +1265,8 @@ class Data(Param):
('minlength', int, None),
('maxlength', int, None),
('length', int, None),
- ('pattern', (basestring,), None),
- ('pattern_errmsg', (basestring,), None),
+ ('pattern', (six.string_types,), None),
+ ('pattern_errmsg', (six.string_types,), None),
)
re = None
@@ -1474,7 +1475,7 @@ class IA5Str(Str):
super(IA5Str, self).__init__(name, *rules, **kw)
def _convert_scalar(self, value, index=None):
- if isinstance(value, basestring):
+ if isinstance(value, six.string_types):
for i in xrange(len(value)):
if ord(value[i]) > 127:
raise ConversionError(name=self.get_param_name(),
@@ -1646,7 +1647,7 @@ class DateTime(Param):
type_error = _('must be datetime value')
def _convert_scalar(self, value, index=None):
- if isinstance(value, basestring):
+ if isinstance(value, six.string_types):
for date_format in self.accepted_formats:
try:
time = datetime.datetime.strptime(value, date_format)
diff --git a/ipalib/plugins/baseldap.py b/ipalib/plugins/baseldap.py
index 8a05c782e..a8525e81e 100644
--- a/ipalib/plugins/baseldap.py
+++ b/ipalib/plugins/baseldap.py
@@ -25,6 +25,8 @@ import time
from copy import deepcopy
import base64
+import six
+
from ipalib import api, crud, errors
from ipalib import Method, Object, Command
from ipalib import Flag, Int, Str
@@ -816,7 +818,7 @@ def _check_single_value_attrs(params, entry_attrs):
# required, make sure we enforce that.
def _check_empty_attrs(params, entry_attrs):
for (a, v) in entry_attrs.iteritems():
- if v is None or (isinstance(v, basestring) and len(v) == 0):
+ if v is None or (isinstance(v, six.string_types) and len(v) == 0):
if a in params and params[a].required:
raise errors.RequirementError(name=a)
@@ -2038,7 +2040,7 @@ class LDAPSearch(BaseLDAPCommand, crud.Search):
config_attrs = config.get(
self.obj.search_attributes_config, [])
if len(config_attrs) == 1 and (
- isinstance(config_attrs[0], basestring)):
+ isinstance(config_attrs[0], six.string_types)):
search_attrs = config_attrs[0].split(',')
search_kw['objectclass'] = self.obj.object_class
diff --git a/ipalib/plugins/baseuser.py b/ipalib/plugins/baseuser.py
index 5eede7a98..c3e290371 100644
--- a/ipalib/plugins/baseuser.py
+++ b/ipalib/plugins/baseuser.py
@@ -22,6 +22,8 @@ import string
import posixpath
import os
+import six
+
from ipalib import api, errors
from ipalib import Flag, Int, Password, Str, Bool, StrEnum, DateTime, Bytes
from ipalib.plugable import Registry
@@ -89,7 +91,7 @@ def validate_nsaccountlock(entry_attrs):
if 'nsaccountlock' in entry_attrs:
nsaccountlock = entry_attrs['nsaccountlock']
if not isinstance(nsaccountlock, (bool, Bool)):
- if not isinstance(nsaccountlock, basestring):
+ if not isinstance(nsaccountlock, six.string_types):
raise errors.OnlyOneValueAllowed(attr='nsaccountlock')
if nsaccountlock.lower() not in ('true', 'false'):
raise errors.ValidationError(name='nsaccountlock',
@@ -400,7 +402,7 @@ class baseuser(LDAPObject):
if not isinstance(email, (list, tuple)):
email = [email]
for m in email:
- if isinstance(m, basestring):
+ if isinstance(m, six.string_types):
if '@' not in m and defaultdomain:
m = m + u'@' + defaultdomain
if not Email(m):
diff --git a/ipalib/plugins/dns.py b/ipalib/plugins/dns.py
index 23871a58f..10c4987af 100644
--- a/ipalib/plugins/dns.py
+++ b/ipalib/plugins/dns.py
@@ -24,11 +24,13 @@ import netaddr
import time
import re
import binascii
+import encodings.idna
+
import dns.name
import dns.exception
import dns.rdatatype
import dns.resolver
-import encodings.idna
+import six
from ipalib.request import context
from ipalib import api, errors, output
@@ -1671,7 +1673,7 @@ def _create_idn_filter(cmd, ldap, *args, **options):
config = ldap.get_ipa_config()
config_attrs = config.get(cmd.obj.search_attributes_config, [])
if len(config_attrs) == 1 and (isinstance(config_attrs[0],
- basestring)):
+ six.string_types)):
search_attrs = config_attrs[0].split(',')
search_kw['objectclass'] = cmd.obj.object_class
diff --git a/ipalib/plugins/group.py b/ipalib/plugins/group.py
index 18ae6dc36..8ee20a9a8 100644
--- a/ipalib/plugins/group.py
+++ b/ipalib/plugins/group.py
@@ -18,6 +18,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+import six
+
from ipalib import api
from ipalib import Int, Str
from ipalib.plugable import Registry
@@ -25,6 +27,7 @@ from ipalib.plugins.baseldap import *
from ipalib.plugins.idviews import remove_ipaobject_overrides
from ipalib.plugins import baseldap
from ipalib import _, ngettext
+
if api.env.in_server and api.env.context in ['lite', 'server']:
try:
import ipaserver.dcerpc
@@ -460,7 +463,7 @@ class group_find(LDAPSearch):
search_kw = {}
config = ldap.get_ipa_config()
attrs = config.get(self.obj.search_attributes_config, [])
- if len(attrs) == 1 and isinstance(attrs[0], basestring):
+ if len(attrs) == 1 and isinstance(attrs[0], six.string_types):
search_attrs = attrs[0].split(',')
for a in search_attrs:
search_kw[a] = args[-1]
diff --git a/ipalib/plugins/permission.py b/ipalib/plugins/permission.py
index 012b78fcc..9544cd292 100644
--- a/ipalib/plugins/permission.py
+++ b/ipalib/plugins/permission.py
@@ -20,6 +20,8 @@
import re
import traceback
+import six
+
from ipalib.plugins import baseldap
from ipalib.plugins.privilege import validate_permission_to_privilege
from ipalib import errors
@@ -134,7 +136,7 @@ class DNOrURL(DNParam):
"""
def _convert_scalar(self, value, index=None):
- if isinstance(value, basestring) and value.startswith('ldap:///'):
+ if isinstance(value, six.string_types) and value.startswith('ldap:///'):
value = strip_ldap_prefix(value)
return super(DNOrURL, self)._convert_scalar(value, index=index)
diff --git a/ipalib/rpc.py b/ipalib/rpc.py
index 9d0fc8f7b..0dc897a08 100644
--- a/ipalib/rpc.py
+++ b/ipalib/rpc.py
@@ -41,13 +41,14 @@ import urllib
import json
import socket
from urllib2 import urlparse
-
from xmlrpclib import (Binary, Fault, DateTime, dumps, loads, ServerProxy,
Transport, ProtocolError, MININT, MAXINT)
+
import gssapi
from dns import resolver, rdatatype
from dns.exception import DNSException
from nss.error import NSPRError
+import six
from ipalib.backend import Connectible
from ipalib.constants import LDAP_GENERALIZED_TIME_FORMAT
@@ -339,7 +340,7 @@ def json_decode_binary(val):
elif isinstance(val, list):
return tuple(json_decode_binary(v) for v in val)
else:
- if isinstance(val, basestring):
+ if isinstance(val, six.string_types):
try:
return val.decode('utf-8')
except UnicodeDecodeError:
diff --git a/ipalib/util.py b/ipalib/util.py
index 4a75b820a..e38ddbbdc 100644
--- a/ipalib/util.py
+++ b/ipalib/util.py
@@ -29,13 +29,15 @@ import re
import decimal
import dns
import encodings
-import netaddr
from types import NoneType
from weakref import WeakKeyDictionary
+
+import netaddr
from dns import resolver, rdatatype
from dns.exception import DNSException
from dns.resolver import NXDOMAIN
from netaddr.core import AddrFormatError
+import six
from ipalib import errors, messages
from ipalib.text import _
@@ -178,7 +180,7 @@ def check_writable_file(filename):
raise errors.FileError(reason=str(e))
def normalize_zonemgr(zonemgr):
- if not zonemgr or not isinstance(zonemgr, basestring):
+ if not zonemgr or not isinstance(zonemgr, six.string_types):
return zonemgr
if '@' in zonemgr:
# local-part needs to be normalized
@@ -572,8 +574,8 @@ def _resolve_record(owner, rtype, nameserver_ip=None, edns0=False,
:param flag_cd: requires dnssec=True, adds flag CD
:raise DNSException: if error occurs
"""
- assert isinstance(nameserver_ip, basestring)
- assert isinstance(rtype, basestring)
+ assert isinstance(nameserver_ip, six.string_types)
+ assert isinstance(rtype, six.string_types)
res = dns.resolver.Resolver()
if nameserver_ip:
diff --git a/ipapython/cookie.py b/ipapython/cookie.py
index c12e0a127..8b91457d9 100644
--- a/ipapython/cookie.py
+++ b/ipapython/cookie.py
@@ -23,6 +23,9 @@ import datetime
import email.utils
from urllib2 import urlparse
from calendar import timegm
+
+import six
+
from ipapython.ipa_log_manager import log_mgr
'''
@@ -390,7 +393,7 @@ class Cookie(object):
self._timestamp = value
elif isinstance(value, (int, long, float)):
self._timestamp = datetime.datetime.utcfromtimestamp(value)
- elif isinstance(value, basestring):
+ elif isinstance(value, six.string_types):
self._timestamp = Cookie.parse_datetime(value)
else:
raise TypeError('value must be datetime, int, long, float, basestring or None, not %s' % \
@@ -416,7 +419,7 @@ class Cookie(object):
self._expires = value
elif isinstance(value, (int, long, float)):
self._expires = datetime.datetime.utcfromtimestamp(value)
- elif isinstance(value, basestring):
+ elif isinstance(value, six.string_types):
self._expires = Cookie.parse_datetime(value)
else:
raise TypeError('value must be datetime, int, long, float, basestring or None, not %s' % \
diff --git a/ipapython/dn.py b/ipapython/dn.py
index 59e9368ae..e6d9dbeb5 100644
--- a/ipapython/dn.py
+++ b/ipapython/dn.py
@@ -418,9 +418,11 @@ to the constructor. The result may share underlying structure.
'''
+import sys
+
from ldap.dn import str2dn, dn2str
from ldap import DECODING_ERROR
-import sys
+import six
__all__ = 'AVA', 'RDN', 'DN'
@@ -443,7 +445,7 @@ def _adjust_indices(start, end, length):
def _normalize_ava_input(val):
- if not isinstance(val, basestring):
+ if not isinstance(val, six.string_types):
val = unicode(val).encode('utf-8')
elif isinstance(val, unicode):
val = val.encode('utf-8')
@@ -490,7 +492,7 @@ def get_ava(*args):
if len(arg) != 2:
raise ValueError("tuple or list must be 2-valued, not \"%s\"" % (arg))
ava = [_normalize_ava_input(arg[0]), _normalize_ava_input(arg[1]), 0]
- elif isinstance(arg, basestring):
+ elif isinstance(arg, six.string_types):
rdn = str2rdn(arg)
if len(rdn) > 1:
raise TypeError("multiple AVA's specified by \"%s\"" % (arg))
@@ -651,7 +653,7 @@ class AVA(object):
caseIgnoreMatch.
'''
# Try coercing string to AVA, if successful compare to coerced object
- if isinstance(other, basestring):
+ if isinstance(other, six.string_types):
try:
other_ava = AVA(other)
return self.__eq__(other_ava)
@@ -795,7 +797,7 @@ class RDN(object):
if raw: # fast raw mode
avas = args
- elif ava_count == 1 and isinstance(args[0], basestring):
+ elif ava_count == 1 and isinstance(args[0], six.string_types):
avas = str2rdn(args[0])
sort = 1
elif ava_count == 1 and isinstance(args[0], RDN):
@@ -835,7 +837,7 @@ class RDN(object):
return self._get_ava(self._avas[key])
if isinstance(key, slice):
return [self._get_ava(ava) for ava in self._avas[key]]
- elif isinstance(key, basestring):
+ elif isinstance(key, six.string_types):
for ava in self._avas:
if key == ava[0].decode('utf-8'):
return ava[1].decode('utf-8')
@@ -880,7 +882,7 @@ class RDN(object):
def __eq__(self, other):
# Try coercing string to RDN, if successful compare to coerced object
- if isinstance(other, basestring):
+ if isinstance(other, six.string_types):
try:
other_rdn = RDN(other)
return self.__eq__(other_rdn)
@@ -910,7 +912,7 @@ class RDN(object):
result._avas.append((ava[0], ava[1], ava[2]))
elif isinstance(other, AVA):
result._avas.append(other.to_openldap())
- elif isinstance(other, basestring):
+ elif isinstance(other, six.string_types):
rdn = self.__class__(other)
for ava in rdn._avas:
result._avas.append((ava[0], ava[1], ava[2]))
@@ -1080,7 +1082,7 @@ class DN(object):
return [[list(a) for a in rdn] for rdn in rdns]
def _rdns_from_value(self, value):
- if isinstance(value, basestring):
+ if isinstance(value, six.string_types):
try:
if isinstance(value, unicode):
value = value.encode('utf-8')
@@ -1144,7 +1146,7 @@ class DN(object):
new_dn = cls.__new__(cls)
new_dn.rdns = self.rdns[key]
return new_dn
- elif isinstance(key, basestring):
+ elif isinstance(key, six.string_types):
for rdn in self.rdns:
for ava in rdn:
if key == ava[0].decode('utf-8'):
@@ -1170,7 +1172,7 @@ class DN(object):
def __eq__(self, other):
# Try coercing to DN, if successful compare to coerced object
- if isinstance(other, (basestring, RDN, AVA)):
+ if isinstance(other, (six.string_types, RDN, AVA)):
try:
other_dn = DN(other)
return self.__eq__(other_dn)
diff --git a/ipapython/ipaldap.py b/ipapython/ipaldap.py
index 3d38d6050..124ab3c20 100644
--- a/ipapython/ipaldap.py
+++ b/ipapython/ipaldap.py
@@ -36,6 +36,7 @@ import ldap.filter
from ldap.ldapobject import SimpleLDAPObject
from ldap.controls import SimplePagedResultsControl
import ldapurl
+import six
from ipalib import errors, _
from ipalib.constants import LDAP_GENERALIZED_TIME_FORMAT
@@ -330,7 +331,7 @@ class LDAPEntry(collections.MutableMapping):
self._not_list.discard(name)
def _attr_name(self, name):
- if not isinstance(name, basestring):
+ if not isinstance(name, six.string_types):
raise TypeError(
"attribute name must be unicode or str, got %s object %r" % (
name.__class__.__name__, name))
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index d959bb369..80ce83506 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -37,9 +37,11 @@ import time
import gssapi
import pwd
import grp
+from contextlib import contextmanager
+
from dns import resolver, rdatatype
from dns.exception import DNSException
-from contextlib import contextmanager
+import six
from ipapython.ipa_log_manager import *
from ipapython import ipavalidate
@@ -117,7 +119,7 @@ class CheckedIPAddress(netaddr.IPAddress):
# netaddr.IPAddress doesn't handle zone indices in textual
# IPv6 addresses. Try removing zone index and parse the
# address again.
- if not isinstance(addr, basestring):
+ if not isinstance(addr, six.string_types):
raise
addr, sep, foo = addr.partition('%')
if sep != '%':
@@ -295,7 +297,7 @@ def run(args, stdin=None, raiseonerr=True,
p_out = None
p_err = None
- if isinstance(nolog, basestring):
+ if isinstance(nolog, six.string_types):
# We expect a tuple (or list, or other iterable) of nolog strings.
# Passing just a single string is bad: strings are also, so this
# would result in every individual character of that string being
@@ -383,7 +385,7 @@ def run(args, stdin=None, raiseonerr=True,
def nolog_replace(string, nolog):
"""Replace occurences of strings given in `nolog` with XXXXXXXX"""
for value in nolog:
- if not isinstance(value, basestring):
+ if not isinstance(value, six.string_types):
continue
quoted = urllib2.quote(value)
@@ -761,7 +763,7 @@ def user_input(prompt, default = None, allow_empty = True):
return ''
raise RuntimeError("Failed to get user input")
- if isinstance(default, basestring):
+ if isinstance(default, six.string_types):
while True:
try:
ret = raw_input("%s [%s]: " % (prompt, default))
diff --git a/ipapython/log_manager.py b/ipapython/log_manager.py
index 7e4545d14..e1ea434c5 100644
--- a/ipapython/log_manager.py
+++ b/ipapython/log_manager.py
@@ -509,6 +509,8 @@ import logging
import re
import time
+import six
+
#-------------------------------------------------------------------------------
# Default format
LOGGING_DEFAULT_FORMAT = '%(levelname)s %(message)s'
@@ -600,7 +602,7 @@ def parse_log_level(level):
'''
# Is it a string representation of an integer?
# If so convert to an int.
- if isinstance(level, basestring):
+ if isinstance(level, six.string_types):
try:
level = int(level)
except:
@@ -608,7 +610,7 @@ def parse_log_level(level):
# If it's a string lookup it's name and map to logging level
# otherwise validate the integer value is in range.
- if isinstance(level, basestring):
+ if isinstance(level, six.string_types):
result = log_level_name_map.get(level.lower()) #pylint: disable=E1103
if result is None:
raise ValueError('unknown log level (%s)' % level)
@@ -959,7 +961,7 @@ class LogManager(object):
if not isinstance(config, dict):
raise TypeError('expected dict for handler config, got "%s"', type(config))
- if isinstance(logger, basestring):
+ if isinstance(logger, six.string_types):
logger = self.get_logger(logger)
else:
if not isinstance(logger, logging.Logger):
@@ -1167,7 +1169,7 @@ class LogManager(object):
user = cfg.get('user')
group = cfg.get('group')
if user is not None:
- if isinstance(user, basestring):
+ if isinstance(user, six.string_types):
pw = pwd.getpwnam(user)
uid = pw.pw_uid
elif isinstance(user, int):
@@ -1175,7 +1177,7 @@ class LogManager(object):
else:
raise TypeError("user (%s) is not int or basestring" % user)
if group is not None:
- if isinstance(group, basestring):
+ if isinstance(group, six.string_types):
pw = pwd.getpwnam(group)
gid = pw.pw_gid
elif isinstance(group, int):
@@ -1216,7 +1218,7 @@ class LogManager(object):
datefmt = cfg.get("datefmt", None)
formatter = logging.Formatter(format, datefmt)
time_zone_converter = cfg.get('time_zone_converter', time.localtime)
- if isinstance(time_zone_converter, basestring):
+ if isinstance(time_zone_converter, six.string_types):
converter = {'local' : time.localtime,
'localtime' : time.localtime,
'gmt' : time.gmtime,
@@ -1310,7 +1312,7 @@ class LogManager(object):
List of loggers with the handler is bound to.
'''
- if isinstance(handler, basestring):
+ if isinstance(handler, six.string_types):
handler = self.get_handler(handler)
elif isinstance(handler, logging.Handler):
if not handler in self.handlers.values():
@@ -1344,7 +1346,7 @@ class LogManager(object):
use configure_state to track the state of the log manager.
'''
- if isinstance(handler, basestring):
+ if isinstance(handler, six.string_types):
handler = self.get_handler(handler)
elif not isinstance(handler, logging.Handler):
raise TypeError('handler must be basestring or Handler object, got %s' % type(handler))
@@ -1522,7 +1524,7 @@ class LogManager(object):
'''
is_object = False
- if isinstance(who, basestring):
+ if isinstance(who, six.string_types):
obj_name = who
else:
is_object = True
diff --git a/ipaserver/install/bindinstance.py b/ipaserver/install/bindinstance.py
index 0b788e065..0201bbe0c 100644
--- a/ipaserver/install/bindinstance.py
+++ b/ipaserver/install/bindinstance.py
@@ -26,6 +26,7 @@ import sys
import time
import ldap
+import six
from ipaserver.install import installutils
from ipaserver.install import service
@@ -178,7 +179,7 @@ def named_conf_set_directive(name, value, section=NAMED_SECTION_IPA,
if name == match.group('name'):
matched = True
if value is not None:
- if not isinstance(value, basestring):
+ if not isinstance(value, six.string_types):
value = str(value)
new_conf = named_conf_arg_template \
% dict(indent=last_indent,
diff --git a/ipatests/test_integration/env_config.py b/ipatests/test_integration/env_config.py
index d16a3430d..96062bef3 100644
--- a/ipatests/test_integration/env_config.py
+++ b/ipatests/test_integration/env_config.py
@@ -28,6 +28,8 @@ import os
import json
import collections
+import six
+
from ipapython import ipautil
from ipatests.test_integration.config import Config, Domain
@@ -128,7 +130,7 @@ def config_from_env(env):
kwargs['domains'] = []
# $IPv6SETUP needs to be 'TRUE' to enable ipv6
- if isinstance(kwargs['ipv6'], basestring):
+ if isinstance(kwargs['ipv6'], six.string_types):
kwargs['ipv6'] = (kwargs['ipv6'].upper() == 'TRUE')
config = Config(**kwargs)
diff --git a/ipatests/test_xmlrpc/xmlrpc_test.py b/ipatests/test_xmlrpc/xmlrpc_test.py
index 0db211118..65686211d 100644
--- a/ipatests/test_xmlrpc/xmlrpc_test.py
+++ b/ipatests/test_xmlrpc/xmlrpc_test.py
@@ -25,6 +25,7 @@ import datetime
import nose
import contextlib
+import six
from ipatests.util import assert_deepequal, Fuzzy
from ipalib import api, request, errors
@@ -35,7 +36,7 @@ from ipapython.version import API_VERSION
# Matches a gidnumber like '1391016742'
# FIXME: Does it make more sense to return gidnumber, uidnumber, etc. as `int`
# or `long`? If not, we still need to return them as `unicode` instead of `str`.
-fuzzy_digits = Fuzzy('^\d+$', type=basestring)
+fuzzy_digits = Fuzzy('^\d+$', type=six.string_types)
uuid_re = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
@@ -76,14 +77,14 @@ fuzzy_sudocmddn = Fuzzy(
)
# Matches a hash signature, not enforcing length
-fuzzy_hash = Fuzzy('^([a-f0-9][a-f0-9]:)+[a-f0-9][a-f0-9]$', type=basestring)
+fuzzy_hash = Fuzzy('^([a-f0-9][a-f0-9]:)+[a-f0-9][a-f0-9]$', type=six.string_types)
# Matches a date, like Tue Apr 26 17:45:35 2016 UTC
fuzzy_date = Fuzzy('^[a-zA-Z]{3} [a-zA-Z]{3} \d{2} \d{2}:\d{2}:\d{2} \d{4} UTC$')
-fuzzy_issuer = Fuzzy(type=basestring, test=lambda issuer: valid_issuer(issuer))
+fuzzy_issuer = Fuzzy(type=six.string_types, test=lambda issuer: valid_issuer(issuer))
-fuzzy_hex = Fuzzy('^0x[0-9a-fA-F]+$', type=basestring)
+fuzzy_hex = Fuzzy('^0x[0-9a-fA-F]+$', type=six.string_types)
# Matches password - password consists of all printable characters without whitespaces
# The only exception is space, but space cannot be at the beggingin or end of the pwd
@@ -93,7 +94,7 @@ fuzzy_password = Fuzzy('^\S([\S ]*\S)*$')
fuzzy_dergeneralizedtime = Fuzzy(type=datetime.datetime)
# match any string
-fuzzy_string = Fuzzy(type=basestring)
+fuzzy_string = Fuzzy(type=six.string_types)
# case insensitive match of sets
def fuzzy_set_ci(s):
diff --git a/ipatests/util.py b/ipatests/util.py
index 9b6eed7ad..03c5488f1 100644
--- a/ipatests/util.py
+++ b/ipatests/util.py
@@ -24,12 +24,15 @@ Common utility functions and classes for unit tests.
import inspect
import os
from os import path
-import ldap
-import ldap.sasl
-import ldap.modlist
import tempfile
import shutil
import re
+
+import six
+import ldap
+import ldap.sasl
+import ldap.modlist
+
import ipalib
from ipalib.plugable import Plugin
from ipalib.request import context
@@ -213,7 +216,7 @@ class Fuzzy(object):
:param test: A callable used to perform equality test, e.g.
``lambda other: other >= 18``
"""
- assert regex is None or isinstance(regex, basestring)
+ assert regex is None or isinstance(regex, six.string_types)
assert test is None or callable(test)
if regex is None:
self.re = None
@@ -221,7 +224,7 @@ class Fuzzy(object):
self.re = re.compile(regex)
if type is None:
type = unicode
- assert type in (unicode, str, basestring)
+ assert type in (unicode, str, six.string_types)
self.regex = regex
self.type = type
self.test = test
@@ -309,7 +312,7 @@ def assert_deepequal(expected, got, doc='', stack=tuple()):
if isinstance(got, tuple):
got = list(got)
if isinstance(expected, DN):
- if isinstance(got, basestring):
+ if isinstance(got, six.string_types):
got = DN(got)
if not (isinstance(expected, Fuzzy) or callable(expected) or type(expected) is type(got)):
raise AssertionError(