)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"78cd8483fb5d29d9726c8ce338a53cbb20e9ad5a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Return 400 in case request body is JSON, but not a dictionary"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In `JsonBodyMiddleware` we expect POST body to be a JSON dictionary,"},{"line_number":10,"context_line":"and failed with 500 error if body was a valid JSON, but not a dictionary."},{"line_number":11,"context_line":"Additional check was added along with a test for described case"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ae5cdf2_a54bd957","line":9,"updated":"2014-06-10 21:14:54.000000000","message":"Should be JSON object here too","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"78cd8483fb5d29d9726c8ce338a53cbb20e9ad5a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Return 400 in case request body is JSON, but not a dictionary"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In `JsonBodyMiddleware` we expect POST body to be a JSON dictionary,"},{"line_number":10,"context_line":"and failed with 500 error if body was a valid JSON, but not a dictionary."},{"line_number":11,"context_line":"Additional check was added along with a test for described case"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I08ae3c8fa4eb53b67604d8b8791ca19d9c1682e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1ae5cdf2_6568f1ba","line":10,"updated":"2014-06-10 21:14:54.000000000","message":"\"but not an object.\"","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4f847b8e11a7965ec27db1b14089e00f51aa7775","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Return 400 in case request body is JSON, but not a dictionary"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In `JsonBodyMiddleware` we expect POST body to be a JSON dictionary,"},{"line_number":10,"context_line":"and failed with 500 error if body was a valid JSON, but not a dictionary."},{"line_number":11,"context_line":"Additional check was added along with a test for described case"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I08ae3c8fa4eb53b67604d8b8791ca19d9c1682e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_29aec398","line":10,"updated":"2014-06-18 03:07:34.000000000","message":"Nit: Make sure every line in commit message (other than first) is wrapped at 72 chars. First line in theory should be wrapped at 50. See: https://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"635d46e01c9cd78499dc81336b913113b3b17df6"},{"author":{"_account_id":11381,"name":"Roman Bodnarchuk","email":"bodnarchuk.roman@gmail.com","username":"le-r-on"},"change_message_id":"a676afab6e6c5ef49866479395586a681d4d4083","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Return 400 in case request body is JSON, but not a dictionary"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In `JsonBodyMiddleware` we expect POST body to be a JSON dictionary,"},{"line_number":10,"context_line":"and failed with 500 error if body was a valid JSON, but not a dictionary."},{"line_number":11,"context_line":"Additional check was added along with a test for described case"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I08ae3c8fa4eb53b67604d8b8791ca19d9c1682e6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_4b9dba56","line":10,"in_reply_to":"1ae5cdf2_29aec398","updated":"2014-06-18 09:23:03.000000000","message":"Missed that page.  Thanks, comment message is fixed!","commit_id":"635d46e01c9cd78499dc81336b913113b3b17df6"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"4f847b8e11a7965ec27db1b14089e00f51aa7775","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In `JsonBodyMiddleware` we expect POST body to be a JSON dictionary,"},{"line_number":10,"context_line":"and failed with 500 error if body was a valid JSON, but not a dictionary."},{"line_number":11,"context_line":"Additional check was added along with a test for described case"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I08ae3c8fa4eb53b67604d8b8791ca19d9c1682e6"},{"line_number":14,"context_line":"Closes-Bug: #1316657"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_299c035d","line":11,"updated":"2014-06-18 03:07:34.000000000","message":"Nit: Missing \u0027.\u0027","commit_id":"635d46e01c9cd78499dc81336b913113b3b17df6"},{"author":{"_account_id":11381,"name":"Roman Bodnarchuk","email":"bodnarchuk.roman@gmail.com","username":"le-r-on"},"change_message_id":"a676afab6e6c5ef49866479395586a681d4d4083","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In `JsonBodyMiddleware` we expect POST body to be a JSON dictionary,"},{"line_number":10,"context_line":"and failed with 500 error if body was a valid JSON, but not a dictionary."},{"line_number":11,"context_line":"Additional check was added along with a test for described case"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I08ae3c8fa4eb53b67604d8b8791ca19d9c1682e6"},{"line_number":14,"context_line":"Closes-Bug: #1316657"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_6bac368d","line":11,"in_reply_to":"1ae5cdf2_299c035d","updated":"2014-06-18 09:23:03.000000000","message":"Done","commit_id":"635d46e01c9cd78499dc81336b913113b3b17df6"}],"keystone/middleware/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7934195e953269242685374b3c76004eecc205d2","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                params_parsed \u003d {}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        if not isinstance(params_parsed, dict):"},{"line_number":135,"context_line":"            e \u003d exception.ValidationError(attribute\u003d\u0027valid JSON dictionary\u0027,"},{"line_number":136,"context_line":"                                          target\u003d\u0027request body\u0027)"},{"line_number":137,"context_line":"            return wsgi.render_exception(e, request\u003drequest)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_041a3c6e","line":135,"updated":"2014-05-29 22:05:46.000000000","message":"change \"dictionary\" to \"object\". See http://www.json.org/","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"},{"author":{"_account_id":11381,"name":"Roman Bodnarchuk","email":"bodnarchuk.roman@gmail.com","username":"le-r-on"},"change_message_id":"090f34665d60dd640dac56aaeda356af2a57b453","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                params_parsed \u003d {}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        if not isinstance(params_parsed, dict):"},{"line_number":135,"context_line":"            e \u003d exception.ValidationError(attribute\u003d\u0027valid JSON dictionary\u0027,"},{"line_number":136,"context_line":"                                          target\u003d\u0027request body\u0027)"},{"line_number":137,"context_line":"            return wsgi.render_exception(e, request\u003drequest)"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_997581ce","line":135,"in_reply_to":"1ae5cdf2_041a3c6e","updated":"2014-06-17 16:52:33.000000000","message":"Done","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"}],"keystone/tests/test_middleware.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"99f38521051fb056bcc0e695b340b368be49e0b3","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                           content_type\u003d\u0027application/json\u0027,"},{"line_number":96,"context_line":"                           method\u003d\u0027POST\u0027)"},{"line_number":97,"context_line":"        resp \u003d middleware.JsonBodyMiddleware(None).process_request(req)"},{"line_number":98,"context_line":"        self.assertEqual(400, resp.status_int)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_no_content_type(self):"},{"line_number":101,"context_line":"        req \u003d make_request(body\u003d\u0027{\"arg1\": \"one\", \"arg2\": [\"a\"]}\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ae8d1ca_e3ab2f1c","line":98,"updated":"2014-05-29 04:51:54.000000000","message":"just a thought... \n  self.assertTrue(\"valid JSON dictionary\" in resp.json[\u0027error\u0027][\u0027message\u0027])\n\nSince quite a few functions in middleware have a chance at throwing up a 400.","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"},{"author":{"_account_id":11381,"name":"Roman Bodnarchuk","email":"bodnarchuk.roman@gmail.com","username":"le-r-on"},"change_message_id":"090f34665d60dd640dac56aaeda356af2a57b453","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                           content_type\u003d\u0027application/json\u0027,"},{"line_number":96,"context_line":"                           method\u003d\u0027POST\u0027)"},{"line_number":97,"context_line":"        resp \u003d middleware.JsonBodyMiddleware(None).process_request(req)"},{"line_number":98,"context_line":"        self.assertEqual(400, resp.status_int)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_no_content_type(self):"},{"line_number":101,"context_line":"        req \u003d make_request(body\u003d\u0027{\"arg1\": \"one\", \"arg2\": [\"a\"]}\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_7946f57c","line":98,"in_reply_to":"1ae5cdf2_e5824151","updated":"2014-06-17 16:52:33.000000000","message":"Done","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"78cd8483fb5d29d9726c8ce338a53cbb20e9ad5a","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                           content_type\u003d\u0027application/json\u0027,"},{"line_number":96,"context_line":"                           method\u003d\u0027POST\u0027)"},{"line_number":97,"context_line":"        resp \u003d middleware.JsonBodyMiddleware(None).process_request(req)"},{"line_number":98,"context_line":"        self.assertEqual(400, resp.status_int)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_no_content_type(self):"},{"line_number":101,"context_line":"        req \u003d make_request(body\u003d\u0027{\"arg1\": \"one\", \"arg2\": [\"a\"]}\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_e5824151","line":98,"in_reply_to":"3ae8d1ca_e3ab2f1c","updated":"2014-06-10 21:14:54.000000000","message":"++ I think this is needed to really validate the correct exception is raised.","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"},{"author":{"_account_id":11381,"name":"Roman Bodnarchuk","email":"bodnarchuk.roman@gmail.com","username":"le-r-on"},"change_message_id":"090f34665d60dd640dac56aaeda356af2a57b453","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                           content_type\u003d\u0027application/json\u0027,"},{"line_number":96,"context_line":"                           method\u003d\u0027POST\u0027)"},{"line_number":97,"context_line":"        resp \u003d middleware.JsonBodyMiddleware(None).process_request(req)"},{"line_number":98,"context_line":"        self.assertEqual(400, resp.status_int)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_no_content_type(self):"},{"line_number":101,"context_line":"        req \u003d make_request(body\u003d\u0027{\"arg1\": \"one\", \"arg2\": [\"a\"]}\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_5943f96b","line":98,"in_reply_to":"3ae8d1ca_e3ab2f1c","updated":"2014-06-17 16:52:33.000000000","message":"Good point, thanks!","commit_id":"e1cade998ce788db9216001f5b117d0ed1031573"}]}
