diff --git a/keystoneclient/session.py b/keystoneclient/session.py index 41bb124ff..5c027b80b 100644 --- a/keystoneclient/session.py +++ b/keystoneclient/session.py @@ -201,6 +201,11 @@ class Session(object): % self._process_header(header)) if data: + if isinstance(data, six.binary_type): + try: + data = data.decode("ascii") + except UnicodeDecodeError: + data = "" string_parts.append("-d '%s'" % data) try: logger.debug(' '.join(string_parts)) diff --git a/keystoneclient/tests/unit/test_session.py b/keystoneclient/tests/unit/test_session.py index 8fb364ac0..d1bd80394 100644 --- a/keystoneclient/tests/unit/test_session.py +++ b/keystoneclient/tests/unit/test_session.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- +# # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at @@ -194,7 +196,7 @@ class SessionTests(utils.TestCase): session = client_session.Session(verify=False) body = 'RESP' - data = u'unicode_data' + data = u'αβγδ' self.stub_url('POST', text=body) session.post(self.TEST_URL, data=data) @@ -219,12 +221,7 @@ class SessionTests(utils.TestCase): # raise a UnicodeDecodeError) session.post(unicode(self.TEST_URL), data=data) - self.assertIn("Replaced characters that could not be decoded" - " in log output", self.logger.output) - - # Our data payload should have changed to - # include the replacement char - self.assertIn(u"-d 'my data\ufffd'", self.logger.output) + self.assertNotIn('my data', self.logger.output) def test_logging_cacerts(self): path_to_certs = '/path/to/certs'