)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f542e22c_618755c9","updated":"2022-03-02 12:09:58.000000000","message":"Thank you for the patch.\n\nPlease kindly find my comments.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ef0a51ce_459a317c","in_reply_to":"f542e22c_618755c9","updated":"2022-03-03 05:15:59.000000000","message":"Has fixed all comments.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"72b9b0da_58329b92","updated":"2022-03-03 05:15:59.000000000","message":"Has fixed all commend in the Patchset 5. Please review again.","commit_id":"65fe2e24ea4198d0ae6be70df95a5b8e4599e1ac"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"8a23139c_420c9727","updated":"2022-03-08 07:26:21.000000000","message":"Thank you for re-work.\n\nI confirmed all of my previous comments were solved.\nPlease kindly find some additional comments.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"22bfbe8f_415e0298","updated":"2022-03-09 06:51:24.000000000","message":"All comments has been fixed, please review again.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"81beaf4e26501a823b3a65ccd24e42ec00e63898","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"5099f710_93c3a356","updated":"2022-04-29 12:59:16.000000000","message":"Code looks pretty good.  A few questions:\n\nTHe use of the basic Auth type seems to imply that users won\u0027t be able to initialize the workflow using Federated credentials.  Is this the case, or just an aspect of the OAUTH2.0 spec?  If so, why is the Keystone Auth type returned on a 401?\n\nIs it possible to move all of the exception code into keystone.exceptions?  It will keep all of the internationalizable strings in a single file, easier for translator review.  Not a huge problem if not.\n\n","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":7414,"name":"David Wilde","email":"dwilde@redhat.com","username":"d34dh0r53"},"change_message_id":"d8428ff478451d13af898e915066eb51ef3c9e4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1efefcd3_c9793ea5","updated":"2022-05-27 15:07:59.000000000","message":"Is this now a WIP since the spec is going to be changing?","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1790626b_59935103","updated":"2022-03-09 10:50:16.000000000","message":"Thank you for re-work.\n\nI confirmed all issues have been resolved.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"defce0f4dbdd615cdd2145f8b7071d4076fcbcf7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"a5afa13c_aa120ae8","updated":"2022-03-09 10:52:15.000000000","message":"please check the CI failure","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"5bb11b0414b1d5d355ac544c4e4786c99de6db6f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"b29e5d96_6837aeaa","updated":"2022-03-10 01:13:05.000000000","message":"recheck","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"a8559d078005f34ea31f18a324b38155b1d62883","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"e614cc57_fca6d2c6","in_reply_to":"1efefcd3_c9793ea5","updated":"2022-06-14 00:43:41.000000000","message":"Sorry for my late reply.\nIt\u0027s not WIP as the spec going to be changing is not related to this patch.\nThe spec corresponding to this patch is https://review.opendev.org/c/openstack/keystone-specs/+/813152 that was originally proposed to Yoga release.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"99543d9710bf055251f2614ad77a6150caa14438","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"67548c8a_42fc7b35","updated":"2022-08-09 14:52:58.000000000","message":"LGTM!","commit_id":"b554576f62752ed8e89d8eb19136c318a4c89712"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"3599ba843c14b74a92a9412e9c9a6b27a3633e9e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"6f1d54dc_508f9581","updated":"2022-06-21 14:39:57.000000000","message":"Thanks! Looks good to me. Will test locally before upgrading to +2. ","commit_id":"b554576f62752ed8e89d8eb19136c318a4c89712"}],"keystone/api/os_oauth2.py":[{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                     \u0027client_secret is not found in authorization.\u0027)"},{"line_number":113,"context_line":"            raise error"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        grant_type \u003d flask.request.form.get(\u0027grant_type\u0027, None)"},{"line_number":116,"context_line":"        if not grant_type:"},{"line_number":117,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":118,"context_line":"                400, AccessTokenResource._HTTP_BAD_REQUEST,"}],"source_content_type":"text/x-python","patch_set":5,"id":"55c3e6bc_e2f5fa00","line":115,"updated":"2022-03-02 12:09:58.000000000","message":"Maybe you can omit ``None`` from the second arg.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                     \u0027client_secret is not found in authorization.\u0027)"},{"line_number":113,"context_line":"            raise error"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        grant_type \u003d flask.request.form.get(\u0027grant_type\u0027, None)"},{"line_number":116,"context_line":"        if not grant_type:"},{"line_number":117,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":118,"context_line":"                400, AccessTokenResource._HTTP_BAD_REQUEST,"}],"source_content_type":"text/x-python","patch_set":5,"id":"b9c748b3_ff325527","line":115,"in_reply_to":"0ddb8b54_9d8a5231","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                     \u0027client_secret is not found in authorization.\u0027)"},{"line_number":113,"context_line":"            raise error"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        grant_type \u003d flask.request.form.get(\u0027grant_type\u0027, None)"},{"line_number":116,"context_line":"        if not grant_type:"},{"line_number":117,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":118,"context_line":"                400, AccessTokenResource._HTTP_BAD_REQUEST,"}],"source_content_type":"text/x-python","patch_set":5,"id":"0ddb8b54_9d8a5231","line":115,"in_reply_to":"55c3e6bc_e2f5fa00","updated":"2022-03-03 05:15:59.000000000","message":"Has removed \u0027None from the second arg.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    _ERR_INVALID_REQUEST \u003d \u0027invalid_request\u0027"},{"line_number":39,"context_line":"    _ERR_OTHER_ERROR \u003d \u0027other_error\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _method_not_allowed(self):"},{"line_number":42,"context_line":"        \"\"\"Raise a method not allowed error\"\"\""},{"line_number":43,"context_line":"        raise exception.OAuth2Error("},{"line_number":44,"context_line":"            405,"},{"line_number":45,"context_line":"            AccessTokenResource._HTTP_METHOD_NOT_ALLOWED,"},{"line_number":46,"context_line":"            AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":47,"context_line":"            _(\u0027The method is not allowed for the requested URL.\u0027))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @ks_flask.unenforced_api"},{"line_number":50,"context_line":"    def get(self):"},{"line_number":51,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":52,"context_line":"        self._method_not_allowed()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @ks_flask.unenforced_api"},{"line_number":55,"context_line":"    def head(self):"},{"line_number":56,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":57,"context_line":"        self._method_not_allowed()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @ks_flask.unenforced_api"},{"line_number":60,"context_line":"    def put(self):"},{"line_number":61,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":62,"context_line":"        self._method_not_allowed()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @ks_flask.unenforced_api"},{"line_number":65,"context_line":"    def patch(self):"},{"line_number":66,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":67,"context_line":"        self._method_not_allowed()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @ks_flask.unenforced_api"},{"line_number":70,"context_line":"    def post(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"a58368b0_6ace3455","line":67,"range":{"start_line":41,"start_character":0,"end_line":67,"end_character":34},"updated":"2022-03-08 07:26:21.000000000","message":"nits.\n\nI wonder wether we should define these methods explicitly or not.\nWhen I removed these methods from AccessTokenResource and run UTs, ks_flask.ResourceBase returned 405.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    _ERR_INVALID_REQUEST \u003d \u0027invalid_request\u0027"},{"line_number":39,"context_line":"    _ERR_OTHER_ERROR \u003d \u0027other_error\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _method_not_allowed(self):"},{"line_number":42,"context_line":"        \"\"\"Raise a method not allowed error\"\"\""},{"line_number":43,"context_line":"        raise exception.OAuth2Error("},{"line_number":44,"context_line":"            405,"},{"line_number":45,"context_line":"            AccessTokenResource._HTTP_METHOD_NOT_ALLOWED,"},{"line_number":46,"context_line":"            AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":47,"context_line":"            _(\u0027The method is not allowed for the requested URL.\u0027))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @ks_flask.unenforced_api"},{"line_number":50,"context_line":"    def get(self):"},{"line_number":51,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":52,"context_line":"        self._method_not_allowed()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @ks_flask.unenforced_api"},{"line_number":55,"context_line":"    def head(self):"},{"line_number":56,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":57,"context_line":"        self._method_not_allowed()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @ks_flask.unenforced_api"},{"line_number":60,"context_line":"    def put(self):"},{"line_number":61,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":62,"context_line":"        self._method_not_allowed()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @ks_flask.unenforced_api"},{"line_number":65,"context_line":"    def patch(self):"},{"line_number":66,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":67,"context_line":"        self._method_not_allowed()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @ks_flask.unenforced_api"},{"line_number":70,"context_line":"    def post(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"b4840c90_73b940df","line":67,"range":{"start_line":41,"start_character":0,"end_line":67,"end_character":34},"in_reply_to":"36e100a0_7b53730e","updated":"2022-03-09 10:50:16.000000000","message":"I understand. thanks.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":38,"context_line":"    _ERR_INVALID_REQUEST \u003d \u0027invalid_request\u0027"},{"line_number":39,"context_line":"    _ERR_OTHER_ERROR \u003d \u0027other_error\u0027"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    def _method_not_allowed(self):"},{"line_number":42,"context_line":"        \"\"\"Raise a method not allowed error\"\"\""},{"line_number":43,"context_line":"        raise exception.OAuth2Error("},{"line_number":44,"context_line":"            405,"},{"line_number":45,"context_line":"            AccessTokenResource._HTTP_METHOD_NOT_ALLOWED,"},{"line_number":46,"context_line":"            AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":47,"context_line":"            _(\u0027The method is not allowed for the requested URL.\u0027))"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    @ks_flask.unenforced_api"},{"line_number":50,"context_line":"    def get(self):"},{"line_number":51,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":52,"context_line":"        self._method_not_allowed()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @ks_flask.unenforced_api"},{"line_number":55,"context_line":"    def head(self):"},{"line_number":56,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":57,"context_line":"        self._method_not_allowed()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    @ks_flask.unenforced_api"},{"line_number":60,"context_line":"    def put(self):"},{"line_number":61,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":62,"context_line":"        self._method_not_allowed()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    @ks_flask.unenforced_api"},{"line_number":65,"context_line":"    def patch(self):"},{"line_number":66,"context_line":"        \"\"\"The method is not allowed\"\"\""},{"line_number":67,"context_line":"        self._method_not_allowed()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @ks_flask.unenforced_api"},{"line_number":70,"context_line":"    def post(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"36e100a0_7b53730e","line":67,"range":{"start_line":41,"start_character":0,"end_line":67,"end_character":34},"in_reply_to":"a58368b0_6ace3455","updated":"2022-03-09 06:51:24.000000000","message":"Because the error response format returned by the Get OAuth2.0 Access Token API is not the same as the error response format returned by keystone\u0027s other APIs, the methods is appended.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":122,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":123,"context_line":"            raise error"},{"line_number":124,"context_line":"        if grant_type !\u003d \u0027client_credentials\u0027:"},{"line_number":125,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":126,"context_line":"                400, AccessTokenResource._HTTP_BAD_REQUEST,"},{"line_number":127,"context_line":"                AccessTokenResource._ERR_INVALID_REQUEST,"},{"line_number":128,"context_line":"                _(\u0027The parameter grant_type %s is not supported.\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"6c33d376_9f39f034","line":125,"updated":"2022-03-08 07:26:21.000000000","message":"The kind of error may have to be changed. Please see the comment at keystone/tests/unit/test_v3_oauth2.py l.270.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":123,"context_line":"            raise error"},{"line_number":124,"context_line":"        if grant_type !\u003d \u0027client_credentials\u0027:"},{"line_number":125,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":126,"context_line":"                400, AccessTokenResource._HTTP_BAD_REQUEST,"},{"line_number":127,"context_line":"                AccessTokenResource._ERR_INVALID_REQUEST,"},{"line_number":128,"context_line":"                _(\u0027The parameter grant_type %s is not supported.\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"aefe56f1_3d5c7831","line":125,"in_reply_to":"5588c531_b86f9aa8","updated":"2022-03-09 10:50:16.000000000","message":"Ack","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":122,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":123,"context_line":"            raise error"},{"line_number":124,"context_line":"        if grant_type !\u003d \u0027client_credentials\u0027:"},{"line_number":125,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":126,"context_line":"                400, AccessTokenResource._HTTP_BAD_REQUEST,"},{"line_number":127,"context_line":"                AccessTokenResource._ERR_INVALID_REQUEST,"},{"line_number":128,"context_line":"                _(\u0027The parameter grant_type %s is not supported.\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"5588c531_b86f9aa8","line":125,"in_reply_to":"6c33d376_9f39f034","updated":"2022-03-09 06:51:24.000000000","message":"Has fixed.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"81beaf4e26501a823b3a65ccd24e42ec00e63898","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class AccessTokenResource(ks_flask.ResourceBase):"},{"line_number":32,"context_line":"    _HTTP_UNAUTHORIZED \u003d \u0027Unauthorized\u0027"},{"line_number":33,"context_line":"    _HTTP_BAD_REQUEST \u003d \u0027Bad Request\u0027"},{"line_number":34,"context_line":"    _HTTP_INTERNAL_SERVER_ERROR \u003d \u0027Internal Server Error\u0027"},{"line_number":35,"context_line":"    _HTTP_METHOD_NOT_ALLOWED \u003d \u0027Method Not Allowed\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"f7935927_1b193246","line":32,"updated":"2022-04-29 12:59:16.000000000","message":"These should use keystone.expection subclasses and not be explicit strings here.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33920,"name":"Yusuke Niimi","email":"niimi.yusuke@fujitsu.com","username":"yniimi"},"change_message_id":"e2b3e1d9a103bc7e7e6d88022f0fa12ffa25525a","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class AccessTokenResource(ks_flask.ResourceBase):"},{"line_number":32,"context_line":"    _HTTP_UNAUTHORIZED \u003d \u0027Unauthorized\u0027"},{"line_number":33,"context_line":"    _HTTP_BAD_REQUEST \u003d \u0027Bad Request\u0027"},{"line_number":34,"context_line":"    _HTTP_INTERNAL_SERVER_ERROR \u003d \u0027Internal Server Error\u0027"},{"line_number":35,"context_line":"    _HTTP_METHOD_NOT_ALLOWED \u003d \u0027Method Not Allowed\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"4b2ad838_ae7fc370","line":32,"in_reply_to":"f7935927_1b193246","updated":"2022-05-31 08:25:45.000000000","message":"Moved string definitions to subclasses of exception.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"81beaf4e26501a823b3a65ccd24e42ec00e63898","unresolved":true,"context_lines":[{"line_number":89,"context_line":"            LOG.info(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":90,"context_line":"                     \u0027field \\\u0027authorization\\\u0027 is not found in HTTP Headers.\u0027)"},{"line_number":91,"context_line":"            raise error"},{"line_number":92,"context_line":"        if client_auth.type !\u003d \u0027basic\u0027:"},{"line_number":93,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":94,"context_line":"                401, AccessTokenResource._HTTP_UNAUTHORIZED,"},{"line_number":95,"context_line":"                AccessTokenResource._ERR_INVALID_CLIENT,"}],"source_content_type":"text/x-python","patch_set":9,"id":"2d2b5528_5a9177a9","line":92,"updated":"2022-04-29 12:59:16.000000000","message":"Does this mean that none of the Federated APIs will work for authentication when working with OAUTH2.0?","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33920,"name":"Yusuke Niimi","email":"niimi.yusuke@fujitsu.com","username":"yniimi"},"change_message_id":"9ace88d82f39a8e6ddc0ccbd45f553819898d46e","unresolved":true,"context_lines":[{"line_number":89,"context_line":"            LOG.info(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":90,"context_line":"                     \u0027field \\\u0027authorization\\\u0027 is not found in HTTP Headers.\u0027)"},{"line_number":91,"context_line":"            raise error"},{"line_number":92,"context_line":"        if client_auth.type !\u003d \u0027basic\u0027:"},{"line_number":93,"context_line":"            error \u003d exception.OAuth2Error("},{"line_number":94,"context_line":"                401, AccessTokenResource._HTTP_UNAUTHORIZED,"},{"line_number":95,"context_line":"                AccessTokenResource._ERR_INVALID_CLIENT,"}],"source_content_type":"text/x-python","patch_set":9,"id":"11fb83f4_b31dd55d","line":92,"in_reply_to":"2d2b5528_5a9177a9","updated":"2022-05-18 01:14:27.000000000","message":"The OAuth 2.0 API is intended to support basic authentication only.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"f6ffa0e9e771f39a2f788646c891226077399341","unresolved":true,"context_lines":[{"line_number":162,"context_line":"                error \u003d exception.OAuth2Error("},{"line_number":163,"context_line":"                    error.code, error.title,"},{"line_number":164,"context_line":"                    AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":165,"context_line":"                    str(error))"},{"line_number":166,"context_line":"            LOG.info(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":167,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":168,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":9,"id":"f5f286f9_fe52d3d5","line":165,"updated":"2022-05-27 14:56:34.000000000","message":"Since it\u0027s an undefined error, I wouldn\u0027t include it in the response, since it might leak information.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"99543d9710bf055251f2614ad77a6150caa14438","unresolved":false,"context_lines":[{"line_number":162,"context_line":"                error \u003d exception.OAuth2Error("},{"line_number":163,"context_line":"                    error.code, error.title,"},{"line_number":164,"context_line":"                    AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":165,"context_line":"                    str(error))"},{"line_number":166,"context_line":"            LOG.info(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":167,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":168,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":9,"id":"eb1e8025_9adc67b0","line":165,"in_reply_to":"73058987_dd62c7b4","updated":"2022-08-09 14:52:58.000000000","message":"Ack","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33920,"name":"Yusuke Niimi","email":"niimi.yusuke@fujitsu.com","username":"yniimi"},"change_message_id":"28b05d8d1cda843f05f815e91e193b2c9b2f8d0d","unresolved":true,"context_lines":[{"line_number":162,"context_line":"                error \u003d exception.OAuth2Error("},{"line_number":163,"context_line":"                    error.code, error.title,"},{"line_number":164,"context_line":"                    AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":165,"context_line":"                    str(error))"},{"line_number":166,"context_line":"            LOG.info(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":167,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":168,"context_line":"            raise error"}],"source_content_type":"text/x-python","patch_set":9,"id":"73058987_dd62c7b4","line":165,"in_reply_to":"f5f286f9_fe52d3d5","updated":"2022-06-14 09:44:09.000000000","message":"Fix to include string instead of str (error). (Patchset 13)","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"f6ffa0e9e771f39a2f788646c891226077399341","unresolved":true,"context_lines":[{"line_number":171,"context_line":"                500, AccessTokenResource._HTTP_INTERNAL_SERVER_ERROR,"},{"line_number":172,"context_line":"                AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":173,"context_line":"                str(error))"},{"line_number":174,"context_line":"            LOG.warn(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":175,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":176,"context_line":"            raise error"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"7eabd605_85d9ce0e","line":174,"updated":"2022-05-27 14:56:34.000000000","message":"LOG.exception should be used, to log full traceback, so that it\u0027s easier to debug or report a bug.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33920,"name":"Yusuke Niimi","email":"niimi.yusuke@fujitsu.com","username":"yniimi"},"change_message_id":"28b05d8d1cda843f05f815e91e193b2c9b2f8d0d","unresolved":true,"context_lines":[{"line_number":171,"context_line":"                500, AccessTokenResource._HTTP_INTERNAL_SERVER_ERROR,"},{"line_number":172,"context_line":"                AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":173,"context_line":"                str(error))"},{"line_number":174,"context_line":"            LOG.warn(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":175,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":176,"context_line":"            raise error"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"b6641617_24b6d5ce","line":174,"in_reply_to":"7eabd605_85d9ce0e","updated":"2022-06-14 09:44:09.000000000","message":"Fix to use LOG.exception instead of LOG.warn. (Patchset 13)","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"99543d9710bf055251f2614ad77a6150caa14438","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                500, AccessTokenResource._HTTP_INTERNAL_SERVER_ERROR,"},{"line_number":172,"context_line":"                AccessTokenResource._ERR_OTHER_ERROR,"},{"line_number":173,"context_line":"                str(error))"},{"line_number":174,"context_line":"            LOG.warn(\u0027Get OAuth2.0 Access Token API: \u0027"},{"line_number":175,"context_line":"                     f\u0027{error.message}\u0027)"},{"line_number":176,"context_line":"            raise error"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"b3f44394_f1671098","line":174,"in_reply_to":"b6641617_24b6d5ce","updated":"2022-08-09 14:52:58.000000000","message":"Ack","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"}],"keystone/oauth2/handlers.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"81beaf4e26501a823b3a65ccd24e42ec00e63898","unresolved":true,"context_lines":[{"line_number":24,"context_line":"        },"},{"line_number":25,"context_line":"        f\"{error.status} {error.status_text}\"))"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    if error.status \u003d\u003d 401:"},{"line_number":28,"context_line":"        response.headers[\u0027WWW-Authenticate\u0027] \u003d \\"},{"line_number":29,"context_line":"            \u0027Keystone uri\u003d\"%s\"\u0027 % ks_flask.base_url()"},{"line_number":30,"context_line":"    return response"}],"source_content_type":"text/x-python","patch_set":9,"id":"ed4d511d_2b6ccaa8","line":27,"updated":"2022-04-29 12:59:16.000000000","message":"I thought you were requiring basic Auth?","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33920,"name":"Yusuke Niimi","email":"niimi.yusuke@fujitsu.com","username":"yniimi"},"change_message_id":"9ace88d82f39a8e6ddc0ccbd45f553819898d46e","unresolved":true,"context_lines":[{"line_number":24,"context_line":"        },"},{"line_number":25,"context_line":"        f\"{error.status} {error.status_text}\"))"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    if error.status \u003d\u003d 401:"},{"line_number":28,"context_line":"        response.headers[\u0027WWW-Authenticate\u0027] \u003d \\"},{"line_number":29,"context_line":"            \u0027Keystone uri\u003d\"%s\"\u0027 % ks_flask.base_url()"},{"line_number":30,"context_line":"    return response"}],"source_content_type":"text/x-python","patch_set":9,"id":"5d88dad8_5ccf8b89","line":27,"in_reply_to":"ed4d511d_2b6ccaa8","updated":"2022-05-18 01:14:27.000000000","message":"Yes. Basic authentication is required.\nSince the authentication information in basic is keystone\u0027s application, the authentication url here will match the url of the existing keystone.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"}],"keystone/tests/unit/test_v3.py":[{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":1238,"context_line":"        return environment"},{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"class OAuth2RestfulTestCase(RestfulTestCase, ABC):"},{"line_number":1242,"context_line":"    def assertValidErrorResponse(self, response):"},{"line_number":1243,"context_line":"        resp \u003d response.result"},{"line_number":1244,"context_line":"        self.assertIsNotNone(resp.get(\u0027error\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"37cc6396_f74bf99c","line":1241,"updated":"2022-03-02 12:09:58.000000000","message":"Maybe I missed something but what is the purpose to use ABC though there\u0027s no abstract method?","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":1238,"context_line":"        return environment"},{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"class OAuth2RestfulTestCase(RestfulTestCase, ABC):"},{"line_number":1242,"context_line":"    def assertValidErrorResponse(self, response):"},{"line_number":1243,"context_line":"        resp \u003d response.result"},{"line_number":1244,"context_line":"        self.assertIsNotNone(resp.get(\u0027error\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"c507dbb7_e4fd4f05","line":1241,"in_reply_to":"37cc6396_f74bf99c","updated":"2022-03-03 05:15:59.000000000","message":"In the pycharm tool, if ABC is not used, will show the warning message \"Class OAuth2RestfulTestCase must implement all abstract methods\",so ABC was added.\nNow has removed the class \u0027ABC\u0027.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":1238,"context_line":"        return environment"},{"line_number":1239,"context_line":""},{"line_number":1240,"context_line":""},{"line_number":1241,"context_line":"class OAuth2RestfulTestCase(RestfulTestCase, ABC):"},{"line_number":1242,"context_line":"    def assertValidErrorResponse(self, response):"},{"line_number":1243,"context_line":"        resp \u003d response.result"},{"line_number":1244,"context_line":"        self.assertIsNotNone(resp.get(\u0027error\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"89565627_8c4f97af","line":1241,"in_reply_to":"c507dbb7_e4fd4f05","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"}],"keystone/tests/unit/test_v3_oauth2.py":[{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class OAuth2Tests(test_v3.OAuth2RestfulTestCase, ABC):"},{"line_number":39,"context_line":"    APP_CRED_CREATE_URL \u003d \u0027/users/%(user_id)s/application_credentials\u0027"},{"line_number":40,"context_line":"    APP_CRED_LIST_URL \u003d \u0027/users/%(user_id)s/application_credentials\u0027"},{"line_number":41,"context_line":"    APP_CRED_DELETE_URL \u003d \u0027/users/%(user_id)s/application_credentials/\u0027 \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"6b35abac_5f840d56","line":38,"updated":"2022-03-02 12:09:58.000000000","message":"Maybe I missed something but what is the purpose to use ABC though there\u0027s no abstract method?","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class OAuth2Tests(test_v3.OAuth2RestfulTestCase, ABC):"},{"line_number":39,"context_line":"    APP_CRED_CREATE_URL \u003d \u0027/users/%(user_id)s/application_credentials\u0027"},{"line_number":40,"context_line":"    APP_CRED_LIST_URL \u003d \u0027/users/%(user_id)s/application_credentials\u0027"},{"line_number":41,"context_line":"    APP_CRED_DELETE_URL \u003d \u0027/users/%(user_id)s/application_credentials/\u0027 \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"955be65c_10f7bc63","line":38,"in_reply_to":"6b35abac_5f840d56","updated":"2022-03-03 05:15:59.000000000","message":"In the pycharm tool, if ABC is not used, will show the warning message \"Class OAuth2Tests must implement all abstract methods\",so ABC was added.\nNow has removed the class \u0027ABC\u0027.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    pass"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class OAuth2Tests(test_v3.OAuth2RestfulTestCase, ABC):"},{"line_number":39,"context_line":"    APP_CRED_CREATE_URL \u003d \u0027/users/%(user_id)s/application_credentials\u0027"},{"line_number":40,"context_line":"    APP_CRED_LIST_URL \u003d \u0027/users/%(user_id)s/application_credentials\u0027"},{"line_number":41,"context_line":"    APP_CRED_DELETE_URL \u003d \u0027/users/%(user_id)s/application_credentials/\u0027 \\"}],"source_content_type":"text/x-python","patch_set":5,"id":"48f86127_b4ace6a3","line":38,"in_reply_to":"955be65c_10f7bc63","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":55,"context_line":"                                          \u0027color)s%(message)s^[[00m\u0027,"},{"line_number":56,"context_line":"            default_log_levels\u003dlog.DEBUG)"},{"line_number":57,"context_line":"        CONF.log_opt_values(LOG, log.DEBUG)"},{"line_number":58,"context_line":"        print(f\u0027is_debug_enabled: {log.is_debug_enabled(CONF)}\u0027)"},{"line_number":59,"context_line":"        print(f\u0027get_default_log_levels: {log.get_default_log_levels()}\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _assert_error_resp(self, error_resp, error_msg, error_description):"},{"line_number":62,"context_line":"        resp_keys \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"d1354b82_411d9dd4","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":72},"updated":"2022-03-02 12:09:58.000000000","message":"Why don\u0027t you use ``LOG``?","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                                          \u0027color)s%(message)s^[[00m\u0027,"},{"line_number":56,"context_line":"            default_log_levels\u003dlog.DEBUG)"},{"line_number":57,"context_line":"        CONF.log_opt_values(LOG, log.DEBUG)"},{"line_number":58,"context_line":"        print(f\u0027is_debug_enabled: {log.is_debug_enabled(CONF)}\u0027)"},{"line_number":59,"context_line":"        print(f\u0027get_default_log_levels: {log.get_default_log_levels()}\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _assert_error_resp(self, error_resp, error_msg, error_description):"},{"line_number":62,"context_line":"        resp_keys \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"40e61bc6_b704fd70","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":72},"in_reply_to":"4bcc2833_1cf4f4f1","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":55,"context_line":"                                          \u0027color)s%(message)s^[[00m\u0027,"},{"line_number":56,"context_line":"            default_log_levels\u003dlog.DEBUG)"},{"line_number":57,"context_line":"        CONF.log_opt_values(LOG, log.DEBUG)"},{"line_number":58,"context_line":"        print(f\u0027is_debug_enabled: {log.is_debug_enabled(CONF)}\u0027)"},{"line_number":59,"context_line":"        print(f\u0027get_default_log_levels: {log.get_default_log_levels()}\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def _assert_error_resp(self, error_resp, error_msg, error_description):"},{"line_number":62,"context_line":"        resp_keys \u003d ("}],"source_content_type":"text/x-python","patch_set":5,"id":"4bcc2833_1cf4f4f1","line":59,"range":{"start_line":58,"start_character":0,"end_line":59,"end_character":72},"in_reply_to":"d1354b82_411d9dd4","updated":"2022-03-03 05:15:59.000000000","message":"Has fixed.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":73,"context_line":"            self.APP_CRED_CREATE_URL % {\u0027user_id\u0027: user_id},"},{"line_number":74,"context_line":"            body\u003d{\u0027application_credential\u0027: {\u0027name\u0027: app_cred_name}}"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        print(f\u0027resp: {resp}\u0027)"},{"line_number":77,"context_line":"        app_ref \u003d resp.result[\u0027application_credential\u0027]"},{"line_number":78,"context_line":"        return app_ref"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"624d6b99_bd75f701","line":76,"updated":"2022-03-02 12:09:58.000000000","message":"ditto","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            self.APP_CRED_CREATE_URL % {\u0027user_id\u0027: user_id},"},{"line_number":74,"context_line":"            body\u003d{\u0027application_credential\u0027: {\u0027name\u0027: app_cred_name}}"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        print(f\u0027resp: {resp}\u0027)"},{"line_number":77,"context_line":"        app_ref \u003d resp.result[\u0027application_credential\u0027]"},{"line_number":78,"context_line":"        return app_ref"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"a3e94af7_8514b4b1","line":76,"in_reply_to":"06805c71_fd788da5","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":73,"context_line":"            self.APP_CRED_CREATE_URL % {\u0027user_id\u0027: user_id},"},{"line_number":74,"context_line":"            body\u003d{\u0027application_credential\u0027: {\u0027name\u0027: app_cred_name}}"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        print(f\u0027resp: {resp}\u0027)"},{"line_number":77,"context_line":"        app_ref \u003d resp.result[\u0027application_credential\u0027]"},{"line_number":78,"context_line":"        return app_ref"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"06805c71_fd788da5","line":76,"in_reply_to":"624d6b99_bd75f701","updated":"2022-03-03 05:15:59.000000000","message":"Has fixed.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":81,"context_line":"        resp \u003d self.delete("},{"line_number":82,"context_line":"            self.APP_CRED_CREATE_URL % {\u0027user_id\u0027: user_id,"},{"line_number":83,"context_line":"                                        \u0027app_cred_id\u0027: app_cred_id})"},{"line_number":84,"context_line":"        print(f\u0027resp: {resp}\u0027)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def _get_access_token(self, app_cred,"},{"line_number":87,"context_line":"                          b64str\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"88dbc33b_cfa7aa39","line":84,"updated":"2022-03-02 12:09:58.000000000","message":"ditto","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        resp \u003d self.delete("},{"line_number":82,"context_line":"            self.APP_CRED_CREATE_URL % {\u0027user_id\u0027: user_id,"},{"line_number":83,"context_line":"                                        \u0027app_cred_id\u0027: app_cred_id})"},{"line_number":84,"context_line":"        print(f\u0027resp: {resp}\u0027)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def _get_access_token(self, app_cred,"},{"line_number":87,"context_line":"                          b64str\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"033f7f7a_0d25fe56","line":84,"in_reply_to":"1280efe0_7e88820b","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":81,"context_line":"        resp \u003d self.delete("},{"line_number":82,"context_line":"            self.APP_CRED_CREATE_URL % {\u0027user_id\u0027: user_id,"},{"line_number":83,"context_line":"                                        \u0027app_cred_id\u0027: app_cred_id})"},{"line_number":84,"context_line":"        print(f\u0027resp: {resp}\u0027)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def _get_access_token(self, app_cred,"},{"line_number":87,"context_line":"                          b64str\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1280efe0_7e88820b","line":84,"in_reply_to":"88dbc33b_cfa7aa39","updated":"2022-03-03 05:15:59.000000000","message":"Has fixed.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":87,"context_line":"                          b64str\u003dNone,"},{"line_number":88,"context_line":"                          headers\u003dNone,"},{"line_number":89,"context_line":"                          data\u003dNone,"},{"line_number":90,"context_line":"                          error\u003dNone,"},{"line_number":91,"context_line":"                          error_description\u003dNone,"},{"line_number":92,"context_line":"                          expected_status\u003dclient.OK):"},{"line_number":93,"context_line":"        if not b64str:"},{"line_number":94,"context_line":"            client_id \u003d app_cred.get(\u0027id\u0027)"},{"line_number":95,"context_line":"            client_secret \u003d app_cred.get(\u0027secret\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"126abd1c_c3312437","line":92,"range":{"start_line":90,"start_character":0,"end_line":92,"end_character":53},"updated":"2022-03-02 12:09:58.000000000","message":"These args shouldn\u0027t have a default value. If these values are omitted in a test case, other developers can\u0027t imagine what the test will check. \n\nIMO, ideally it\u0027s better to write assert* methods at l.116-117 in each test case. This style makes a test code shorter but not easy to follow for the other developers who read this code in the future. it\u0027s just a minor comment, so, we can leave them. What do you think?","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":87,"context_line":"                          b64str\u003dNone,"},{"line_number":88,"context_line":"                          headers\u003dNone,"},{"line_number":89,"context_line":"                          data\u003dNone,"},{"line_number":90,"context_line":"                          error\u003dNone,"},{"line_number":91,"context_line":"                          error_description\u003dNone,"},{"line_number":92,"context_line":"                          expected_status\u003dclient.OK):"},{"line_number":93,"context_line":"        if not b64str:"},{"line_number":94,"context_line":"            client_id \u003d app_cred.get(\u0027id\u0027)"},{"line_number":95,"context_line":"            client_secret \u003d app_cred.get(\u0027secret\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"14854460_7d306c3a","line":92,"range":{"start_line":90,"start_character":0,"end_line":92,"end_character":53},"in_reply_to":"126abd1c_c3312437","updated":"2022-03-03 05:15:59.000000000","message":"Has removed the default values.And has write assert* methods in each test case.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                          b64str\u003dNone,"},{"line_number":88,"context_line":"                          headers\u003dNone,"},{"line_number":89,"context_line":"                          data\u003dNone,"},{"line_number":90,"context_line":"                          error\u003dNone,"},{"line_number":91,"context_line":"                          error_description\u003dNone,"},{"line_number":92,"context_line":"                          expected_status\u003dclient.OK):"},{"line_number":93,"context_line":"        if not b64str:"},{"line_number":94,"context_line":"            client_id \u003d app_cred.get(\u0027id\u0027)"},{"line_number":95,"context_line":"            client_secret \u003d app_cred.get(\u0027secret\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"38c0dd95_1e0f190b","line":92,"range":{"start_line":90,"start_character":0,"end_line":92,"end_character":53},"in_reply_to":"14854460_7d306c3a","updated":"2022-03-08 07:26:21.000000000","message":"Good! Thank you!","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":118,"context_line":"        self.assertEqual(error_description,"},{"line_number":119,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":120,"context_line":"        print(\u0027error:\u0027, json_resp.get(\u0027error\u0027))"},{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"33c324aa_40210af3","line":120,"updated":"2022-03-02 12:09:58.000000000","message":"ditto","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":118,"context_line":"        self.assertEqual(error_description,"},{"line_number":119,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":120,"context_line":"        print(\u0027error:\u0027, json_resp.get(\u0027error\u0027))"},{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"665765ee_1e2c23f1","line":120,"in_reply_to":"33c324aa_40210af3","updated":"2022-03-03 05:15:59.000000000","message":"Has fixed.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":118,"context_line":"        self.assertEqual(error_description,"},{"line_number":119,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":120,"context_line":"        print(\u0027error:\u0027, json_resp.get(\u0027error\u0027))"},{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f7c94d04_ebd43982","line":120,"in_reply_to":"665765ee_1e2c23f1","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.assertEqual(error_description,"},{"line_number":119,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":120,"context_line":"        print(\u0027error:\u0027, json_resp.get(\u0027error\u0027))"},{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class AccessTokenTests(OAuth2Tests, ABC):"}],"source_content_type":"text/x-python","patch_set":5,"id":"58b7b890_91073d33","line":121,"updated":"2022-03-02 12:09:58.000000000","message":"ditto","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        self.assertEqual(error_description,"},{"line_number":119,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":120,"context_line":"        print(\u0027error:\u0027, json_resp.get(\u0027error\u0027))"},{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class AccessTokenTests(OAuth2Tests, ABC):"}],"source_content_type":"text/x-python","patch_set":5,"id":"8acf3ac3_7c3ebc23","line":121,"in_reply_to":"439064b0_a0ae150e","updated":"2022-03-08 07:26:21.000000000","message":"Ack","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":118,"context_line":"        self.assertEqual(error_description,"},{"line_number":119,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":120,"context_line":"        print(\u0027error:\u0027, json_resp.get(\u0027error\u0027))"},{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class AccessTokenTests(OAuth2Tests, ABC):"}],"source_content_type":"text/x-python","patch_set":5,"id":"439064b0_a0ae150e","line":121,"in_reply_to":"58b7b890_91073d33","updated":"2022-03-03 05:15:59.000000000","message":"Has fixed","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"5ac8f3ea75cfc07ab008997f807c4f6a8fd92313","unresolved":true,"context_lines":[{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class AccessTokenTests(OAuth2Tests, ABC):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def setUp(self):"},{"line_number":127,"context_line":"        super(AccessTokenTests, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"f063f43a_627dca8c","line":124,"updated":"2022-03-02 12:09:58.000000000","message":"Maybe I missed something but what is the purpose to use ABC though there\u0027s no abstract method?","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class AccessTokenTests(OAuth2Tests, ABC):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def setUp(self):"},{"line_number":127,"context_line":"        super(AccessTokenTests, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5b6eb4c6_78df20ac","line":124,"in_reply_to":"059b69aa_5d45ea9d","updated":"2022-03-08 07:26:21.000000000","message":"I got it. The reason behind that error message is, as you may know, ``_get_token_id`` is an abstractmethod in RestfulTestCase. I agree with your decision that it\u0027s not necessary to implement ``_get_token_id`` as the other test classes also don\u0027t implement it. BTW, If you want to suppress the warnings, I believe the correct way is to implement ``_get_token_id`` method in your test class :)","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"44ecbb9fbc861329a4bc1e8a9c8c44aafe47fb9a","unresolved":true,"context_lines":[{"line_number":121,"context_line":"        print(\u0027error_description:\u0027, json_resp.get(\u0027error_description\u0027))"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"class AccessTokenTests(OAuth2Tests, ABC):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def setUp(self):"},{"line_number":127,"context_line":"        super(AccessTokenTests, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"059b69aa_5d45ea9d","line":124,"in_reply_to":"f063f43a_627dca8c","updated":"2022-03-03 05:15:59.000000000","message":"In the pycharm tool, if ABC is not used, will show the warning message \"Class AccessTokenTests must implement all abstract methods\",so ABC was added.\nNow has removed the class \u0027ABC\u0027.","commit_id":"389489fb45e98e66f7d175bbbd9cb960af3623f7"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":136,"context_line":"            headers\u003dheaders,"},{"line_number":137,"context_line":"            convert\u003dFalse,"},{"line_number":138,"context_line":"            body\u003ddata,"},{"line_number":139,"context_line":"            expected_status\u003d405)"},{"line_number":140,"context_line":"        LOG.debug(f\u0027response: {resp}\u0027)"},{"line_number":141,"context_line":"        json_resp \u003d jsonutils.loads(resp.body)"},{"line_number":142,"context_line":"        self.assertEqual(\u0027other_error\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"5e7a3f83_c1cc940d","line":139,"updated":"2022-03-08 07:26:21.000000000","message":"Why don\u0027t you use ``client.METHOD_NOT_ALLOWED``?","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            headers\u003dheaders,"},{"line_number":137,"context_line":"            convert\u003dFalse,"},{"line_number":138,"context_line":"            body\u003ddata,"},{"line_number":139,"context_line":"            expected_status\u003d405)"},{"line_number":140,"context_line":"        LOG.debug(f\u0027response: {resp}\u0027)"},{"line_number":141,"context_line":"        json_resp \u003d jsonutils.loads(resp.body)"},{"line_number":142,"context_line":"        self.assertEqual(\u0027other_error\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"e510e34a_46c7aa81","line":139,"in_reply_to":"3b02eead_bc2973ca","updated":"2022-03-09 10:50:16.000000000","message":"Ack","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":136,"context_line":"            headers\u003dheaders,"},{"line_number":137,"context_line":"            convert\u003dFalse,"},{"line_number":138,"context_line":"            body\u003ddata,"},{"line_number":139,"context_line":"            expected_status\u003d405)"},{"line_number":140,"context_line":"        LOG.debug(f\u0027response: {resp}\u0027)"},{"line_number":141,"context_line":"        json_resp \u003d jsonutils.loads(resp.body)"},{"line_number":142,"context_line":"        self.assertEqual(\u0027other_error\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3b02eead_bc2973ca","line":139,"in_reply_to":"5e7a3f83_c1cc940d","updated":"2022-03-09 06:51:24.000000000","message":"Has modified to \"METHOD_NOT_ALLOWED\".","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":147,"context_line":"    def test_get_access_token(self):"},{"line_number":148,"context_line":"        client_name \u003d \u0027client_name_test\u0027"},{"line_number":149,"context_line":"        app_cred \u003d self._create_app_cred(self.user_id, client_name)"},{"line_number":150,"context_line":"        self._get_access_token(app_cred,"},{"line_number":151,"context_line":"                               b64str\u003dNone,"},{"line_number":152,"context_line":"                               headers\u003dNone,"},{"line_number":153,"context_line":"                               data\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"2865aa86_2ddc6254","line":150,"updated":"2022-03-08 07:26:21.000000000","message":"Could you confirm the contents and structure of the response? please see [1][2].\n\nAt least the following points should be confirmed.\n- values of these three attributes: \u0027access_token\u0027, \u0027expires_in\u0027 and \u0027token_type\u0027 match expected values.\n- these values can be obtained from an appropriate place of a response.\n\nPlease note that if it\u0027s meaningless, for example you mocked whole response and it\u0027s obvious that the response contains the correct body, the above checks are not necessary.\n\n[1] https://specs.openstack.org/openstack/keystone-specs/specs/keystone/yoga/oauth2-client-credentials-ext.html#access-token-api\n[2] https://datatracker.ietf.org/doc/html/rfc6749#section-5.1","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":147,"context_line":"    def test_get_access_token(self):"},{"line_number":148,"context_line":"        client_name \u003d \u0027client_name_test\u0027"},{"line_number":149,"context_line":"        app_cred \u003d self._create_app_cred(self.user_id, client_name)"},{"line_number":150,"context_line":"        self._get_access_token(app_cred,"},{"line_number":151,"context_line":"                               b64str\u003dNone,"},{"line_number":152,"context_line":"                               headers\u003dNone,"},{"line_number":153,"context_line":"                               data\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9bf8d528_2c34b787","line":150,"in_reply_to":"2865aa86_2ddc6254","updated":"2022-03-09 06:51:24.000000000","message":"Test code has been added to check whether the response contains these three attributes. Because no way to properly mock token_id was found, access_token value was not checked.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    def test_get_access_token(self):"},{"line_number":148,"context_line":"        client_name \u003d \u0027client_name_test\u0027"},{"line_number":149,"context_line":"        app_cred \u003d self._create_app_cred(self.user_id, client_name)"},{"line_number":150,"context_line":"        self._get_access_token(app_cred,"},{"line_number":151,"context_line":"                               b64str\u003dNone,"},{"line_number":152,"context_line":"                               headers\u003dNone,"},{"line_number":153,"context_line":"                               data\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"e300269c_73a007a8","line":150,"in_reply_to":"9bf8d528_2c34b787","updated":"2022-03-09 10:50:16.000000000","message":"\u003e access_token value was not checked\nI got it.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        self.assertEqual(error,"},{"line_number":200,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":201,"context_line":"        self.assertEqual(error_description,"},{"line_number":202,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_get_access_token_without_client_id(self):"},{"line_number":205,"context_line":"        client_name \u003d \u0027client_name_test\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"4b0de12b_f25b99da","line":202,"updated":"2022-03-08 07:26:21.000000000","message":"In this case, we also need to confirm that response headers include \"WWW-Authenticate\" [1].\n\n\u003e If the client attempted to authenticate via the \"Authorization\" request header field, the authorization server MUST respond with an HTTP 401 (Unauthorized) status code and include the \"WWW-Authenticate\" response header field matching the authentication scheme used by the client.\n\nhttps://datatracker.ietf.org/doc/html/rfc6749#section-5.2","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        self.assertEqual(error,"},{"line_number":200,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":201,"context_line":"        self.assertEqual(error_description,"},{"line_number":202,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_get_access_token_without_client_id(self):"},{"line_number":205,"context_line":"        client_name \u003d \u0027client_name_test\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"54a20ee0_1529119d","line":202,"in_reply_to":"4b0de12b_f25b99da","updated":"2022-03-09 06:51:24.000000000","message":"Has add the test code to confirm that response headers .","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        self.assertEqual(error,"},{"line_number":200,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":201,"context_line":"        self.assertEqual(error_description,"},{"line_number":202,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    def test_get_access_token_without_client_id(self):"},{"line_number":205,"context_line":"        client_name \u003d \u0027client_name_test\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"edfbce73_a0830bf2","line":202,"in_reply_to":"54a20ee0_1529119d","updated":"2022-03-09 10:50:16.000000000","message":"Ack","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":218,"context_line":"        LOG.debug(f\u0027error_description: {json_resp.get(\"error_description\")}\u0027)"},{"line_number":219,"context_line":"        self.assertEqual(error,"},{"line_number":220,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":221,"context_line":"        self.assertEqual(error_description,"},{"line_number":222,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_get_access_token_without_client_secret(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"e23fd540_9b4c519d","line":221,"updated":"2022-03-08 07:26:21.000000000","message":"ditto","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        LOG.debug(f\u0027error_description: {json_resp.get(\"error_description\")}\u0027)"},{"line_number":219,"context_line":"        self.assertEqual(error,"},{"line_number":220,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":221,"context_line":"        self.assertEqual(error_description,"},{"line_number":222,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_get_access_token_without_client_secret(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"def428e7_b25bb0f2","line":221,"in_reply_to":"3e874d00_769658b6","updated":"2022-03-09 10:50:16.000000000","message":"Ack","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":218,"context_line":"        LOG.debug(f\u0027error_description: {json_resp.get(\"error_description\")}\u0027)"},{"line_number":219,"context_line":"        self.assertEqual(error,"},{"line_number":220,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":221,"context_line":"        self.assertEqual(error_description,"},{"line_number":222,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def test_get_access_token_without_client_secret(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3e874d00_769658b6","line":221,"in_reply_to":"e23fd540_9b4c519d","updated":"2022-03-09 06:51:24.000000000","message":"Has add the test code to confirm that response headers .","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":238,"context_line":"        LOG.debug(f\u0027error_description: {json_resp.get(\"error_description\")}\u0027)"},{"line_number":239,"context_line":"        self.assertEqual(error,"},{"line_number":240,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":241,"context_line":"        self.assertEqual(error_description,"},{"line_number":242,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def test_get_access_token_without_grant_type(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"85c3e95c_961945b0","line":241,"updated":"2022-03-08 07:26:21.000000000","message":"ditto","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":238,"context_line":"        LOG.debug(f\u0027error_description: {json_resp.get(\"error_description\")}\u0027)"},{"line_number":239,"context_line":"        self.assertEqual(error,"},{"line_number":240,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":241,"context_line":"        self.assertEqual(error_description,"},{"line_number":242,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def test_get_access_token_without_grant_type(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9c373061_a74c6b5b","line":241,"in_reply_to":"85c3e95c_961945b0","updated":"2022-03-09 06:51:24.000000000","message":"Has add the test code to confirm that response headers .","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        LOG.debug(f\u0027error_description: {json_resp.get(\"error_description\")}\u0027)"},{"line_number":239,"context_line":"        self.assertEqual(error,"},{"line_number":240,"context_line":"                         json_resp.get(\u0027error\u0027))"},{"line_number":241,"context_line":"        self.assertEqual(error_description,"},{"line_number":242,"context_line":"                         json_resp.get(\u0027error_description\u0027))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    def test_get_access_token_without_grant_type(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"52120603_a11c23fd","line":241,"in_reply_to":"9c373061_a74c6b5b","updated":"2022-03-09 10:50:16.000000000","message":"Ack","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":245,"context_line":"        client_name \u003d \u0027client_name_test\u0027"},{"line_number":246,"context_line":"        app_cred \u003d self._create_app_cred(self.user_id, client_name)"},{"line_number":247,"context_line":"        data \u003d {"},{"line_number":248,"context_line":"            \u0027grant_type\u0027: \u0027\u0027"},{"line_number":249,"context_line":"        }"},{"line_number":250,"context_line":"        error \u003d \u0027invalid_request\u0027"},{"line_number":251,"context_line":"        error_description \u003d \u0027The parameter grant_type is required.\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"56c16477_2fb713d5","line":248,"updated":"2022-03-08 07:26:21.000000000","message":"According to the definition of ``invalid_request`` [1], it should be:\n\n```\ndata \u003d {}\n```\n\nI think an \u0027grant_type\u0027 with empty string corresponds to the ``unsupported_grant_type`` [1].\n\n``invalid_request`` is used for the request missing a required parameter, includes an unsupported parameter value (other than grant type) [1].\n\n[1] https://datatracker.ietf.org/doc/html/rfc6749#section-5.2","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        client_name \u003d \u0027client_name_test\u0027"},{"line_number":246,"context_line":"        app_cred \u003d self._create_app_cred(self.user_id, client_name)"},{"line_number":247,"context_line":"        data \u003d {"},{"line_number":248,"context_line":"            \u0027grant_type\u0027: \u0027\u0027"},{"line_number":249,"context_line":"        }"},{"line_number":250,"context_line":"        error \u003d \u0027invalid_request\u0027"},{"line_number":251,"context_line":"        error_description \u003d \u0027The parameter grant_type is required.\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"0fca83d0_c9d34b5f","line":248,"in_reply_to":"55a4d3c6_4bb3b796","updated":"2022-03-09 10:50:16.000000000","message":"Ack","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":245,"context_line":"        client_name \u003d \u0027client_name_test\u0027"},{"line_number":246,"context_line":"        app_cred \u003d self._create_app_cred(self.user_id, client_name)"},{"line_number":247,"context_line":"        data \u003d {"},{"line_number":248,"context_line":"            \u0027grant_type\u0027: \u0027\u0027"},{"line_number":249,"context_line":"        }"},{"line_number":250,"context_line":"        error \u003d \u0027invalid_request\u0027"},{"line_number":251,"context_line":"        error_description \u003d \u0027The parameter grant_type is required.\u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"55a4d3c6_4bb3b796","line":248,"in_reply_to":"56c16477_2fb713d5","updated":"2022-03-09 06:51:24.000000000","message":"Has modified the test cases. when use data\u003d{}, return \"invalid_request\", when use data \u003d {\u0027grant_type\u0027: \u0027\u0027} return \u0027unsupported_grant_type\u0027.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[{"line_number":267,"context_line":"        data \u003d {"},{"line_number":268,"context_line":"            \u0027grant_type\u0027: \u0027not_client_credentials\u0027"},{"line_number":269,"context_line":"        }"},{"line_number":270,"context_line":"        error \u003d \u0027invalid_request\u0027"},{"line_number":271,"context_line":"        error_description \u003d \u0027The parameter grant_type \u0027 \\"},{"line_number":272,"context_line":"                            \u0027not_client_credentials is not supported.\u0027"},{"line_number":273,"context_line":"        json_resp \u003d self._get_access_token(app_cred,"}],"source_content_type":"text/x-python","patch_set":8,"id":"71f50842_03e9d632","line":270,"updated":"2022-03-08 07:26:21.000000000","message":"Isn\u0027t it ``unsupported_grant_type``?? c.f., [1]\n\n\u003e unsupported_grant_type\n\u003e      The authorization grant type is not supported by the authorization server.\n\n``invalid_request`` is used for the request missing a required parameter, includes an unsupported parameter value (other than grant type) [1].\n\nPlease fix the corresponding codes, if the above is true.\n\n[1] https://datatracker.ietf.org/doc/html/rfc6749#section-5.2","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        data \u003d {"},{"line_number":268,"context_line":"            \u0027grant_type\u0027: \u0027not_client_credentials\u0027"},{"line_number":269,"context_line":"        }"},{"line_number":270,"context_line":"        error \u003d \u0027invalid_request\u0027"},{"line_number":271,"context_line":"        error_description \u003d \u0027The parameter grant_type \u0027 \\"},{"line_number":272,"context_line":"                            \u0027not_client_credentials is not supported.\u0027"},{"line_number":273,"context_line":"        json_resp \u003d self._get_access_token(app_cred,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fdacb7da_9608f55b","line":270,"in_reply_to":"40b0b2e5_44784369","updated":"2022-03-09 10:50:16.000000000","message":"Ack","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[{"line_number":267,"context_line":"        data \u003d {"},{"line_number":268,"context_line":"            \u0027grant_type\u0027: \u0027not_client_credentials\u0027"},{"line_number":269,"context_line":"        }"},{"line_number":270,"context_line":"        error \u003d \u0027invalid_request\u0027"},{"line_number":271,"context_line":"        error_description \u003d \u0027The parameter grant_type \u0027 \\"},{"line_number":272,"context_line":"                            \u0027not_client_credentials is not supported.\u0027"},{"line_number":273,"context_line":"        json_resp \u003d self._get_access_token(app_cred,"}],"source_content_type":"text/x-python","patch_set":8,"id":"40b0b2e5_44784369","line":270,"in_reply_to":"71f50842_03e9d632","updated":"2022-03-09 06:51:24.000000000","message":"Has fixed.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"0983bdee2ced00a537ea926b472c9044b3ab17ca","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f1f6cffe_31ab9a3b","line":453,"updated":"2022-03-08 07:26:21.000000000","message":"Why don\u0027t you add a test case for ``delete`` method?","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33455,"name":"Hiromu Asahina","email":"hiromu.a5a@gmail.com","username":"h_asahina"},"change_message_id":"852afbbf5a0110fd1b09eb87cfa1da43e72e8e66","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a397b638_d7ee6f7a","line":453,"in_reply_to":"e5f9b39a_9521fb89","updated":"2022-03-09 10:50:16.000000000","message":"Good. thanks.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":33492,"name":"Yi Feng","email":"fengyi@fujitsu.com","username":"YiFeng"},"change_message_id":"4365497f8d3df0a9d443f56fb368c10631af74bd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e5f9b39a_9521fb89","line":453,"in_reply_to":"f1f6cffe_31ab9a3b","updated":"2022-03-09 06:51:24.000000000","message":"Has added the \u0027delete\u0027 method in get OAuth2.0 Access Token API, and added the test case for \u0027delete\u0027 method.","commit_id":"edc0aee179f28793b0e1bd842d2642a03e887757"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"d9c827faf11df9d61b01a73f0ba7f52c214b17a2","unresolved":true,"context_lines":[{"line_number":372,"context_line":"            \u0027grant_type\u0027: \u0027client_credentials\u0027"},{"line_number":373,"context_line":"        }"},{"line_number":374,"context_line":"        data \u003d parse.urlencode(data).encode()"},{"line_number":375,"context_line":"        with mock.patch("},{"line_number":376,"context_line":"                \u0027keystone.api._shared.authentication.\u0027"},{"line_number":377,"context_line":"                \u0027authenticate_for_token\u0027) as co_mock:"},{"line_number":378,"context_line":"            co_mock.side_effect \u003d exception.ValidationError("},{"line_number":379,"context_line":"                \u0027Auth method is invalid\u0027)"},{"line_number":380,"context_line":"            resp \u003d self.post("},{"line_number":381,"context_line":"                self.ACCESS_TOKEN_URL,"},{"line_number":382,"context_line":"                headers\u003dheaders,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7bf68cf7_00ab1bf0","line":379,"range":{"start_line":375,"start_character":7,"end_line":379,"end_character":41},"updated":"2022-04-28 13:09:24.000000000","message":"When would you run into this? All the parameters provided to keystone are correct, yet the user would be receiving a \"Bad Request\".","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"},{"author":{"_account_id":33920,"name":"Yusuke Niimi","email":"niimi.yusuke@fujitsu.com","username":"yniimi"},"change_message_id":"9ace88d82f39a8e6ddc0ccbd45f553819898d46e","unresolved":true,"context_lines":[{"line_number":372,"context_line":"            \u0027grant_type\u0027: \u0027client_credentials\u0027"},{"line_number":373,"context_line":"        }"},{"line_number":374,"context_line":"        data \u003d parse.urlencode(data).encode()"},{"line_number":375,"context_line":"        with mock.patch("},{"line_number":376,"context_line":"                \u0027keystone.api._shared.authentication.\u0027"},{"line_number":377,"context_line":"                \u0027authenticate_for_token\u0027) as co_mock:"},{"line_number":378,"context_line":"            co_mock.side_effect \u003d exception.ValidationError("},{"line_number":379,"context_line":"                \u0027Auth method is invalid\u0027)"},{"line_number":380,"context_line":"            resp \u003d self.post("},{"line_number":381,"context_line":"                self.ACCESS_TOKEN_URL,"},{"line_number":382,"context_line":"                headers\u003dheaders,"}],"source_content_type":"text/x-python","patch_set":9,"id":"a87542a6_51f95ddf","line":379,"range":{"start_line":375,"start_character":7,"end_line":379,"end_character":41},"in_reply_to":"7bf68cf7_00ab1bf0","updated":"2022-05-18 01:14:27.000000000","message":"This error does not occur if the source code of an existing API called with the OAuth 2.0 API is correct.\nThis is the source for unit testing, and is intended to test whether OAuth2.0 API can catch and handle errors in the called existing API.\nDuring unit testing, we randomly selected one to simulate an error in an existing API.","commit_id":"7e28d2818486dffed5749aa995bc26f43ea0ad34"}]}
