diff --git a/jenkins/__init__.py b/jenkins/__init__.py index c8b20ed..e0fde01 100644 --- a/jenkins/__init__.py +++ b/jenkins/__init__.py @@ -198,7 +198,7 @@ class Jenkins(object): except (NotFoundException, EmptyResponseException): self.crumb = False else: - self.crumb = json.loads(response.decode('utf-8')) + self.crumb = json.loads(response) if self.crumb: req.add_header(self.crumb['crumbRequestField'], self.crumb['crumb']) @@ -282,7 +282,7 @@ class Jenkins(object): raise EmptyResponseException( "Error communicating with server[%s]: " "empty response" % self.server) - return response + return response.decode('utf-8') except HTTPError as e: # Jenkins's funky authentication means its nigh impossible to # distinguish errors. @@ -415,7 +415,13 @@ class Jenkins(object): raise EmptyResponseException( "Error communicating with server[%s]: " "empty response" % self.server) - return response.info().getheader('X-Jenkins') + + if six.PY2: + return response.info().getheader('X-Jenkins') + + if six.PY3: + return response.getheader('X-Jenkins') + except (HTTPError, BadStatusLine): raise BadHTTPException("Error communicating with server[%s]" % self.server) diff --git a/tests/test_jenkins.py b/tests/test_jenkins.py index 2c6207e..2c59f2d 100644 --- a/tests/test_jenkins.py +++ b/tests/test_jenkins.py @@ -76,7 +76,7 @@ class JenkinsTest(unittest.TestCase): j = jenkins.Jenkins('http://example.com', long_str, long_str) self.assertNotIn(b"\n", j.auth) - self.assertEqual(j.auth.decode(), 'Basic %s' % ( + self.assertEqual(j.auth.decode('utf-8'), 'Basic %s' % ( long_str_b64 + 'Om' + long_str_b64[2:] + 'YQ==')) def test_constructor_default_timeout(self): @@ -162,7 +162,7 @@ class JenkinsTest(unittest.TestCase): self.assertEqual( jenkins_mock.call_args[0][0].get_full_url(), 'http://example.com/job/TestJob') - self.assertEqual(response, json.dumps(data).encode('utf-8')) + self.assertEqual(response, json.dumps(data)) self.assertEqual(j.crumb, crumb_data) self.assertEqual(request.headers['.crumb'], crumb_data['crumb']) @@ -631,7 +631,12 @@ class JenkinsTest(unittest.TestCase): j = jenkins.Jenkins('http://example.com/', 'test', 'test') mock_response = Mock() - config = {'info.return_value.getheader.return_value': 'Version42'} + if six.PY2: + config = {'info.return_value.getheader.return_value': 'Version42'} + + if six.PY3: + config = {'getheader.return_value': 'Version42'} + mock_response.configure_mock(**config) urlopen_mock.side_effect = [mock_response] self.assertEqual(j.get_version(), 'Version42')