summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Viktorin <pviktori@redhat.com>2015-09-14 12:52:29 +0200
committerJan Cholasta <jcholast@redhat.com>2015-10-07 10:27:20 +0200
commit70b37a956c0b7dad52bf14fdb5fed421c01c8f77 (patch)
tree76768609fdbca12ccc93b092e14c4fc4ae06459a
parent7f1204a42c0fd13602768e24da7af8814cbf97d2 (diff)
downloadfreeipa-70b37a956c0b7dad52bf14fdb5fed421c01c8f77.tar.gz
freeipa-70b37a956c0b7dad52bf14fdb5fed421c01c8f77.tar.xz
freeipa-70b37a956c0b7dad52bf14fdb5fed421c01c8f77.zip
Use six.moves.urllib instead of urllib/urllib2/urlparse
In Python 3, these modules are reorganized. Reviewed-By: David Kupka <dkupka@redhat.com> Reviewed-By: Jan Cholasta <jcholast@redhat.com> Reviewed-By: Martin Basti <mbasti@redhat.com>
-rwxr-xr-xinstall/tools/ipa-replica-manage5
-rwxr-xr-xipa-client/ipa-install/ipa-client-automount4
-rwxr-xr-xipa-client/ipa-install/ipa-client-install16
-rw-r--r--ipa-client/ipaclient/ipa_certupdate.py5
-rw-r--r--ipalib/config.py6
-rw-r--r--ipalib/plugins/otptoken.py24
-rw-r--r--ipalib/rpc.py13
-rw-r--r--ipalib/session.py5
-rw-r--r--ipaplatform/redhat/tasks.py14
-rw-r--r--ipapython/config.py4
-rw-r--r--ipapython/cookie.py6
-rw-r--r--ipapython/dogtag.py2
-rw-r--r--ipapython/ipautil.py4
-rw-r--r--ipaserver/install/cainstance.py7
-rw-r--r--ipaserver/plugins/dogtag.py12
-rw-r--r--ipaserver/rpcserver.py12
-rw-r--r--ipatests/test_ipaserver/httptest.py7
-rw-r--r--ipatests/test_webui/ui_driver.py2
18 files changed, 77 insertions, 71 deletions
diff --git a/install/tools/ipa-replica-manage b/install/tools/ipa-replica-manage
index e92561f85..b09f4d3fc 100755
--- a/install/tools/ipa-replica-manage
+++ b/install/tools/ipa-replica-manage
@@ -25,11 +25,12 @@ import os
import re
import traceback
-from urllib2 import urlparse
import ldap
import socket
import time
+from six.moves.urllib.parse import urlparse
+
from ipapython import ipautil
from ipaserver.install import replication, dsinstance, installutils
from ipaserver.install import bindinstance, cainstance, certs
@@ -376,7 +377,7 @@ def get_ruv(realm, host, dirman_passwd, nolookup=False):
data = re.match('\{replica (\d+) (ldap://.*:\d+)\}(\s+\w+\s+\w*){0,1}', ruv)
if data:
rid = data.group(1)
- (scheme, netloc, path, params, query, fragment) = urlparse.urlparse(data.group(2))
+ (scheme, netloc, path, params, query, fragment) = urlparse(data.group(2))
servers.append((netloc, rid))
else:
print("unable to decode: %s" % ruv)
diff --git a/ipa-client/ipa-install/ipa-client-automount b/ipa-client/ipa-install/ipa-client-automount
index 5e4ab1396..4b93ea321 100755
--- a/ipa-client/ipa-install/ipa-client-automount
+++ b/ipa-client/ipa-install/ipa-client-automount
@@ -25,12 +25,12 @@ from __future__ import print_function
import sys
import os
-import urlparse
import time
import tempfile
import gssapi
import SSSDConfig
+from six.moves.urllib.parse import urlsplit
from optparse import OptionParser
from ipalib import api, errors
@@ -396,7 +396,7 @@ def main():
root_logger.debug('Executing DNS discovery')
if ret == ipadiscovery.NO_LDAP_SERVER:
root_logger.debug('Autodiscovery did not find LDAP server')
- s = urlparse.urlsplit(api.env.xmlrpc_uri)
+ s = urlsplit(api.env.xmlrpc_uri)
server = [s.netloc]
root_logger.debug('Setting server to %s' % s.netloc)
else:
diff --git a/ipa-client/ipa-install/ipa-client-install b/ipa-client/ipa-install/ipa-client-install
index ff44fbb9b..fb47c8a9c 100755
--- a/ipa-client/ipa-install/ipa-client-install
+++ b/ipa-client/ipa-install/ipa-client-install
@@ -27,7 +27,6 @@ try:
import os
import time
import socket
- import urlparse
import tempfile
import getpass
from ConfigParser import RawConfigParser
@@ -38,6 +37,7 @@ try:
import nss.nss as nss
import SSSDConfig
+ from six.moves.urllib.parse import urlparse, urlunparse
from ipapython.ipa_log_manager import standard_logging_setup, root_logger
from ipaclient import ipadiscovery
@@ -1877,7 +1877,7 @@ def get_ca_certs_from_file(url):
'''
try:
- parsed = urlparse.urlparse(url, 'file')
+ parsed = urlparse(url, 'file')
except Exception:
raise errors.FileError(reason="unable to parse file url '%s'" % url)
@@ -2014,16 +2014,16 @@ def get_ca_certs(fstore, options, server, basedn, realm):
ca_file = CACERT + ".new"
def ldap_url():
- return urlparse.urlunparse(('ldap', ipautil.format_netloc(server),
- '', '', '', ''))
+ return urlunparse(('ldap', ipautil.format_netloc(server),
+ '', '', '', ''))
def file_url():
- return urlparse.urlunparse(('file', '', options.ca_cert_file,
- '', '', ''))
+ return urlunparse(('file', '', options.ca_cert_file,
+ '', '', ''))
def http_url():
- return urlparse.urlunparse(('http', ipautil.format_netloc(server),
- '/ipa/config/ca.crt', '', '', ''))
+ return urlunparse(('http', ipautil.format_netloc(server),
+ '/ipa/config/ca.crt', '', '', ''))
interactive = not options.unattended
diff --git a/ipa-client/ipaclient/ipa_certupdate.py b/ipa-client/ipaclient/ipa_certupdate.py
index 720bd9a87..dcd9a1fb2 100644
--- a/ipa-client/ipaclient/ipa_certupdate.py
+++ b/ipa-client/ipaclient/ipa_certupdate.py
@@ -20,7 +20,8 @@
import os
import tempfile
import shutil
-import urlparse
+
+from six.moves.urllib.parse import urlsplit
from ipapython import (admintool, ipautil, ipaldap, sysrestore, dogtag,
certmonger, certdb)
@@ -51,7 +52,7 @@ class CertUpdate(admintool.AdminTool):
api.bootstrap(context='cli_installer')
api.finalize()
- server = urlparse.urlsplit(api.env.jsonrpc_uri).hostname
+ server = urlsplit(api.env.jsonrpc_uri).hostname
ldap = ipaldap.IPAdmin(server)
tmpdir = tempfile.mkdtemp(prefix="tmp-")
diff --git a/ipalib/config.py b/ipalib/config.py
index eb823d851..27084577e 100644
--- a/ipalib/config.py
+++ b/ipalib/config.py
@@ -29,7 +29,6 @@ of the process.
For the per-request thread-local information, see `ipalib.request`.
"""
-import urlparse
from ConfigParser import RawConfigParser, ParsingError
from types import NoneType
import os
@@ -37,6 +36,7 @@ from os import path
import sys
import six
+from six.moves.urllib.parse import urlparse, urlunparse
from ipapython.dn import DN
from ipalib.base import check_name
@@ -559,9 +559,9 @@ class Env(object):
xmlrpc_uri = defaults.get('xmlrpc_uri')
if xmlrpc_uri:
(scheme, netloc, uripath, params, query, fragment
- ) = urlparse.urlparse(xmlrpc_uri)
+ ) = urlparse(xmlrpc_uri)
uripath = uripath.replace('/xml', '/json', 1)
- self.jsonrpc_uri = urlparse.urlunparse((
+ self.jsonrpc_uri = urlunparse((
scheme, netloc, uripath, params, query, fragment))
self._merge(**defaults)
diff --git a/ipalib/plugins/otptoken.py b/ipalib/plugins/otptoken.py
index 651a3ab94..846155dfb 100644
--- a/ipalib/plugins/otptoken.py
+++ b/ipalib/plugins/otptoken.py
@@ -31,14 +31,11 @@ from ipapython.nsslib import NSSConnection
import base64
import uuid
-import urllib
-import urllib2
-import httplib
-import urlparse
import qrcode
import os
import six
+from six.moves import urllib
if six.PY3:
unicode = str
@@ -339,8 +336,8 @@ class otptoken_add(LDAPCreate):
args['counter'] = entry_attrs['ipatokenhotpcounter']
# Build the URI
- label = urllib.quote(entry_attrs['ipatokenuniqueid'])
- parameters = urllib.urlencode(args)
+ label = urllib.parse.quote(entry_attrs['ipatokenuniqueid'])
+ parameters = urllib.parse.urlencode(args)
uri = u'otpauth://%s/%s:%s?%s' % (options['type'], issuer, label, parameters)
setattr(context, 'uri', uri)
@@ -479,14 +476,14 @@ class otptoken_remove_managedby(LDAPRemoveMember):
member_attributes = ['managedby']
-class HTTPSHandler(urllib2.HTTPSHandler):
+class HTTPSHandler(urllib.request.HTTPSHandler):
"Opens SSL HTTPS connections that perform hostname validation."
def __init__(self, **kwargs):
self.__kwargs = kwargs
# Can't use super() because the parent is an old-style class.
- urllib2.HTTPSHandler.__init__(self)
+ urllib.request.HTTPSHandler.__init__(self)
def __inner(self, host, **kwargs):
tmp = self.__kwargs.copy()
@@ -496,6 +493,7 @@ class HTTPSHandler(urllib2.HTTPSHandler):
return NSSConnection(host, **tmp)
def https_open(self, req):
+ # pylint: disable=no-member
return self.do_open(self.__inner, req)
@register()
@@ -519,10 +517,12 @@ class otptoken_sync(Local):
status = {'result': {self.header: 'unknown'}}
# Get the sync URI.
- segments = list(urlparse.urlparse(self.api.env.xmlrpc_uri))
+ segments = list(urllib.parse.urlparse(self.api.env.xmlrpc_uri))
assert segments[0] == 'https' # Ensure encryption.
segments[2] = segments[2].replace('/xml', '/session/sync_token')
- sync_uri = urlparse.urlunparse(segments)
+ # urlunparse *can* take one argument
+ # pylint: disable=too-many-function-args
+ sync_uri = urllib.parse.urlunparse(segments)
# Prepare the query.
query = {k: v for k, v in kwargs.items()
@@ -531,14 +531,14 @@ class otptoken_sync(Local):
obj = self.api.Object.otptoken
query['token'] = DN((obj.primary_key.name, args[0]),
obj.container_dn, self.api.env.basedn)
- query = urllib.urlencode(query)
+ query = urllib.parse.urlencode(query)
# Sync the token.
# pylint: disable=E1101
handler = HTTPSHandler(dbdir=paths.IPA_NSSDB_DIR,
tls_version_min=api.env.tls_version_min,
tls_version_max=api.env.tls_version_max)
- rsp = urllib2.build_opener(handler).open(sync_uri, query)
+ rsp = urllib.request.build_opener(handler).open(sync_uri, query)
if rsp.getcode() == 200:
status['result'][self.header] = rsp.info().get(self.header, 'unknown')
rsp.close()
diff --git a/ipalib/rpc.py b/ipalib/rpc.py
index 3700d44e5..2cf2200d9 100644
--- a/ipalib/rpc.py
+++ b/ipalib/rpc.py
@@ -37,10 +37,8 @@ import datetime
import os
import locale
import base64
-import urllib
import json
import socket
-from urllib2 import urlparse
from xmlrpclib import (Binary, Fault, DateTime, dumps, loads, ServerProxy,
Transport, ProtocolError, MININT, MAXINT)
@@ -49,6 +47,7 @@ from dns import resolver, rdatatype
from dns.exception import DNSException
from nss.error import NSPRError
import six
+from six.moves import urllib
from ipalib.backend import Connectible
from ipalib.constants import LDAP_GENERALIZED_TIME_FORMAT
@@ -720,7 +719,7 @@ class RPCClient(Connectible):
"""
# the configured URL defines what we use for the discovered servers
(scheme, netloc, path, params, query, fragment
- ) = urlparse.urlparse(rpc_uri)
+ ) = urllib.parse.urlparse(rpc_uri)
servers = []
name = '_ldap._tcp.%s.' % self.env.domain
@@ -828,9 +827,11 @@ class RPCClient(Connectible):
setattr(context, 'session_cookie', session_cookie.http_cookie())
# Form the session URL by substituting the session path into the original URL
- scheme, netloc, path, params, query, fragment = urlparse.urlparse(original_url)
+ scheme, netloc, path, params, query, fragment = urllib.parse.urlparse(original_url)
path = self.session_path
- session_url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
+ # urlencode *can* take one argument
+ # pylint: disable=too-many-function-args
+ session_url = urllib.parse.urlunparse((scheme, netloc, path, params, query, fragment))
return session_url
@@ -1019,7 +1020,7 @@ class xmlclient(RPCClient):
class JSONServerProxy(object):
def __init__(self, uri, transport, encoding, verbose, allow_none):
- split_uri = urllib.urlsplit(uri)
+ split_uri = urllib.parse.urlsplit(uri)
if split_uri.scheme not in ("http", "https"):
raise IOError("unsupported XML-RPC protocol")
self.__host = split_uri.netloc
diff --git a/ipalib/session.py b/ipalib/session.py
index 3e3c58529..8815268c5 100644
--- a/ipalib/session.py
+++ b/ipalib/session.py
@@ -21,7 +21,8 @@ import random
import os
import re
import time
-from urllib2 import urlparse
+
+from six.moves.urllib.parse import urlparse
from ipalib import errors
from ipalib.text import _
@@ -1085,7 +1086,7 @@ class MemcacheSessionManager(SessionManager):
expiration = None;
cookie = Cookie(self.session_cookie_name, session_id,
- domain=urlparse.urlparse(api.env.xmlrpc_uri).netloc,
+ domain=urlparse(api.env.xmlrpc_uri).netloc,
path=url_path, httponly=True, secure=True,
expires=expiration)
if add_header:
diff --git a/ipaplatform/redhat/tasks.py b/ipaplatform/redhat/tasks.py
index dd614c906..446e2886e 100644
--- a/ipaplatform/redhat/tasks.py
+++ b/ipaplatform/redhat/tasks.py
@@ -29,12 +29,12 @@ import os
import stat
import socket
import sys
-import urllib
import base64
from subprocess import CalledProcessError
from nss.error import NSPRError
from pyasn1.error import PyAsn1Error
+from six.moves import urllib
from ipapython.ipa_log_manager import root_logger, log_mgr
from ipapython import ipautil
@@ -215,11 +215,11 @@ class RedHatTaskNamespace(BaseTaskNamespace):
"Failed to decode certificate \"%s\": %s", nickname, e)
continue
- label = urllib.quote(nickname)
- subject = urllib.quote(subject)
- issuer = urllib.quote(issuer)
- serial_number = urllib.quote(serial_number)
- public_key_info = urllib.quote(public_key_info)
+ label = urllib.parse.quote(nickname)
+ subject = urllib.parse.quote(subject)
+ issuer = urllib.parse.quote(issuer)
+ serial_number = urllib.parse.quote(serial_number)
+ public_key_info = urllib.parse.quote(public_key_info)
cert = base64.b64encode(cert)
cert = x509.make_pem(cert)
@@ -255,7 +255,7 @@ class RedHatTaskNamespace(BaseTaskNamespace):
"Failed to encode extended key usage for \"%s\": %s",
nickname, e)
continue
- value = urllib.quote(ext_key_usage)
+ value = urllib.parse.quote(ext_key_usage)
obj = ("[p11-kit-object-v1]\n"
"class: x-certificate-extension\n"
"label: \"ExtendedKeyUsage for %(label)s\"\n"
diff --git a/ipapython/config.py b/ipapython/config.py
index 76168f29e..996e761f2 100644
--- a/ipapython/config.py
+++ b/ipapython/config.py
@@ -25,10 +25,10 @@ from dns.exception import DNSException
from ipapython.dn import DN
from ipaplatform.paths import paths
import dns.name
+from six.moves.urllib.parse import urlsplit
import socket
import re
-import urlparse
class IPAConfigError(Exception):
def __init__(self, msg=''):
@@ -163,7 +163,7 @@ def __parse_config(discover_server = True):
if discover_server:
try:
s = p.get("global", "xmlrpc_uri")
- server = urlparse.urlsplit(s)
+ server = urlsplit(s)
config.default_server.append(server.netloc)
except:
pass
diff --git a/ipapython/cookie.py b/ipapython/cookie.py
index ee54efd7b..84de94c9c 100644
--- a/ipapython/cookie.py
+++ b/ipapython/cookie.py
@@ -21,10 +21,10 @@ import re
import time
import datetime
import email.utils
-from urllib2 import urlparse
from calendar import timegm
import six
+from six.moves.urllib.parse import urlparse
from ipapython.ipa_log_manager import log_mgr
@@ -540,7 +540,7 @@ class Cookie(object):
received from.
'''
- scheme, domain, path, params, query, fragment = urlparse.urlparse(url)
+ scheme, domain, path, params, query, fragment = urlparse(url)
if self.domain is None:
self.domain = domain.lower()
@@ -642,7 +642,7 @@ class Cookie(object):
cookie_name = self.key
- url_scheme, url_domain, url_path, url_params, url_query, url_fragment = urlparse.urlparse(url)
+ url_scheme, url_domain, url_path, url_params, url_query, url_fragment = urlparse(url)
cookie_expiration = self.get_expiration()
if cookie_expiration is not None:
diff --git a/ipapython/dogtag.py b/ipapython/dogtag.py
index 305e10a71..398ee0fc4 100644
--- a/ipapython/dogtag.py
+++ b/ipapython/dogtag.py
@@ -22,10 +22,10 @@ import os
import httplib
import xml.dom.minidom
import ConfigParser
-from urllib import urlencode
import nss.nss as nss
import six
+from six.moves.urllib.parse import urlencode
from ipalib import api, errors
from ipalib.errors import NetworkError
diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py
index 573e6040c..9e710f955 100644
--- a/ipapython/ipautil.py
+++ b/ipapython/ipautil.py
@@ -27,7 +27,6 @@ import os, sys, traceback
import copy
import stat
import shutil
-import urllib2
import socket
import struct
from types import *
@@ -45,6 +44,7 @@ from dns import resolver, rdatatype
from dns.exception import DNSException
import six
from six.moves import input
+from six.moves import urllib
from ipapython.ipa_log_manager import *
from ipapython import ipavalidate
@@ -391,7 +391,7 @@ def nolog_replace(string, nolog):
if not isinstance(value, six.string_types):
continue
- quoted = urllib2.quote(value)
+ quoted = urllib.parse.quote(value)
shquoted = shell_quote(value)
for nolog_value in (shquoted, value, quoted):
string = string.replace(nolog_value, 'XXXXXXXX')
diff --git a/ipaserver/install/cainstance.py b/ipaserver/install/cainstance.py
index c4788816a..7a3d46fd5 100644
--- a/ipaserver/install/cainstance.py
+++ b/ipaserver/install/cainstance.py
@@ -38,11 +38,12 @@ import sys
import syslog
import time
import tempfile
-import urllib
import xml.dom.minidom
import shlex
import pipes
+from six.moves import urllib
+
from ipalib import api
from ipalib import pkcs10, x509
from ipalib import errors
@@ -846,7 +847,7 @@ class CAInstance(DogtagInstance):
params['op'] = 'approve'
params['submit'] = 'submit'
params['requestNotes'] = ''
- params = urllib.urlencode(params)
+ params = urllib.parse.urlencode(params)
# Now issue the RA certificate.
args = [
@@ -1074,7 +1075,7 @@ class CAInstance(DogtagInstance):
# Send the request to the CA
conn = httplib.HTTPConnection(
self.fqdn, self.dogtag_constants.UNSECURE_PORT)
- params = urllib.urlencode({'profileId': 'caServerCert',
+ params = urllib.parse.urlencode({'profileId': 'caServerCert',
'cert_request_type': 'pkcs10',
'requestor_name': 'IPA Installer',
'cert_request': csr,
diff --git a/ipaserver/plugins/dogtag.py b/ipaserver/plugins/dogtag.py
index 1a4bf2eab..6758b9077 100644
--- a/ipaserver/plugins/dogtag.py
+++ b/ipaserver/plugins/dogtag.py
@@ -244,13 +244,13 @@ from lxml import etree
import os
import tempfile
import time
-import urllib2
import pki
from pki.client import PKIConnection
import pki.crypto as cryptoutil
from pki.kra import KRAClient
import six
+from six.moves import urllib
from ipalib import Backend
from ipapython.dn import DN
@@ -1843,21 +1843,21 @@ class ra(rabase.rabase):
url = 'http://%s/ca/rest/certs/search?size=%d' % (ipautil.format_netloc(self.ca_host, ipapython.dogtag.configured_constants().UNSECURE_PORT), options.get('sizelimit', 100))
- opener = urllib2.build_opener()
+ opener = urllib.request.build_opener()
opener.addheaders = [('Accept-Encoding', 'gzip, deflate'),
('User-Agent', 'IPA')]
- req = urllib2.Request(url=url, data=payload, headers={'Content-Type': 'application/xml'})
+ req = urllib.request.Request(url=url, data=payload, headers={'Content-Type': 'application/xml'})
try:
response = opener.open(req)
- except urllib2.HTTPError, e:
+ except urllib.error.HTTPError as e:
self.debug('HTTP Response code: %d' % e.getcode())
if e.getcode() == 501:
self.raise_certificate_operation_error('find',
detail=_('find not supported on CAs upgraded from 9 to 10'))
self.raise_certificate_operation_error('find',
detail=e.msg)
- except urllib2.URLError, e:
+ except urllib.error.URLError as e:
self.raise_certificate_operation_error('find',
detail=e.reason)
@@ -1866,7 +1866,7 @@ class ra(rabase.rabase):
parser = etree.XMLParser()
try:
doc = etree.fromstring(data[0], parser)
- except etree.XMLSyntaxError, e:
+ except etree.XMLSyntaxError as e:
self.raise_certificate_operation_error('find',
detail=e.msg)
diff --git a/ipaserver/rpcserver.py b/ipaserver/rpcserver.py
index 554f4f506..72c481df3 100644
--- a/ipaserver/rpcserver.py
+++ b/ipaserver/rpcserver.py
@@ -27,7 +27,6 @@ from xml.sax.saxutils import escape
from xmlrpclib import Fault
import os
import datetime
-import urlparse
import json
import traceback
import gssapi
@@ -37,6 +36,7 @@ import ldap.controls
from pyasn1.type import univ, namedtype
from pyasn1.codec.ber import encoder
import six
+from six.moves.urllib.parse import parse_qs
from ipalib import plugable, errors
from ipalib.capabilities import VERSION_WITHOUT_CAPABILITIES
@@ -225,9 +225,7 @@ def extract_query(environ):
elif environ['REQUEST_METHOD'] == 'GET':
qstr = environ['QUERY_STRING']
if qstr:
- query = dict(nicify_query(
- urlparse.parse_qs(qstr)#, keep_blank_values=True)
- ))
+ query = dict(nicify_query(parse_qs(qstr))) # keep_blank_values=True)
else:
query = {}
environ['wsgi.query'] = query
@@ -892,7 +890,7 @@ class login_password(Backend, KerberosSession, HTTP_Status):
return self.bad_request(environ, start_response, "HTTP request method must be POST")
try:
- query_dict = urlparse.parse_qs(query_string)
+ query_dict = parse_qs(query_string)
except Exception as e:
return self.bad_request(environ, start_response, "cannot parse query data")
@@ -1013,7 +1011,7 @@ class change_password(Backend, HTTP_Status):
return self.bad_request(environ, start_response, "HTTP request method must be POST")
try:
- query_dict = urlparse.parse_qs(query_string)
+ query_dict = parse_qs(query_string)
except Exception as e:
return self.bad_request(environ, start_response, "cannot parse query data")
@@ -1115,7 +1113,7 @@ class sync_token(Backend, HTTP_Status):
# Parse the query string to a dictionary.
try:
- query_dict = urlparse.parse_qs(query_string)
+ query_dict = parse_qs(query_string)
except Exception as e:
return self.bad_request(environ, start_response, "cannot parse query data")
data = {}
diff --git a/ipatests/test_ipaserver/httptest.py b/ipatests/test_ipaserver/httptest.py
index 7f1b5b136..891364c06 100644
--- a/ipatests/test_ipaserver/httptest.py
+++ b/ipatests/test_ipaserver/httptest.py
@@ -20,9 +20,10 @@
Base class for HTTP request tests
"""
-import urllib
import httplib
+from six.moves import urllib
+
from ipalib import api
class Unauthorized_HTTP_test(object):
@@ -41,7 +42,9 @@ class Unauthorized_HTTP_test(object):
:param key When not None, overrides default app_uri
"""
if params is not None:
- params = urllib.urlencode(params, True)
+ # urlencode *can* take two arguments
+ # pylint: disable=too-many-function-args
+ params = urllib.parse.urlencode(params, True)
url = 'https://' + self.host + self.app_uri
headers = {'Content-Type' : self.content_type,
diff --git a/ipatests/test_webui/ui_driver.py b/ipatests/test_webui/ui_driver.py
index 6f2013c4a..fc22f8612 100644
--- a/ipatests/test_webui/ui_driver.py
+++ b/ipatests/test_webui/ui_driver.py
@@ -53,7 +53,7 @@ try:
NO_YAML = False
except ImportError:
NO_YAML = True
-from urllib2 import URLError
+from six.moves.urllib.error import URLError
from ipaplatform.paths import paths
ENV_MAP = {