)]}'
{"keystone/assignment/routers.py":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"b1f053190a831f452b0622c34b0123e340d6b209","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        mapper.connect(\u0027/tenants\u0027,"},{"line_number":38,"context_line":"                       controller\u003dtenant_controller,"},{"line_number":39,"context_line":"                       action\u003d\u0027get_all_projects\u0027,"},{"line_number":40,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":41,"context_line":"        mapper.connect(\u0027/tenants/{tenant_id}\u0027,"},{"line_number":42,"context_line":"                       controller\u003dtenant_controller,"},{"line_number":43,"context_line":"                       action\u003d\u0027get_project\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_1a225501","line":40,"updated":"2014-07-02 04:42:54.000000000","message":"Do we really need HEAD here?","commit_id":"cead14f9d86771959595d4ade9c8d74bdc4b7ac5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"99bbf201a6df43f0379654856d5c53c8f981c98e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        mapper.connect(\u0027/tenants\u0027,"},{"line_number":38,"context_line":"                       controller\u003dtenant_controller,"},{"line_number":39,"context_line":"                       action\u003d\u0027get_all_projects\u0027,"},{"line_number":40,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":41,"context_line":"        mapper.connect(\u0027/tenants/{tenant_id}\u0027,"},{"line_number":42,"context_line":"                       controller\u003dtenant_controller,"},{"line_number":43,"context_line":"                       action\u003d\u0027get_project\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_9f739be6","line":40,"in_reply_to":"baada198_1a225501","updated":"2014-07-02 16:41:46.000000000","message":"This will be reverted before we merge.","commit_id":"cead14f9d86771959595d4ade9c8d74bdc4b7ac5"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"b1f053190a831f452b0622c34b0123e340d6b209","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        mapper.connect(\u0027/tenants/{tenant_id}/users/{user_id}/roles\u0027,"},{"line_number":49,"context_line":"                       controller\u003droles_controller,"},{"line_number":50,"context_line":"                       action\u003d\u0027get_user_roles\u0027,"},{"line_number":51,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":52,"context_line":"        mapper.connect(\u0027/users/{user_id}/roles\u0027,"},{"line_number":53,"context_line":"                       controller\u003droles_controller,"},{"line_number":54,"context_line":"                       action\u003d\u0027get_user_roles\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_da87fdd5","line":51,"updated":"2014-07-02 04:42:54.000000000","message":"same as above. Do we really need HEAD here?  if not we need to update the doc","commit_id":"cead14f9d86771959595d4ade9c8d74bdc4b7ac5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"99bbf201a6df43f0379654856d5c53c8f981c98e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        mapper.connect(\u0027/tenants/{tenant_id}/users/{user_id}/roles\u0027,"},{"line_number":49,"context_line":"                       controller\u003droles_controller,"},{"line_number":50,"context_line":"                       action\u003d\u0027get_user_roles\u0027,"},{"line_number":51,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":52,"context_line":"        mapper.connect(\u0027/users/{user_id}/roles\u0027,"},{"line_number":53,"context_line":"                       controller\u003droles_controller,"},{"line_number":54,"context_line":"                       action\u003d\u0027get_user_roles\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_bf821f92","line":51,"in_reply_to":"baada198_da87fdd5","updated":"2014-07-02 16:41:46.000000000","message":"Same as above","commit_id":"cead14f9d86771959595d4ade9c8d74bdc4b7ac5"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"b1f053190a831f452b0622c34b0123e340d6b209","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        mapper.connect(\u0027/users/{user_id}/roles\u0027,"},{"line_number":53,"context_line":"                       controller\u003droles_controller,"},{"line_number":54,"context_line":"                       action\u003d\u0027get_user_roles\u0027,"},{"line_number":55,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def append_v3_routers(mapper, routers):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3a78f9f1","line":55,"updated":"2014-07-02 04:42:54.000000000","message":"Same as above","commit_id":"cead14f9d86771959595d4ade9c8d74bdc4b7ac5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"99bbf201a6df43f0379654856d5c53c8f981c98e","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        mapper.connect(\u0027/users/{user_id}/roles\u0027,"},{"line_number":53,"context_line":"                       controller\u003droles_controller,"},{"line_number":54,"context_line":"                       action\u003d\u0027get_user_roles\u0027,"},{"line_number":55,"context_line":"                       conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def append_v3_routers(mapper, routers):"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_ff4bb784","line":55,"in_reply_to":"baada198_3a78f9f1","updated":"2014-07-02 16:41:46.000000000","message":"Same as above","commit_id":"cead14f9d86771959595d4ade9c8d74bdc4b7ac5"}],"keystone/auth/routers.py":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    # call and lets wsgi.render_response remove the body data."},{"line_number":29,"context_line":"    mapper.connect(\u0027/auth/tokens\u0027,"},{"line_number":30,"context_line":"                   controller\u003dauth_controller,"},{"line_number":31,"context_line":"                   action\u003d\u0027check_token\u0027,"},{"line_number":32,"context_line":"                   conditions\u003ddict(method\u003d[\u0027HEAD\u0027]))"},{"line_number":33,"context_line":"    mapper.connect(\u0027/auth/tokens\u0027,"},{"line_number":34,"context_line":"                   controller\u003dauth_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_c97b6ff3","line":31,"updated":"2014-07-03 18:26:13.000000000","message":"Not sure , how this will work. If Apache calls  HEAD auth/tokens  where will the control go? check_token or validate_token.?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    # call and lets wsgi.render_response remove the body data."},{"line_number":29,"context_line":"    mapper.connect(\u0027/auth/tokens\u0027,"},{"line_number":30,"context_line":"                   controller\u003dauth_controller,"},{"line_number":31,"context_line":"                   action\u003d\u0027check_token\u0027,"},{"line_number":32,"context_line":"                   conditions\u003ddict(method\u003d[\u0027HEAD\u0027]))"},{"line_number":33,"context_line":"    mapper.connect(\u0027/auth/tokens\u0027,"},{"line_number":34,"context_line":"                   controller\u003dauth_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ef9cb311","line":31,"in_reply_to":"baada198_c97b6ff3","updated":"2014-07-03 19:45:22.000000000","message":"This works but is done in this manner because of policy, see the comment above. We can\u0027t remove this unless we also break policy configuration(s).\n\nI\u0027d prefer to not break policy config for icehouse, we can work on this in Juno and evaluate independent of this change.","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    mapper.connect(\u0027/auth/tokens/OS-PKI/revoked\u0027,"},{"line_number":42,"context_line":"                   controller\u003dauth_controller,"},{"line_number":43,"context_line":"                   action\u003d\u0027revocation_list\u0027,"},{"line_number":44,"context_line":"                   conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_0320e6aa","line":44,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need HEAD here?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    mapper.connect(\u0027/auth/tokens/OS-PKI/revoked\u0027,"},{"line_number":42,"context_line":"                   controller\u003dauth_controller,"},{"line_number":43,"context_line":"                   action\u003d\u0027revocation_list\u0027,"},{"line_number":44,"context_line":"                   conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_afe0fb96","line":44,"in_reply_to":"baada198_0320e6aa","updated":"2014-07-03 19:45:22.000000000","message":"This can probably be removed.  I added this due to something bug related during development.","commit_id":"0e58106636b84ed843bd594c559ed88739375174"}],"keystone/common/wsgi.py":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"def render_exception(error, context\u003dNone, request\u003dNone, user_locale\u003dNone):"},{"line_number":640,"context_line":"    \"\"\"Forms a WSGI response based on the current error.\"\"\""},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"    error_message \u003d error.args[0]"},{"line_number":643,"context_line":"    message \u003d gettextutils.translate(error_message, desired_locale\u003duser_locale)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ce60d5a7","line":640,"updated":"2014-07-03 18:26:13.000000000","message":"Don\u0027t we need to handle HEAD here? Looks like this code returns exception as body?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":637,"context_line":""},{"line_number":638,"context_line":""},{"line_number":639,"context_line":"def render_exception(error, context\u003dNone, request\u003dNone, user_locale\u003dNone):"},{"line_number":640,"context_line":"    \"\"\"Forms a WSGI response based on the current error.\"\"\""},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"    error_message \u003d error.args[0]"},{"line_number":643,"context_line":"    message \u003d gettextutils.translate(error_message, desired_locale\u003duser_locale)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8f9177f3","line":640,"in_reply_to":"baada198_ce60d5a7","updated":"2014-07-03 19:45:22.000000000","message":"No, the exception changes the status. This is not relevant for HEAD vs BODY.","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fb8bfb0420b20569c6b8a5cf6554483e5fa26c3c","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # NOTE(morganfainberg): use the request method to normalize the"},{"line_number":204,"context_line":"        # response code between GET and HEAD requests. The HTTP status should"},{"line_number":205,"context_line":"        # be the same."},{"line_number":206,"context_line":"        req_method \u003d req.environ[\u0027REQUEST_METHOD\u0027].lower()"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # NOTE(vish): make sure we have no unicode keys for py2.6."},{"line_number":209,"context_line":"        params \u003d self._normalize_dict(params)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_a453bd69","line":206,"updated":"2014-07-03 20:46:19.000000000","message":"tempted to say this should be upper() because convention","commit_id":"b5f297c54a3b5f39a7e7d82108e743492912d320"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"345c7e29559054c9a8be7a4dd034dfe953318733","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        # NOTE(morganfainberg): use the request method to normalize the"},{"line_number":204,"context_line":"        # response code between GET and HEAD requests. The HTTP status should"},{"line_number":205,"context_line":"        # be the same."},{"line_number":206,"context_line":"        req_method \u003d req.environ[\u0027REQUEST_METHOD\u0027].lower()"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        # NOTE(vish): make sure we have no unicode keys for py2.6."},{"line_number":209,"context_line":"        params \u003d self._normalize_dict(params)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_b7b76d39","line":206,"in_reply_to":"baada198_a453bd69","updated":"2014-07-03 20:50:29.000000000","message":"I\u0027m content to switch this, as long as it\u0027s consistent for matching (defensive, it should always be one way or another anyway)","commit_id":"b5f297c54a3b5f39a7e7d82108e743492912d320"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fb8bfb0420b20569c6b8a5cf6554483e5fa26c3c","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                                    context\u003dcontext,"},{"line_number":232,"context_line":"                                    user_locale\u003dbest_match_language(req))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if result is None and req_method !\u003d \u0027head\u0027:"},{"line_number":235,"context_line":"            return render_response(status\u003d(204, \u0027No Content\u0027))"},{"line_number":236,"context_line":"        elif isinstance(result, six.string_types):"},{"line_number":237,"context_line":"            return result"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_44b5817c","line":234,"updated":"2014-07-03 20:46:19.000000000","message":"not sure i understand the new condition -- it seems a HEAD request could return 204 legitimately","commit_id":"b5f297c54a3b5f39a7e7d82108e743492912d320"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"345c7e29559054c9a8be7a4dd034dfe953318733","unresolved":false,"context_lines":[{"line_number":231,"context_line":"                                    context\u003dcontext,"},{"line_number":232,"context_line":"                                    user_locale\u003dbest_match_language(req))"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        if result is None and req_method !\u003d \u0027head\u0027:"},{"line_number":235,"context_line":"            return render_response(status\u003d(204, \u0027No Content\u0027))"},{"line_number":236,"context_line":"        elif isinstance(result, six.string_types):"},{"line_number":237,"context_line":"            return result"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_57ce11b5","line":234,"in_reply_to":"baada198_44b5817c","updated":"2014-07-03 20:50:29.000000000","message":"Hm. ok this looks like we should allow it. The fact that render_response does the body strip here, this would be correct to keep.","commit_id":"b5f297c54a3b5f39a7e7d82108e743492912d320"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"faa7ea45fc7be36eb9f778dd9555caa9912e6f70","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    if method \u003d\u003d \u0027HEAD\u0027:"},{"line_number":625,"context_line":"        # NOTE(morganfainberg): HEAD requests should return the same status"},{"line_number":626,"context_line":"        # as a GET request and same headers (including content-type and"},{"line_number":627,"context_line":"        # content-length). The webob.Response object automatically sets the"},{"line_number":628,"context_line":"        # content-length to 0 if the body is set to 0. Capture the content"},{"line_number":629,"context_line":"        # length and reset it after clearing the body data. Body can only"},{"line_number":630,"context_line":"        # be set to a binary-type (not TextType or NoneType), so b\u0027\u0027 is used"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_0ce54e37","line":627,"updated":"2014-07-05 04:39:40.000000000","message":"thanks for mentioning this, i was confused as to why we were resetting content length.","commit_id":"e0f57c30ec05f11b6ef658a7a66b8d2864c3c5cc"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"45d98545887ace52441a2d8b7db972790a335b4a","unresolved":false,"context_lines":[{"line_number":624,"context_line":"    if method \u003d\u003d \u0027HEAD\u0027:"},{"line_number":625,"context_line":"        # NOTE(morganfainberg): HEAD requests should return the same status"},{"line_number":626,"context_line":"        # as a GET request and same headers (including content-type and"},{"line_number":627,"context_line":"        # content-length). The webob.Response object automatically sets the"},{"line_number":628,"context_line":"        # content-length to 0 if the body is set to 0. Capture the content"},{"line_number":629,"context_line":"        # length and reset it after clearing the body data. Body can only"},{"line_number":630,"context_line":"        # be set to a binary-type (not TextType or NoneType), so b\u0027\u0027 is used"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f29d1a67","line":627,"in_reply_to":"baada198_0ce54e37","updated":"2014-07-08 02:46:51.000000000","message":"Looking at \nhttps://review.openstack.org/#/c/104321/2/keystone/common/wsgi.py\n\nwe might want to pull forward all headers.","commit_id":"e0f57c30ec05f11b6ef658a7a66b8d2864c3c5cc"}],"keystone/contrib/admin_crud/core.py":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            \u0027/tenants/{tenant_id}/users\u0027,"},{"line_number":74,"context_line":"            controller\u003dtenant_controller,"},{"line_number":75,"context_line":"            action\u003d\u0027get_project_users\u0027,"},{"line_number":76,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # User Operations"},{"line_number":79,"context_line":"        mapper.connect("}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8e6a5d7f","line":76,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need HEAD here?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            \u0027/tenants/{tenant_id}/users\u0027,"},{"line_number":74,"context_line":"            controller\u003dtenant_controller,"},{"line_number":75,"context_line":"            action\u003d\u0027get_project_users\u0027,"},{"line_number":76,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        # User Operations"},{"line_number":79,"context_line":"        mapper.connect("}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_2fba2b6e","line":76,"in_reply_to":"baada198_8e6a5d7f","updated":"2014-07-03 19:45:22.000000000","message":"Can be removed.","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027/users\u0027,"},{"line_number":81,"context_line":"            controller\u003duser_controller,"},{"line_number":82,"context_line":"            action\u003d\u0027get_users\u0027,"},{"line_number":83,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":84,"context_line":"        mapper.connect("},{"line_number":85,"context_line":"            \u0027/users\u0027,"},{"line_number":86,"context_line":"            controller\u003duser_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ee0cb9ef","line":83,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need HEAD here?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027/users\u0027,"},{"line_number":81,"context_line":"            controller\u003duser_controller,"},{"line_number":82,"context_line":"            action\u003d\u0027get_users\u0027,"},{"line_number":83,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":84,"context_line":"        mapper.connect("},{"line_number":85,"context_line":"            \u0027/users\u0027,"},{"line_number":86,"context_line":"            controller\u003duser_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_4fb2ff94","line":83,"in_reply_to":"baada198_ee0cb9ef","updated":"2014-07-03 19:45:22.000000000","message":"Can be removed.","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            \u0027/OS-KSADM/services\u0027,"},{"line_number":181,"context_line":"            controller\u003dservice_controller,"},{"line_number":182,"context_line":"            action\u003d\u0027get_services\u0027,"},{"line_number":183,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":184,"context_line":"        mapper.connect("},{"line_number":185,"context_line":"            \u0027/OS-KSADM/services\u0027,"},{"line_number":186,"context_line":"            controller\u003dservice_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_4efbe5c0","line":183,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need HEAD here?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":180,"context_line":"            \u0027/OS-KSADM/services\u0027,"},{"line_number":181,"context_line":"            controller\u003dservice_controller,"},{"line_number":182,"context_line":"            action\u003d\u0027get_services\u0027,"},{"line_number":183,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":184,"context_line":"        mapper.connect("},{"line_number":185,"context_line":"            \u0027/OS-KSADM/services\u0027,"},{"line_number":186,"context_line":"            controller\u003dservice_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_6fafc32a","line":183,"in_reply_to":"baada198_4efbe5c0","updated":"2014-07-03 19:45:22.000000000","message":"same","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            \u0027/endpoints\u0027,"},{"line_number":203,"context_line":"            controller\u003dendpoint_controller,"},{"line_number":204,"context_line":"            action\u003d\u0027get_endpoints\u0027,"},{"line_number":205,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":206,"context_line":"        mapper.connect("},{"line_number":207,"context_line":"            \u0027/endpoints\u0027,"},{"line_number":208,"context_line":"            controller\u003dendpoint_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8e017db1","line":205,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need HEAD here?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            \u0027/endpoints\u0027,"},{"line_number":203,"context_line":"            controller\u003dendpoint_controller,"},{"line_number":204,"context_line":"            action\u003d\u0027get_endpoints\u0027,"},{"line_number":205,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":206,"context_line":"        mapper.connect("},{"line_number":207,"context_line":"            \u0027/endpoints\u0027,"},{"line_number":208,"context_line":"            controller\u003dendpoint_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ef6af3ec","line":205,"in_reply_to":"baada198_8e017db1","updated":"2014-07-03 19:45:22.000000000","message":"same","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            \u0027/OS-KSADM/roles\u0027,"},{"line_number":225,"context_line":"            controller\u003drole_controller,"},{"line_number":226,"context_line":"            action\u003d\u0027get_roles\u0027,"},{"line_number":227,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":228,"context_line":"        mapper.connect("},{"line_number":229,"context_line":"            \u0027/OS-KSADM/roles/{role_id}\u0027,"},{"line_number":230,"context_line":"            controller\u003drole_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_aefe41ac","line":227,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need HEAD here?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":224,"context_line":"            \u0027/OS-KSADM/roles\u0027,"},{"line_number":225,"context_line":"            controller\u003drole_controller,"},{"line_number":226,"context_line":"            action\u003d\u0027get_roles\u0027,"},{"line_number":227,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":228,"context_line":"        mapper.connect("},{"line_number":229,"context_line":"            \u0027/OS-KSADM/roles/{role_id}\u0027,"},{"line_number":230,"context_line":"            controller\u003drole_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_2f714be0","line":227,"in_reply_to":"baada198_aefe41ac","updated":"2014-07-03 19:45:22.000000000","message":"same","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            \u0027/OS-KSADM/roles/{role_id}\u0027,"},{"line_number":230,"context_line":"            controller\u003drole_controller,"},{"line_number":231,"context_line":"            action\u003d\u0027get_role\u0027,"},{"line_number":232,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":233,"context_line":"        mapper.connect("},{"line_number":234,"context_line":"            \u0027/OS-KSADM/roles/{role_id}\u0027,"},{"line_number":235,"context_line":"            controller\u003drole_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_4f791fc7","line":232,"updated":"2014-07-03 19:45:22.000000000","message":"same","commit_id":"0e58106636b84ed843bd594c559ed88739375174"}],"keystone/contrib/stats/core.py":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027/OS-STATS/stats\u0027,"},{"line_number":81,"context_line":"            controller\u003dstats_controller,"},{"line_number":82,"context_line":"            action\u003d\u0027get_stats\u0027,"},{"line_number":83,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":84,"context_line":"        mapper.connect("},{"line_number":85,"context_line":"            \u0027/OS-STATS/stats\u0027,"},{"line_number":86,"context_line":"            controller\u003dstats_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_6e1fc908","line":83,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need HEAD here?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            \u0027/OS-STATS/stats\u0027,"},{"line_number":81,"context_line":"            controller\u003dstats_controller,"},{"line_number":82,"context_line":"            action\u003d\u0027get_stats\u0027,"},{"line_number":83,"context_line":"            conditions\u003ddict(method\u003d[\u0027GET\u0027, \u0027HEAD\u0027]))"},{"line_number":84,"context_line":"        mapper.connect("},{"line_number":85,"context_line":"            \u0027/OS-STATS/stats\u0027,"},{"line_number":86,"context_line":"            controller\u003dstats_controller,"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8f7fb7aa","line":83,"in_reply_to":"baada198_6e1fc908","updated":"2014-07-03 19:45:22.000000000","message":"same as before","commit_id":"0e58106636b84ed843bd594c559ed88739375174"}],"keystone/tests/test_associate_project_endpoint_extension.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"fb8bfb0420b20569c6b8a5cf6554483e5fa26c3c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                      \u0027/endpoints/%(endpoint_id)s\u0027 % {"},{"line_number":107,"context_line":"                          \u0027project_id\u0027: self.default_domain_project_id,"},{"line_number":108,"context_line":"                          \u0027endpoint_id\u0027: self.endpoint_id},"},{"line_number":109,"context_line":"                      expected_status\u003d204)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_check_endpoint_project_assoc_noproj(self):"},{"line_number":112,"context_line":"        \"\"\"HEAD /OS-EP-FILTER/projects/{project_id}/endpoints/{endpoint_id}"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_842799c9","line":109,"updated":"2014-07-03 20:46:19.000000000","message":"seems like an irrelevant change","commit_id":"b5f297c54a3b5f39a7e7d82108e743492912d320"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"345c7e29559054c9a8be7a4dd034dfe953318733","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                      \u0027/endpoints/%(endpoint_id)s\u0027 % {"},{"line_number":107,"context_line":"                          \u0027project_id\u0027: self.default_domain_project_id,"},{"line_number":108,"context_line":"                          \u0027endpoint_id\u0027: self.endpoint_id},"},{"line_number":109,"context_line":"                      expected_status\u003d204)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_check_endpoint_project_assoc_noproj(self):"},{"line_number":112,"context_line":"        \"\"\"HEAD /OS-EP-FILTER/projects/{project_id}/endpoints/{endpoint_id}"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_b7bccd07","line":109,"in_reply_to":"baada198_842799c9","updated":"2014-07-03 20:50:29.000000000","message":"Huh, how did that slip in? weird.\n\nThis iwll be reverted in the next patch.","commit_id":"b5f297c54a3b5f39a7e7d82108e743492912d320"}],"keystone/tests/test_v3.py":[{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"4cf699505bf3008de601b9178fa8e1df86e5e9c4","unresolved":false,"context_lines":[{"line_number":464,"context_line":"    def head(self, path, **kwargs):"},{"line_number":465,"context_line":"        r \u003d self.v3_request(method\u003d\u0027HEAD\u0027, path\u003dpath, **kwargs)"},{"line_number":466,"context_line":"        if \u0027expected_status\u0027 not in kwargs:"},{"line_number":467,"context_line":"            self.assertResponseStatus(r, 204)"},{"line_number":468,"context_line":"        self.assertEqual(\u0027\u0027, r.body)"},{"line_number":469,"context_line":"        return r"},{"line_number":470,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a961159_db46837a","line":467,"updated":"2014-12-14 04:29:53.000000000","message":"Code 200 should be checked here.","commit_id":"82101a36d348ad0c3de10f455878828f4263ffe2"}],"keystone/tests/test_v3_auth.py":[{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        self.assertEqual(expires, r.result[\u0027token\u0027][\u0027expires_at\u0027])"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def test_check_token(self):"},{"line_number":379,"context_line":"        self.head(\u0027/auth/tokens\u0027, headers\u003dself.headers, expected_status\u003d200)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def test_validate_token(self):"},{"line_number":382,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_0981e7fa","line":379,"updated":"2014-07-03 18:26:13.000000000","message":"Do we need to communicate this change?  if some one is using this api, then it will be breaking ?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        self.assertEqual(expires, r.result[\u0027token\u0027][\u0027expires_at\u0027])"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def test_check_token(self):"},{"line_number":379,"context_line":"        self.head(\u0027/auth/tokens\u0027, headers\u003dself.headers, expected_status\u003d200)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def test_validate_token(self):"},{"line_number":382,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8f56d728","line":379,"in_reply_to":"baada198_0981e7fa","updated":"2014-07-03 19:45:22.000000000","message":"This is the point of the bug and the ML topic to cover if we want this and communicating.\n\nhttps://review.openstack.org/#/c/104026/2/keystone/tests/test_v3.py","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0830bea899bb508e6c264ba54bbf0f1ec772bdd6","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        self.assertEqual(expires, r.result[\u0027token\u0027][\u0027expires_at\u0027])"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def test_check_token(self):"},{"line_number":379,"context_line":"        self.head(\u0027/auth/tokens\u0027, headers\u003dself.headers, expected_status\u003d200)"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def test_validate_token(self):"},{"line_number":382,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003dself.headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_e18e87cf","line":379,"in_reply_to":"baada198_8f56d728","updated":"2014-07-03 20:10:32.000000000","message":"That link was for the comment below about head asserting body was empty.","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f7deb942982d9e407cc8555df81ec3f32db0e6a7","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                    token\u003duser_token)"},{"line_number":518,"context_line":"        # invalid X-Auth-Token and invalid X-Subject-Token (401)"},{"line_number":519,"context_line":"        self.head(\u0027/auth/tokens\u0027, headers\u003dheaders, expected_status\u003d401,"},{"line_number":520,"context_line":"                  token\u003duser_token)"},{"line_number":521,"context_line":"        # invalid X-Auth-Token and invalid X-Subject-Token (401)"},{"line_number":522,"context_line":"        self.delete(\u0027/auth/tokens\u0027, headers\u003dheaders, expected_status\u003d401,"},{"line_number":523,"context_line":"                    token\u003duser_token)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_69a2639a","line":520,"updated":"2014-07-03 18:26:13.000000000","message":"Can we assert the response to make sure that we don\u0027t have response body?","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f8fbce39c10b4e9d2868a5e38c379be2ff1d4416","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                    token\u003duser_token)"},{"line_number":518,"context_line":"        # invalid X-Auth-Token and invalid X-Subject-Token (401)"},{"line_number":519,"context_line":"        self.head(\u0027/auth/tokens\u0027, headers\u003dheaders, expected_status\u003d401,"},{"line_number":520,"context_line":"                  token\u003duser_token)"},{"line_number":521,"context_line":"        # invalid X-Auth-Token and invalid X-Subject-Token (401)"},{"line_number":522,"context_line":"        self.delete(\u0027/auth/tokens\u0027, headers\u003dheaders, expected_status\u003d401,"},{"line_number":523,"context_line":"                    token\u003duser_token)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_cf336f12","line":520,"in_reply_to":"baada198_69a2639a","updated":"2014-07-03 19:45:22.000000000","message":"The self.head() call already does this (part of this changeset).","commit_id":"0e58106636b84ed843bd594c559ed88739375174"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0830bea899bb508e6c264ba54bbf0f1ec772bdd6","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                    token\u003duser_token)"},{"line_number":518,"context_line":"        # invalid X-Auth-Token and invalid X-Subject-Token (401)"},{"line_number":519,"context_line":"        self.head(\u0027/auth/tokens\u0027, headers\u003dheaders, expected_status\u003d401,"},{"line_number":520,"context_line":"                  token\u003duser_token)"},{"line_number":521,"context_line":"        # invalid X-Auth-Token and invalid X-Subject-Token (401)"},{"line_number":522,"context_line":"        self.delete(\u0027/auth/tokens\u0027, headers\u003dheaders, expected_status\u003d401,"},{"line_number":523,"context_line":"                    token\u003duser_token)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_21c4fff3","line":520,"in_reply_to":"baada198_cf336f12","updated":"2014-07-03 20:10:32.000000000","message":"https://review.openstack.org/#/c/104026/2/keystone/tests/test_v3.py","commit_id":"0e58106636b84ed843bd594c559ed88739375174"}]}
