)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a38392c7a2a76ac0c2c167df6086302df8a149a7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Sean Perry \u003csean.perry@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-17 13:05:17 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Prevent exception from occurring for invalidly encoded parameters"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"An exception occurs in the WebOb library when it tries to decode a"},{"line_number":10,"context_line":"parameter that is not valid UTF8. To avoid this let\u0027s wrap the section"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"fa1b9901_3eee188c","line":7,"updated":"2015-08-17 21:13:05.000000000","message":"This should be limited to 50 characters: https://wiki.openstack.org/wiki/GitCommitMessages#Summary_of_Git_commit_message_structure","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"}],"keystone/common/wsgi.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a38392c7a2a76ac0c2c167df6086302df8a149a7","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            # allow middleware up the stack to provide context,"},{"line_number":200,"context_line":"            # params and headers."},{"line_number":201,"context_line":"            context \u003d req.environ.get(CONTEXT_ENV, {})"},{"line_number":202,"context_line":"            context[\u0027query_string\u0027] \u003d dict(req.params.items())"},{"line_number":203,"context_line":"            context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":204,"context_line":"            context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"},{"line_number":205,"context_line":"            scheme \u003d (None if not CONF.secure_proxy_ssl_header"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_def59c83","line":202,"updated":"2015-08-17 21:13:05.000000000","message":"Since it\u0027s really just this line that fails can we limit the try-except handling to it?","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"61821ea220db56e29e1eaf782e616e37bb777dba","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            # allow middleware up the stack to provide context,"},{"line_number":200,"context_line":"            # params and headers."},{"line_number":201,"context_line":"            context \u003d req.environ.get(CONTEXT_ENV, {})"},{"line_number":202,"context_line":"            context[\u0027query_string\u0027] \u003d dict(req.params.items())"},{"line_number":203,"context_line":"            context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":204,"context_line":"            context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"},{"line_number":205,"context_line":"            scheme \u003d (None if not CONF.secure_proxy_ssl_header"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_b9c48292","line":202,"in_reply_to":"fa1b9901_9e55e41e","updated":"2015-08-17 22:16:09.000000000","message":"If you can prove in a test that it happens then I would say we should widen a little bit, although I am not a fan of the diaper pattern.","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"ae5e836346196c7ee57063d65d7581641cee44ac","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            # allow middleware up the stack to provide context,"},{"line_number":200,"context_line":"            # params and headers."},{"line_number":201,"context_line":"            context \u003d req.environ.get(CONTEXT_ENV, {})"},{"line_number":202,"context_line":"            context[\u0027query_string\u0027] \u003d dict(req.params.items())"},{"line_number":203,"context_line":"            context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":204,"context_line":"            context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"},{"line_number":205,"context_line":"            scheme \u003d (None if not CONF.secure_proxy_ssl_header"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_9e55e41e","line":202,"in_reply_to":"fa1b9901_def59c83","updated":"2015-08-17 21:24:17.000000000","message":"I went wide because it could also in theory occur with other parts of the request.\n\nIf the caution is unwarranted I have no problem limiting the scope.","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a38392c7a2a76ac0c2c167df6086302df8a149a7","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":226,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":227,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":228,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        context.setdefault(\u0027is_admin\u0027, False)"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_de511c64","line":228,"updated":"2015-08-17 21:13:05.000000000","message":"Strictly speaking, I don\u0027t think UTF-8 is forced is it? I thought the encoding used to decode could be based on what the useragent sent as the encoding. This is just a guess based off of what I have seen and I\u0027m just wondering what is correct...","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"61821ea220db56e29e1eaf782e616e37bb777dba","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":226,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":227,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":228,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        context.setdefault(\u0027is_admin\u0027, False)"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_d9c13682","line":228,"in_reply_to":"fa1b9901_9e2c04ad","updated":"2015-08-17 22:16:09.000000000","message":"I think you may be correct here. I only quickly looked at the RFC.","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"ae5e836346196c7ee57063d65d7581641cee44ac","unresolved":false,"context_lines":[{"line_number":225,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":226,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":227,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":228,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        context.setdefault(\u0027is_admin\u0027, False)"},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_9e2c04ad","line":228,"in_reply_to":"fa1b9901_de511c64","updated":"2015-08-17 21:24:17.000000000","message":"I thought UTF8 was the standard here because we are dealing with URL parameters. If I am wrong I can try to update the message to reflect the required encoding","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"96353c923a0739b721bd2ffef42ff392ae0fcafa","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        try:"},{"line_number":202,"context_line":"            context[\u0027query_string\u0027] \u003d dict(req.params.items())"},{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_8bd35938","line":204,"updated":"2015-08-18 02:12:36.000000000","message":"Suggest: WebOb will raise a UnicodeDecodeError if i cannot decode the request","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"c3853e68967576a1fe00e4e73df555e75d9980d3","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        try:"},{"line_number":202,"context_line":"            context[\u0027query_string\u0027] \u003d dict(req.params.items())"},{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_d8b10291","line":204,"in_reply_to":"fa1b9901_42641f21","updated":"2015-08-18 17:29:18.000000000","message":"yes, i meant \u0027it\u0027. I was a type.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"627f75eef49d99d23f5c6f082806d2d2454e366d","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        try:"},{"line_number":202,"context_line":"            context[\u0027query_string\u0027] \u003d dict(req.params.items())"},{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_42641f21","line":204,"in_reply_to":"fa1b9901_8bd35938","updated":"2015-08-18 16:58:52.000000000","message":"Why \"I\" here? It is WebOb that is failing to handle the Unicode? Which in standard English is an \"it\".","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"96353c923a0739b721bd2ffef42ff392ae0fcafa","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":209,"context_line":"        context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_2be56d08","line":206,"updated":"2015-08-18 02:12:36.000000000","message":"Suggest: _(\u0027Query string is not UTF-8 encoded\u0027)\n\nthe _() will i18n the string.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"627f75eef49d99d23f5c6f082806d2d2454e366d","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":209,"context_line":"        context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_5d008401","line":206,"in_reply_to":"fa1b9901_2be56d08","updated":"2015-08-18 16:58:52.000000000","message":"Good suggestion.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"fc08196cb0a72e211b00e9a9cdf394c260e018a7","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":209,"context_line":"        context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_f8c0867e","line":206,"in_reply_to":"fa1b9901_2be56d08","updated":"2015-08-18 17:11:43.000000000","message":"Of course that makes the line 83 characters long....\n\nIt is 2015 and we are still coding to silly UI impediments from 40+ years ago.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"72f23d882a85583d6bf0f6f56544c731f531865c","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":209,"context_line":"        context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_f120c34b","line":206,"in_reply_to":"fa1b9901_2be56d08","updated":"2015-08-18 05:32:02.000000000","message":"hah nice","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"c3853e68967576a1fe00e4e73df555e75d9980d3","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        except UnicodeDecodeError as e:"},{"line_number":204,"context_line":"            # The webob package will throw UnicodeError if it cannot decode the"},{"line_number":205,"context_line":"            # request. Raise ValidationError instead to avoid an UnknownError."},{"line_number":206,"context_line":"            raise exception.ValidationError(\"request is not proper UTF8\")"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        context[\u0027headers\u0027] \u003d dict(req.headers.items())"},{"line_number":209,"context_line":"        context[\u0027path\u0027] \u003d req.environ[\u0027PATH_INFO\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_98ab8a1d","line":206,"in_reply_to":"fa1b9901_f8c0867e","updated":"2015-08-18 17:29:18.000000000","message":"that\u0027s life","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"96353c923a0739b721bd2ffef42ff392ae0fcafa","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        context[\u0027host_url\u0027] \u003d req.host_url"},{"line_number":221,"context_line":"        params \u003d req.environ.get(PARAMS_ENV, {})"},{"line_number":222,"context_line":"        # authentication and authorization attributes are set as environment"},{"line_number":223,"context_line":"        # values by the container and processed by the pipeline. The complete"},{"line_number":224,"context_line":"        # set is not yet known."},{"line_number":225,"context_line":"        context[\u0027environment\u0027] \u003d req.environ"},{"line_number":226,"context_line":"        context[\u0027accept_header\u0027] \u003d req.accept"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_8bba79e0","line":223,"updated":"2015-08-18 02:12:36.000000000","message":"I\u0027m OK with this some others may ask for it to be in a separate commit.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"72f23d882a85583d6bf0f6f56544c731f531865c","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        context[\u0027host_url\u0027] \u003d req.host_url"},{"line_number":221,"context_line":"        params \u003d req.environ.get(PARAMS_ENV, {})"},{"line_number":222,"context_line":"        # authentication and authorization attributes are set as environment"},{"line_number":223,"context_line":"        # values by the container and processed by the pipeline. The complete"},{"line_number":224,"context_line":"        # set is not yet known."},{"line_number":225,"context_line":"        context[\u0027environment\u0027] \u003d req.environ"},{"line_number":226,"context_line":"        context[\u0027accept_header\u0027] \u003d req.accept"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_d1001fad","line":223,"in_reply_to":"fa1b9901_8bba79e0","updated":"2015-08-18 05:32:02.000000000","message":"I am not a big fan of submitting a separate commit to just fix a typo. Seem like wasting Jenkins resource. But hey, whatever makes people happy I guess.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"627f75eef49d99d23f5c6f082806d2d2454e366d","unresolved":false,"context_lines":[{"line_number":220,"context_line":"        context[\u0027host_url\u0027] \u003d req.host_url"},{"line_number":221,"context_line":"        params \u003d req.environ.get(PARAMS_ENV, {})"},{"line_number":222,"context_line":"        # authentication and authorization attributes are set as environment"},{"line_number":223,"context_line":"        # values by the container and processed by the pipeline. The complete"},{"line_number":224,"context_line":"        # set is not yet known."},{"line_number":225,"context_line":"        context[\u0027environment\u0027] \u003d req.environ"},{"line_number":226,"context_line":"        context[\u0027accept_header\u0027] \u003d req.accept"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_9d35bcdb","line":223,"in_reply_to":"fa1b9901_8bba79e0","updated":"2015-08-18 16:58:52.000000000","message":"I originally fixed this when I had to indent the region so it was in my commit. It just felt silly to revert it and make a separate change.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"}],"keystone/tests/unit/test_wsgi.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"a38392c7a2a76ac0c2c167df6086302df8a149a7","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        class FakeApp(wsgi.Application):"},{"line_number":207,"context_line":"            def index(self, context):"},{"line_number":208,"context_line":"                return context[\u0027query_string\u0027]"},{"line_number":209,"context_line":"        req \u003d self._make_request(url\u003d\u0027/?name\u003dnonexit%E8nt\u0027)"},{"line_number":210,"context_line":"        self.assertRaises(exception.ValidationError, req.get_response,"},{"line_number":211,"context_line":"                          FakeApp())"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_be89c8cc","line":209,"updated":"2015-08-17 21:13:05.000000000","message":"Can you add a comment here saying what it\u0027s invalid? Is it UTF-16 or something else?","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"ae5e836346196c7ee57063d65d7581641cee44ac","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        class FakeApp(wsgi.Application):"},{"line_number":207,"context_line":"            def index(self, context):"},{"line_number":208,"context_line":"                return context[\u0027query_string\u0027]"},{"line_number":209,"context_line":"        req \u003d self._make_request(url\u003d\u0027/?name\u003dnonexit%E8nt\u0027)"},{"line_number":210,"context_line":"        self.assertRaises(exception.ValidationError, req.get_response,"},{"line_number":211,"context_line":"                          FakeApp())"},{"line_number":212,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_59044614","line":209,"in_reply_to":"fa1b9901_be89c8cc","updated":"2015-08-17 21:24:17.000000000","message":"Sure. The Python error just says \"invalid value at pos ....\". I can track down what the value really is.","commit_id":"2d9b3cf2ec0a3b524dd7508f12f1a0390d5efb80"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"96353c923a0739b721bd2ffef42ff392ae0fcafa","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        class FakeApp(wsgi.Application):"},{"line_number":207,"context_line":"            def index(self, context):"},{"line_number":208,"context_line":"                return context[\u0027query_string\u0027]"},{"line_number":209,"context_line":"        # this is high bit set ASCII, copy \u0026 pasted from Windows."},{"line_number":210,"context_line":"        # \\xe8 is valid unicode and UTF16 but not UTF8."},{"line_number":211,"context_line":"        req \u003d self._make_request(url\u003d\u0027/?name\u003dnonexit%E8nt\u0027)"},{"line_number":212,"context_line":"        self.assertRaises(exception.ValidationError, req.get_response,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_6b036574","line":209,"updated":"2015-08-18 02:12:36.000000000","message":"I just checked and the character is likely encoded with windows-1252 and definitely not utf-16.\n\nI would change this entire comment to just be:\n\n# nonexitènt encoded as Windows-1252","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"627f75eef49d99d23f5c6f082806d2d2454e366d","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        class FakeApp(wsgi.Application):"},{"line_number":207,"context_line":"            def index(self, context):"},{"line_number":208,"context_line":"                return context[\u0027query_string\u0027]"},{"line_number":209,"context_line":"        # this is high bit set ASCII, copy \u0026 pasted from Windows."},{"line_number":210,"context_line":"        # \\xe8 is valid unicode and UTF16 but not UTF8."},{"line_number":211,"context_line":"        req \u003d self._make_request(url\u003d\u0027/?name\u003dnonexit%E8nt\u0027)"},{"line_number":212,"context_line":"        self.assertRaises(exception.ValidationError, req.get_response,"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_1dac4c9f","line":209,"in_reply_to":"fa1b9901_6b036574","updated":"2015-08-18 16:58:52.000000000","message":"This is Python 3.\n\n\u003e\u003e\u003e \"nonexit\\xe8nt\".encode(\"utf16\")\n\nb\u0027\\xff\\xfen\\x00o\\x00n\\x00e\\x00x\\x00i\\x00t\\x00\\xe8\\x00n\\x00t\\x00\u0027\n\n\u003e\u003e\u003e \u0027\\\\xff\\\\xfen\\\\x00o\\\\x00n\\\\x00e\\\\x00x\\\\x00i\\\\x00t\\\\x00\\\\xe8\\\\x00n\\\\x00t\n\\\\x00\u0027.replace(\u0027\\\\x00\u0027, \u0027\u0027)\n\n\u0027\\\\xff\\\\xfenonexit\\\\xe8nt\u0027\n\nI tried it before I wrote it :-) But yes in this case it was 1252 as the result of a Putty cut/paste. Apparently some versions of Putty do not properly UTF8 encode the clipboard.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"96353c923a0739b721bd2ffef42ff392ae0fcafa","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        class FakeApp(wsgi.Application):"},{"line_number":217,"context_line":"            def index(self, context):"},{"line_number":218,"context_line":"                return context[\u0027query_string\u0027]"},{"line_number":219,"context_line":"        # \\xc3\\xa8 is the UTF8 encoding of \\xe8"},{"line_number":220,"context_line":"        req \u003d self._make_request(url\u003d\u0027/?name\u003dnonexit%C3%A8nt\u0027)"},{"line_number":221,"context_line":"        resp \u003d req.get_response(FakeApp())"},{"line_number":222,"context_line":"        self.assertEqual(jsonutils.loads(resp.body),"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_cbf2b19a","line":219,"updated":"2015-08-18 02:12:36.000000000","message":"I would change this comment to be:\n\n# nonexitènt encoded as UTF-8","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"96353c923a0739b721bd2ffef42ff392ae0fcafa","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        # \\xc3\\xa8 is the UTF8 encoding of \\xe8"},{"line_number":220,"context_line":"        req \u003d self._make_request(url\u003d\u0027/?name\u003dnonexit%C3%A8nt\u0027)"},{"line_number":221,"context_line":"        resp \u003d req.get_response(FakeApp())"},{"line_number":222,"context_line":"        self.assertEqual(jsonutils.loads(resp.body),"},{"line_number":223,"context_line":"                         {\u0027name\u0027: u\u0027nonexit\\xe8nt\u0027})"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_ab309d57","line":222,"updated":"2015-08-18 02:12:36.000000000","message":"The order of the args is incorrect. It should be (expected, observed)","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"627f75eef49d99d23f5c6f082806d2d2454e366d","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        # \\xc3\\xa8 is the UTF8 encoding of \\xe8"},{"line_number":220,"context_line":"        req \u003d self._make_request(url\u003d\u0027/?name\u003dnonexit%C3%A8nt\u0027)"},{"line_number":221,"context_line":"        resp \u003d req.get_response(FakeApp())"},{"line_number":222,"context_line":"        self.assertEqual(jsonutils.loads(resp.body),"},{"line_number":223,"context_line":"                         {\u0027name\u0027: u\u0027nonexit\\xe8nt\u0027})"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa1b9901_fd915853","line":222,"in_reply_to":"fa1b9901_ab309d57","updated":"2015-08-18 16:58:52.000000000","message":"Thanks, I always get it backwards.","commit_id":"d823291775d4bb4e51e862e33c1171096d465d2f"}]}
