)]}'
{"keystoneclient/session.py":[{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"4718f583ba9b8632509f1dac8d9ed5e901360505","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":201,"context_line":"            # If we added data and it looks like the error came"},{"line_number":202,"context_line":"            # from the data payload, try again"},{"line_number":203,"context_line":"            if data and e.object.startswith(\"-d\"):"},{"line_number":204,"context_line":"                string_parts[-1] \u003d (\"-d \u0027%s\u0027\" % data).decode(\"ascii\","},{"line_number":205,"context_line":"                                                             \"replace\")"},{"line_number":206,"context_line":"                logger.debug(\"Decoded data to ascii with \u0027replace\u0027,\""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_3ef9594e","line":203,"updated":"2016-02-09 19:18:22.000000000","message":"note, this startswith stuff is too narrow, taking it out. The test from the original patch proved that this is misguided :)","commit_id":"d0d14d54f165f1332babb2f26bf57c6ab36e80ae"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"c85fec94a838e0dd3f0270abbd3cbd3d8fd6431c","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            # If we added data and it looks like the error came"},{"line_number":202,"context_line":"            # from the data payload, try again"},{"line_number":203,"context_line":"            if data and e.object.startswith(\"-d\"):"},{"line_number":204,"context_line":"                string_parts[-1] \u003d (\"-d \u0027%s\u0027\" % data).decode(\"ascii\","},{"line_number":205,"context_line":"                                                             \"replace\")"},{"line_number":206,"context_line":"                logger.debug(\"Decoded data to ascii with \u0027replace\u0027,\""},{"line_number":207,"context_line":"                             \"data caused UnicodeDecodeError\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_1ee7bd41","line":204,"updated":"2016-02-09 19:06:19.000000000","message":"Does this fix the issue? It looks to me like anything in string_parts could be a bytestring and blow up logging. Is it really only data that has the issue?","commit_id":"d0d14d54f165f1332babb2f26bf57c6ab36e80ae"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"4718f583ba9b8632509f1dac8d9ed5e901360505","unresolved":false,"context_lines":[{"line_number":201,"context_line":"            # If we added data and it looks like the error came"},{"line_number":202,"context_line":"            # from the data payload, try again"},{"line_number":203,"context_line":"            if data and e.object.startswith(\"-d\"):"},{"line_number":204,"context_line":"                string_parts[-1] \u003d (\"-d \u0027%s\u0027\" % data).decode(\"ascii\","},{"line_number":205,"context_line":"                                                             \"replace\")"},{"line_number":206,"context_line":"                logger.debug(\"Decoded data to ascii with \u0027replace\u0027,\""},{"line_number":207,"context_line":"                             \"data caused UnicodeDecodeError\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_1ee57da7","line":204,"in_reply_to":"3a57f1b5_1ee7bd41","updated":"2016-02-09 19:18:22.000000000","message":"Hmm, maybe right. I was trying to be as narrow as possible. In my case, it\u0027s definitely the data and this does the fix -- I wonder how likely it is that standard request headers would contain non-decodable characters.","commit_id":"d0d14d54f165f1332babb2f26bf57c6ab36e80ae"},{"author":{"_account_id":10670,"name":"Michael McCune","email":"elmiko@redhat.com","username":"mimccune"},"change_message_id":"59a5a85a43b1785f81d58c8ae322f9156f8e8305","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                string_parts[-1] \u003d (\"-d \u0027%s\u0027\" % data).decode(\"ascii\","},{"line_number":205,"context_line":"                                                             \"replace\")"},{"line_number":206,"context_line":"                logger.debug(\"Decoded data to ascii with \u0027replace\u0027,\""},{"line_number":207,"context_line":"                             \"data caused UnicodeDecodeError\")"},{"line_number":208,"context_line":"                logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_b316e253","line":207,"updated":"2016-02-09 19:02:38.000000000","message":"the wording on this log message seems a little confusing to me. i wonder if it should even mention the whole ascii decode with replace part?","commit_id":"d0d14d54f165f1332babb2f26bf57c6ab36e80ae"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"4718f583ba9b8632509f1dac8d9ed5e901360505","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                string_parts[-1] \u003d (\"-d \u0027%s\u0027\" % data).decode(\"ascii\","},{"line_number":205,"context_line":"                                                             \"replace\")"},{"line_number":206,"context_line":"                logger.debug(\"Decoded data to ascii with \u0027replace\u0027,\""},{"line_number":207,"context_line":"                             \"data caused UnicodeDecodeError\")"},{"line_number":208,"context_line":"                logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                raise e"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_fe674123","line":207,"in_reply_to":"3a57f1b5_b316e253","updated":"2016-02-09 19:18:22.000000000","message":"That was based on a suggestion from the original patch, to let users know that the data had been modified. Maybe there is better wording?  This data will (probably) have a bunch of chars that have been replaced with the standard python unicode replacement character, so it could be misleading if there isn\u0027t some kind of heads up.","commit_id":"d0d14d54f165f1332babb2f26bf57c6ab36e80ae"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"c85fec94a838e0dd3f0270abbd3cbd3d8fd6431c","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                             \"data caused UnicodeDecodeError\")"},{"line_number":208,"context_line":"                logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                raise e"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _http_log_response(self, response, logger):"},{"line_number":213,"context_line":"        if not logger.isEnabledFor(logging.DEBUG):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_5e41b538","line":210,"updated":"2016-02-09 19:06:19.000000000","message":"just do \u0027raise\u0027 so that we keep the original traceback.","commit_id":"d0d14d54f165f1332babb2f26bf57c6ab36e80ae"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"4718f583ba9b8632509f1dac8d9ed5e901360505","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                             \"data caused UnicodeDecodeError\")"},{"line_number":208,"context_line":"                logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                raise e"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"    def _http_log_response(self, response, logger):"},{"line_number":213,"context_line":"        if not logger.isEnabledFor(logging.DEBUG):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a57f1b5_3e7e39af","line":210,"in_reply_to":"3a57f1b5_5e41b538","updated":"2016-02-09 19:18:22.000000000","message":"ack thanks","commit_id":"d0d14d54f165f1332babb2f26bf57c6ab36e80ae"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3ea6794653e89b3d5b212cb674f46a78945b179f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"                string_parts.append(\"-d \u0027%s\u0027\" % data)"},{"line_number":199,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \", original caused UnicodeDecodeError\")"},{"line_number":203,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts).decode(\"ascii\", \"replace\"))"},{"line_number":204,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_ab818afd","line":201,"updated":"2016-02-09 19:57:29.000000000","message":"Could we add somewhere that the log is what contains the characters?\n\nsomething like: \n\"Log contained binary data. Replaced characters that could not be decoded, original caused UnicodeDecodeError\"","commit_id":"5af1d1ced61bcdcad96f6ead111186e721c4ac84"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"4ed8ad1e3b24a7fef786ccdc61fbd60350bdd12b","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                string_parts.append(\u0027-H \"%s: %s\"\u0027"},{"line_number":194,"context_line":"                                    % self._process_header(header))"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            if data:"},{"line_number":198,"context_line":"                string_parts.append(\"-d \u0027%s\u0027\" % data)"},{"line_number":199,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_01875d62","line":196,"updated":"2016-02-09 20:32:08.000000000","message":"I suppose to be strict, the exception handler only needs to be around the logger call","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e45ad8f1080b22dff42fdde2dd97dea2061bf7b0","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                string_parts.append(\u0027-H \"%s: %s\"\u0027"},{"line_number":194,"context_line":"                                    % self._process_header(header))"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            if data:"},{"line_number":198,"context_line":"                string_parts.append(\"-d \u0027%s\u0027\" % data)"},{"line_number":199,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_f5c67715","line":196,"in_reply_to":"3a57f1b5_01875d62","updated":"2016-02-09 22:57:10.000000000","message":"++","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e45ad8f1080b22dff42fdde2dd97dea2061bf7b0","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            if data:"},{"line_number":198,"context_line":"                string_parts.append(\"-d \u0027%s\u0027\" % data)"},{"line_number":199,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_d0afc992","line":199,"range":{"start_line":199,"start_character":12,"end_line":199,"end_character":48},"updated":"2016-02-09 22:57:10.000000000","message":"remove this","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"fd55e7272aa555adc16a1872ba66250b280cb836","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            if data:"},{"line_number":198,"context_line":"                string_parts.append(\"-d \u0027%s\u0027\" % data)"},{"line_number":199,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_e45541c6","line":199,"range":{"start_line":199,"start_character":12,"end_line":199,"end_character":48},"in_reply_to":"3a57f1b5_d0afc992","updated":"2016-02-10 15:49:21.000000000","message":"hmm, possible. I\u0027ll have to check and verify whether or not it\u0027s the join that causes the exception, or the log call.\n\nIf it\u0027s the log call itself (I think it is), then this can\u0027t be removed -- both calls are necessary, with the second being the retry after the data has been modified in response to the exception.","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"947784cece4ad0851c599aa2d7228420d76066d1","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            if data:"},{"line_number":198,"context_line":"                string_parts.append(\"-d \u0027%s\u0027\" % data)"},{"line_number":199,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_ebaaec6f","line":199,"range":{"start_line":199,"start_character":12,"end_line":199,"end_character":48},"in_reply_to":"3a57f1b5_e45541c6","updated":"2016-02-10 17:15:45.000000000","message":"Okay, more than I ever wanted to know about decode, but the answer is that the exception can be raised by either the join() or the logger call depending on content. Consider:\n\n\u0027 \u0027.join([u\u0027cat\u0027, chr(187)])\n\nand \n\n\u0027 \u0027.join([\u0027cat\u0027, chr(187)])\n\nThey both contain non-ascii, but the first will raise an exception in the join because we have unicode strings mixed with byte strings. This is a no-no. Unfortunately, we have no control over the elements of string parts -- they could be anything.\n\nSo we\u0027ve actually got to wrap both in the exception handler.","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"c02a0e2adfdfcf544b0fb9202384c608ac94ae92","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        try:"},{"line_number":197,"context_line":"            if data:"},{"line_number":198,"context_line":"                string_parts.append(\"-d \u0027%s\u0027\" % data)"},{"line_number":199,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_8ccb4f53","line":199,"range":{"start_line":199,"start_character":12,"end_line":199,"end_character":48},"in_reply_to":"3a57f1b5_ebaaec6f","updated":"2016-02-10 17:42:00.000000000","message":"okay that makes sense.  thanks for the update! that is good to know","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e45ad8f1080b22dff42fdde2dd97dea2061bf7b0","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"},{"line_number":203,"context_line":"            string_parts \u003d [part.decode("},{"line_number":204,"context_line":"                \"ascii\", \"replace\") for part in string_parts]"},{"line_number":205,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _http_log_response(self, response, logger):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_41e4753a","line":204,"range":{"start_line":203,"start_character":12,"end_line":204,"end_character":61},"updated":"2016-02-09 22:57:10.000000000","message":"instead of this you can look into http://docs.openstack.org/developer/oslo.utils/api/encodeutils.html#oslo_utils.encodeutils.safe_decode  I tried it and i couldn\u0027t get it to work, maybe you will have better luck. otherwise don\u0027t sweat.","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"c02a0e2adfdfcf544b0fb9202384c608ac94ae92","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"},{"line_number":203,"context_line":"            string_parts \u003d [part.decode("},{"line_number":204,"context_line":"                \"ascii\", \"replace\") for part in string_parts]"},{"line_number":205,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _http_log_response(self, response, logger):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_accdeb5e","line":204,"range":{"start_line":203,"start_character":12,"end_line":204,"end_character":61},"in_reply_to":"3a57f1b5_041bbd73","updated":"2016-02-10 17:42:00.000000000","message":"yeah. it was mentioned by Dim i think and it just wanted to test it out to make sure that is not an easier way about fixing the bug. Thanks for taking a look","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"fd55e7272aa555adc16a1872ba66250b280cb836","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        except UnicodeDecodeError:"},{"line_number":201,"context_line":"            logger.debug(\"Replaced characters that could not be decoded\""},{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"},{"line_number":203,"context_line":"            string_parts \u003d [part.decode("},{"line_number":204,"context_line":"                \"ascii\", \"replace\") for part in string_parts]"},{"line_number":205,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _http_log_response(self, response, logger):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_041bbd73","line":204,"range":{"start_line":203,"start_character":12,"end_line":204,"end_character":61},"in_reply_to":"3a57f1b5_41e4753a","updated":"2016-02-10 15:49:21.000000000","message":"Okay, I\u0027ll take a look. I think it was used/mentioned in the original abandoned patch","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"e45ad8f1080b22dff42fdde2dd97dea2061bf7b0","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"},{"line_number":203,"context_line":"            string_parts \u003d [part.decode("},{"line_number":204,"context_line":"                \"ascii\", \"replace\") for part in string_parts]"},{"line_number":205,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _http_log_response(self, response, logger):"},{"line_number":208,"context_line":"        if not logger.isEnabledFor(logging.DEBUG):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_554bcbb0","line":205,"range":{"start_line":205,"start_character":12,"end_line":205,"end_character":48},"updated":"2016-02-09 22:57:10.000000000","message":"probably can bump this out 4 spaces and remove the duplication.","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"fd55e7272aa555adc16a1872ba66250b280cb836","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"},{"line_number":203,"context_line":"            string_parts \u003d [part.decode("},{"line_number":204,"context_line":"                \"ascii\", \"replace\") for part in string_parts]"},{"line_number":205,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    def _http_log_response(self, response, logger):"},{"line_number":208,"context_line":"        if not logger.isEnabledFor(logging.DEBUG):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a57f1b5_640f11e2","line":205,"range":{"start_line":205,"start_character":12,"end_line":205,"end_character":48},"in_reply_to":"3a57f1b5_554bcbb0","updated":"2016-02-10 15:49:21.000000000","message":"could be, see above","commit_id":"836a38b5ea2c35269e74429ad8a341fb26647060"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"7114c32c9c3eb3b132d0fddc07e20a59212eafe0","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                         \" in log output, original caused UnicodeDecodeError\")"},{"line_number":204,"context_line":"            string_parts \u003d ["},{"line_number":205,"context_line":"                encodeutils.safe_decode("},{"line_number":206,"context_line":"                    part, errors\u003d\u0027replace\u0027) for part in string_parts]"},{"line_number":207,"context_line":"            logger.debug(\u0027 \u0027.join(string_parts))"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    def _http_log_response(self, response, logger):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_af363de5","line":206,"updated":"2016-02-10 17:54:19.000000000","message":"Cool! safe_decode() wasn\u0027t working when I was testing it because i forgot to pass \u0027replace\u0027. Awesome!","commit_id":"6aa2bf99e4bf7a12f41ebbcaa378c215f1f3850f"}],"keystoneclient/tests/unit/test_session.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3ea6794653e89b3d5b212cb674f46a78945b179f","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        self.assertIn(body, self.logger.output)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    def test_unicode_data_in_debug_output(self):"},{"line_number":190,"context_line":"        \"\"\"Test if uncode printable data does show in the debug logs.\"\"\""},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"        session \u003d client_session.Session(verify\u003dFalse)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_4b31f6eb","line":190,"range":{"start_line":190,"start_character":19,"end_line":190,"end_character":25},"updated":"2016-02-09 19:57:29.000000000","message":"Unicode?","commit_id":"5af1d1ced61bcdcad96f6ead111186e721c4ac84"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"3ea6794653e89b3d5b212cb674f46a78945b179f","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    def test_binary_data_not_in_debug_output(self):"},{"line_number":202,"context_line":"        \"\"\"Test if binary data does not show in the debug logs.\"\"\""},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        import sys"},{"line_number":205,"context_line":"        if sys.version_info \u003c (3, 0):"},{"line_number":206,"context_line":"            data \u003d chr(255)"},{"line_number":207,"context_line":"        else:"},{"line_number":208,"context_line":"            # Python 3 logging handles binary data well."}],"source_content_type":"text/x-python","patch_set":2,"id":"3a57f1b5_795b6b55","line":205,"range":{"start_line":204,"start_character":7,"end_line":205,"end_character":37},"updated":"2016-02-09 19:57:29.000000000","message":"can\u0027t we just use \"if six.PY2\"","commit_id":"5af1d1ced61bcdcad96f6ead111186e721c4ac84"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"7114c32c9c3eb3b132d0fddc07e20a59212eafe0","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        self.assertIn(\"Replaced characters that could not be decoded\""},{"line_number":222,"context_line":"                      \" in log output\", self.logger.output)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_logging_cacerts(self):"},{"line_number":225,"context_line":"        path_to_certs \u003d \u0027/path/to/certs\u0027"},{"line_number":226,"context_line":"        session \u003d client_session.Session(verify\u003dpath_to_certs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_6f47e54b","line":223,"updated":"2016-02-10 17:54:19.000000000","message":"1 more quick fix. Can we check the expected data that should be in the log and to assert it worked correctly?","commit_id":"6aa2bf99e4bf7a12f41ebbcaa378c215f1f3850f"},{"author":{"_account_id":8091,"name":"Trevor McKay","email":"tmckay@redhat.com","username":"tmckay"},"change_message_id":"298e9ed8529d6e095be5572937bc7525ecb24fee","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        self.assertIn(\"Replaced characters that could not be decoded\""},{"line_number":222,"context_line":"                      \" in log output\", self.logger.output)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_logging_cacerts(self):"},{"line_number":225,"context_line":"        path_to_certs \u003d \u0027/path/to/certs\u0027"},{"line_number":226,"context_line":"        session \u003d client_session.Session(verify\u003dpath_to_certs)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a57f1b5_00ecfe8d","line":223,"in_reply_to":"3a57f1b5_6f47e54b","updated":"2016-02-10 19:06:58.000000000","message":"Done","commit_id":"6aa2bf99e4bf7a12f41ebbcaa378c215f1f3850f"}]}
