)]}'
{"keystone/oauth1/controllers.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"e13573091388169e85dba5f276455629a1e15635","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            msg \u003d _(\u0027provided verifier does not match stored verifier\u0027)"},{"line_number":320,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if req_token[\u0027id\u0027] !\u003d request_token_id:"},{"line_number":323,"context_line":"            msg \u003d _(\u0027provided request key does not match stored request key\u0027)"},{"line_number":324,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        if not req_token.get(\u0027authorizing_user_id\u0027):"},{"line_number":327,"context_line":"            msg \u003d _(\u0027Request Token does not have an authorizing user id\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_a9e29ed2","side":"PARENT","line":324,"range":{"start_line":322,"start_character":0,"end_line":324,"end_character":53},"updated":"2016-08-24 11:13:07.000000000","message":"these code is removed since it will never be false according to the code in L288","commit_id":"a4451658153f3abccfac81ac1f052eef5e46c70b"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"263d9d082da9eaec54dc5353f00c2378ab12e377","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            except exception.NotFound:"},{"line_number":317,"context_line":"                msg \u003d _(\u0027provided consumer does not exist\u0027)"},{"line_number":318,"context_line":"            if req_token[\u0027consumer_id\u0027] !\u003d consumer_id:"},{"line_number":319,"context_line":"                msg \u003d _(\u0027provided consumer key does not match stored \u0027"},{"line_number":320,"context_line":"                        \u0027consumer key\u0027)"},{"line_number":321,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":322,"context_line":"        # The response body is empty since either one of the following reasons"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_ca29b18b","line":319,"updated":"2016-08-24 17:09:47.000000000","message":"Should this be treated more like password errors? We don\u0027t have that the password is invalid, just that the username/password combination doesn\u0027t work. That way there is no way to know which information is correct and which is not.","commit_id":"fd226cf77523844a55043159f5a9197db3bf1fe3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"575973b40317401bab1b8c411f87be1b69fb628f","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            except exception.NotFound:"},{"line_number":317,"context_line":"                msg \u003d _(\u0027provided consumer does not exist\u0027)"},{"line_number":318,"context_line":"            if req_token[\u0027consumer_id\u0027] !\u003d consumer_id:"},{"line_number":319,"context_line":"                msg \u003d _(\u0027provided consumer key does not match stored \u0027"},{"line_number":320,"context_line":"                        \u0027consumer key\u0027)"},{"line_number":321,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":322,"context_line":"        # The response body is empty since either one of the following reasons"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_62936afb","line":319,"in_reply_to":"1ac06dbe_ca29b18b","updated":"2016-08-25 02:58:12.000000000","message":"Done","commit_id":"fd226cf77523844a55043159f5a9197db3bf1fe3"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"263d9d082da9eaec54dc5353f00c2378ab12e377","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        # The response body is empty since either one of the following reasons"},{"line_number":323,"context_line":"        if not b:"},{"line_number":324,"context_line":"            if req_token[\u0027verifier\u0027] !\u003d oauth_verifier:"},{"line_number":325,"context_line":"                msg \u003d _(\u0027provided verifier does not match stored verifier\u0027)"},{"line_number":326,"context_line":"            else:"},{"line_number":327,"context_line":"                msg \u003d _(\u0027Invalid signature\u0027)"},{"line_number":328,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_2a1fa55c","line":325,"updated":"2016-08-24 17:09:47.000000000","message":"Same thing here?","commit_id":"fd226cf77523844a55043159f5a9197db3bf1fe3"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"632864c3802e15c5777860bae05ae85d40c2e351","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            try:"},{"line_number":317,"context_line":"                self.oauth_api.get_consumer(consumer_id)"},{"line_number":318,"context_line":"            except exception.NotFound:"},{"line_number":319,"context_line":"                msg \u003d _(\u0027provided consumer does not exist\u0027)"},{"line_number":320,"context_line":"            if req_token[\u0027consumer_id\u0027] !\u003d consumer_id:"},{"line_number":321,"context_line":"                msg \u003d _(\u0027provided consumer key %(provided)s does not match \u0027"},{"line_number":322,"context_line":"                        \u0027stored consumer key %(stored)s\u0027) % {"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_ed9d74bc","line":319,"updated":"2016-08-25 10:52:19.000000000","message":"I think the error messages should start with uppercase letters to match the other error messages we have.","commit_id":"ba9a647a3ba2048f7d88495cf693961e0d699f4a"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00001342ff0c769b4010ff92701cd23716c57d0d","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            try:"},{"line_number":317,"context_line":"                self.oauth_api.get_consumer(consumer_id)"},{"line_number":318,"context_line":"            except exception.NotFound:"},{"line_number":319,"context_line":"                msg \u003d _(\u0027provided consumer does not exist\u0027)"},{"line_number":320,"context_line":"            if req_token[\u0027consumer_id\u0027] !\u003d consumer_id:"},{"line_number":321,"context_line":"                msg \u003d _(\u0027provided consumer key %(provided)s does not match \u0027"},{"line_number":322,"context_line":"                        \u0027stored consumer key %(stored)s\u0027) % {"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_30e8ca7c","line":319,"in_reply_to":"1ac06dbe_ed9d74bc","updated":"2016-08-26 08:14:47.000000000","message":"Done","commit_id":"ba9a647a3ba2048f7d88495cf693961e0d699f4a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"632864c3802e15c5777860bae05ae85d40c2e351","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                        \u0027error\u0027: params[\u0027error\u0027],"},{"line_number":349,"context_line":"                        \u0027desc\u0027: params[\u0027error_description\u0027]}"},{"line_number":350,"context_line":"            else:"},{"line_number":351,"context_line":"                msg \u003d _(\u0027There should not be any non-oauth parameters\u0027)"},{"line_number":352,"context_line":"            LOG.warning(msg)"},{"line_number":353,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":354,"context_line":"        if not req_token.get(\u0027authorizing_user_id\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_a3ca6d4d","line":351,"updated":"2016-08-25 10:52:19.000000000","message":"This block isn\u0027t tested. Is it possible to get in here?","commit_id":"ba9a647a3ba2048f7d88495cf693961e0d699f4a"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00001342ff0c769b4010ff92701cd23716c57d0d","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                        \u0027error\u0027: params[\u0027error\u0027],"},{"line_number":349,"context_line":"                        \u0027desc\u0027: params[\u0027error_description\u0027]}"},{"line_number":350,"context_line":"            else:"},{"line_number":351,"context_line":"                msg \u003d _(\u0027There should not be any non-oauth parameters\u0027)"},{"line_number":352,"context_line":"            LOG.warning(msg)"},{"line_number":353,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":354,"context_line":"        if not req_token.get(\u0027authorizing_user_id\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_977c2522","line":351,"in_reply_to":"1ac06dbe_a3ca6d4d","updated":"2016-08-26 08:14:47.000000000","message":"Have updated testcase \u0027test_bad_verifier\u0027 to check the returned error message.\n\nFor the non-oauth parameters, I am not quite sure about it, my gut feeling is we cannot get here according to the code from oauthlib I have gone through (very limited), but it\u0027s the original logic and it\u0027s kept here so that I won\u0027t miss something I haven\u0027t aware of.","commit_id":"ba9a647a3ba2048f7d88495cf693961e0d699f4a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"632864c3802e15c5777860bae05ae85d40c2e351","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            LOG.warning(msg)"},{"line_number":353,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":354,"context_line":"        if not req_token.get(\u0027authorizing_user_id\u0027):"},{"line_number":355,"context_line":"            msg \u003d _(\u0027Request Token does not have an authorizing user id\u0027)"},{"line_number":356,"context_line":"            LOG.warning(msg)"},{"line_number":357,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_038b811f","line":355,"updated":"2016-08-25 10:52:19.000000000","message":"It doesn\u0027t look like this block is tested. Is it possible to get in here?","commit_id":"ba9a647a3ba2048f7d88495cf693961e0d699f4a"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00001342ff0c769b4010ff92701cd23716c57d0d","unresolved":false,"context_lines":[{"line_number":352,"context_line":"            LOG.warning(msg)"},{"line_number":353,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":354,"context_line":"        if not req_token.get(\u0027authorizing_user_id\u0027):"},{"line_number":355,"context_line":"            msg \u003d _(\u0027Request Token does not have an authorizing user id\u0027)"},{"line_number":356,"context_line":"            LOG.warning(msg)"},{"line_number":357,"context_line":"            raise exception.Unauthorized(message\u003dmsg)"},{"line_number":358,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa7ab95a_d7778d00","line":355,"in_reply_to":"1ac06dbe_038b811f","updated":"2016-08-26 08:14:47.000000000","message":"Testcase is added! But I don\u0027t think we can get here if this is done with right workflow. But the code is kept here for the exceptional case.","commit_id":"ba9a647a3ba2048f7d88495cf693961e0d699f4a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9db5fbeebf347fc1209de425e9cd8b67a21b9abb","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                raise exception.Unauthorized(message\u003dmsg)"},{"line_number":322,"context_line":"            if req_token[\u0027consumer_id\u0027] !\u003d consumer_id:"},{"line_number":323,"context_line":"                msg \u003d _(\u0027Provided consumer key %(provided)s does not match \u0027"},{"line_number":324,"context_line":"                        \u0027stored consumer key %(stored)s.\u0027) % {"},{"line_number":325,"context_line":"                            \u0027provided\u0027: consumer_id,"},{"line_number":326,"context_line":"                            \u0027stored\u0027: req_token[\u0027consumer_id\u0027]}"},{"line_number":327,"context_line":"                LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_eb41b23a","line":324,"range":{"start_line":324,"start_character":45,"end_line":324,"end_character":55},"updated":"2016-09-21 04:57:53.000000000","message":"i think we do not want to show the stored consumer key, this should be considered private information, like a user id","commit_id":"fd7ee224f7f853104ca04764ccb20148971d77e4"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"df49fd2a613bb65a49edee447808e1c415149947","unresolved":false,"context_lines":[{"line_number":321,"context_line":"                raise exception.Unauthorized(message\u003dmsg)"},{"line_number":322,"context_line":"            if req_token[\u0027consumer_id\u0027] !\u003d consumer_id:"},{"line_number":323,"context_line":"                msg \u003d _(\u0027Provided consumer key %(provided)s does not match \u0027"},{"line_number":324,"context_line":"                        \u0027stored consumer key %(stored)s.\u0027) % {"},{"line_number":325,"context_line":"                            \u0027provided\u0027: consumer_id,"},{"line_number":326,"context_line":"                            \u0027stored\u0027: req_token[\u0027consumer_id\u0027]}"},{"line_number":327,"context_line":"                LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_061c1312","line":324,"range":{"start_line":324,"start_character":45,"end_line":324,"end_character":55},"in_reply_to":"7a8ec9b2_eb41b23a","updated":"2016-09-21 05:51:54.000000000","message":"yep, good catch, actually, I am thinking this should be encrypted as what we did for keystone credential.","commit_id":"fd7ee224f7f853104ca04764ccb20148971d77e4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9db5fbeebf347fc1209de425e9cd8b67a21b9abb","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        if not b:"},{"line_number":331,"context_line":"            if req_token[\u0027verifier\u0027] !\u003d oauth_verifier:"},{"line_number":332,"context_line":"                msg \u003d _(\u0027Provided verifier %(provided)s does not match \u0027"},{"line_number":333,"context_line":"                        \u0027stored verifier %(stored)s.\u0027) % {"},{"line_number":334,"context_line":"                            \u0027provided\u0027: oauth_verifier,"},{"line_number":335,"context_line":"                            \u0027stored\u0027: req_token[\u0027verifier\u0027]}"},{"line_number":336,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_ab6ecac6","line":333,"range":{"start_line":333,"start_character":41,"end_line":333,"end_character":51},"updated":"2016-09-21 04:57:53.000000000","message":"this one you definitely don\u0027t want to show and should be considered private","commit_id":"fd7ee224f7f853104ca04764ccb20148971d77e4"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"df49fd2a613bb65a49edee447808e1c415149947","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        if not b:"},{"line_number":331,"context_line":"            if req_token[\u0027verifier\u0027] !\u003d oauth_verifier:"},{"line_number":332,"context_line":"                msg \u003d _(\u0027Provided verifier %(provided)s does not match \u0027"},{"line_number":333,"context_line":"                        \u0027stored verifier %(stored)s.\u0027) % {"},{"line_number":334,"context_line":"                            \u0027provided\u0027: oauth_verifier,"},{"line_number":335,"context_line":"                            \u0027stored\u0027: req_token[\u0027verifier\u0027]}"},{"line_number":336,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_a6dd1f44","line":333,"range":{"start_line":333,"start_character":41,"end_line":333,"end_character":51},"in_reply_to":"7a8ec9b2_ab6ecac6","updated":"2016-09-21 05:51:54.000000000","message":"will fix it!","commit_id":"fd7ee224f7f853104ca04764ccb20148971d77e4"}],"keystone/tests/unit/test_v3_oauth1.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"263d9d082da9eaec54dc5353f00c2378ab12e377","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":"import random as _random"},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_0a2469ad","line":16,"updated":"2016-08-24 17:09:47.000000000","message":"Is this to get around bandit?","commit_id":"fd226cf77523844a55043159f5a9197db3bf1fe3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"575973b40317401bab1b8c411f87be1b69fb628f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":"import random as _random"},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_e8229900","line":16,"in_reply_to":"1ac06dbe_0a2469ad","updated":"2016-08-25 02:58:12.000000000","message":"we need this to generate a well formatted `verifier` but not a the `verifier` stored in the backend. This will be used to differentiate with the existed testcase `test_bad_verifier`.\n\npls see: https://github.com/openstack/keystone/blob/master/keystone/oauth1/backends/sql.py#L191-L192","commit_id":"fd226cf77523844a55043159f5a9197db3bf1fe3"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"564e449e87c39bc353c8953ee789f24a333c88da","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":"import random as _random"},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ac06dbe_eac9da26","line":16,"in_reply_to":"1ac06dbe_e8229900","updated":"2016-08-25 10:09:42.000000000","message":"...but why is it named _random?","commit_id":"fd226cf77523844a55043159f5a9197db3bf1fe3"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"7c142a375314fbbe9963763a0fda68c10a23e9bd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import copy"},{"line_number":16,"context_line":"import random as _random"},{"line_number":17,"context_line":"import uuid"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import mock"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_b7da0977","line":16,"in_reply_to":"1ac06dbe_eac9da26","updated":"2016-08-26 08:03:04.000000000","message":"TBH, I copied this line, I don\u0027t why it is was _random :)\n\nHave updated this to \u0027random\u0027, and looks like bandit is happy about this.","commit_id":"fd226cf77523844a55043159f5a9197db3bf1fe3"}],"releasenotes/notes/bug-1616424-c46ba773f7ac40ae.yaml":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"af47d0943907e203a7d357bc35c1c1a623ebfb16","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    [`bug 1616424 \u003chttps://bugs.launchpad.net/keystone/+bug/1616424\u003e`_]"},{"line_number":5,"context_line":"    Python build-in exception was raised if create request token or access token"},{"line_number":6,"context_line":"    request from client with invalid request parameters, invalid signature for example."},{"line_number":7,"context_line":"    The implementation is hardened by showing properly exception and show the failure"},{"line_number":8,"context_line":"    reasons if there are."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7a8ec9b2_513886ee","line":7,"range":{"start_line":7,"start_character":69,"end_line":7,"end_character":73},"updated":"2016-09-21 10:34:25.000000000","message":"nit: showing/displaying","commit_id":"9d6a04b1a7857c1a3640df247faf11f1f012a66b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"af47d0943907e203a7d357bc35c1c1a623ebfb16","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    Python build-in exception was raised if create request token or access token"},{"line_number":6,"context_line":"    request from client with invalid request parameters, invalid signature for example."},{"line_number":7,"context_line":"    The implementation is hardened by showing properly exception and show the failure"},{"line_number":8,"context_line":"    reasons if there are."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"7a8ec9b2_d12c96ae","line":8,"range":{"start_line":8,"start_character":15,"end_line":8,"end_character":24},"updated":"2016-09-21 10:34:25.000000000","message":"nit: existent","commit_id":"9d6a04b1a7857c1a3640df247faf11f1f012a66b"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"bc67327ddd80d806dd24f0a89514210657fbdce7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 1616424 \u003chttps://bugs.launchpad.net/keystone/+bug/1616424\u003e`_]"},{"line_number":5,"context_line":"    Python build-in exception was raised if create request token or access token"},{"line_number":6,"context_line":"    request from client with invalid request parameters, invalid signature for example."},{"line_number":7,"context_line":"    The implementation is hardened by showing proper exception and displaying the"},{"line_number":8,"context_line":"    failure reasons if existent."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7a8ec9b2_a8e4dedf","line":5,"updated":"2016-09-21 16:40:23.000000000","message":"(nit) built-in","commit_id":"be5385c5389aa9c4879647c9b9e4327cc73189a2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"bc67327ddd80d806dd24f0a89514210657fbdce7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    [`bug 1616424 \u003chttps://bugs.launchpad.net/keystone/+bug/1616424\u003e`_]"},{"line_number":5,"context_line":"    Python build-in exception was raised if create request token or access token"},{"line_number":6,"context_line":"    request from client with invalid request parameters, invalid signature for example."},{"line_number":7,"context_line":"    The implementation is hardened by showing proper exception and displaying the"},{"line_number":8,"context_line":"    failure reasons if existent."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7a8ec9b2_68057678","line":7,"updated":"2016-09-21 16:40:23.000000000","message":"(nit) s/showing/raising/","commit_id":"be5385c5389aa9c4879647c9b9e4327cc73189a2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"bc67327ddd80d806dd24f0a89514210657fbdce7","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    Python build-in exception was raised if create request token or access token"},{"line_number":6,"context_line":"    request from client with invalid request parameters, invalid signature for example."},{"line_number":7,"context_line":"    The implementation is hardened by showing proper exception and displaying the"},{"line_number":8,"context_line":"    failure reasons if existent."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"7a8ec9b2_8831e25c","line":8,"updated":"2016-09-21 16:40:23.000000000","message":"(nit) s/and.*/and error messaging where possible./","commit_id":"be5385c5389aa9c4879647c9b9e4327cc73189a2"}]}
