)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9533,"name":"Eiichi Aikawa","email":"aikawa@mxk.nes.nec.co.jp","username":"EiichiAikawa"},"change_message_id":"74250444b626bc7d4858bb7da535ef49d2d398bc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Yuiko Takada \u003ctakada-yuiko@mxn.nes.nec.co.jp\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-26 11:28:44 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add API schema for v3 flavor_manage API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"By defining the API schema, it is possible to separate the validation"},{"line_number":10,"context_line":"code from the API method. The API method can be more simple."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAT3%2F%2F7R4%3D","line":7,"updated":"2013-12-27 01:05:26.000000000","message":"Maybe API name is incorrect.","commit_id":"49e8bc3a25e840d36aec43b3ed12609e7c08793f"}],"nova/api/openstack/compute/plugins/v3/rescue.py":[{"author":{"_account_id":9560,"name":"Lee Li","email":"lilinguo8212@gmail.com","username":"llg8212"},"change_message_id":"f3b9f7c91cda57850fa4dcbcb3f9170248cecae5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.response(202)"},{"line_number":53,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":54,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":55,"context_line":"    @validation.schema(request_body_schema\u003drescue_schema.rescue)"},{"line_number":56,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":57,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2Fs%2Bk%3D","line":55,"updated":"2014-01-03 06:48:56.000000000","message":"Is it necessary to use @validation.schema?\nThe code \"if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]\" has filtered the possible exceptions.","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"88463bc3a27a57d62232cf93375d9d90a7154f91","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.response(202)"},{"line_number":53,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":54,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":55,"context_line":"    @validation.schema(request_body_schema\u003drescue_schema.rescue)"},{"line_number":56,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":57,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F91I%3D","line":55,"in_reply_to":"AAAAT3%2F%2Fs%2Bk%3D","updated":"2014-01-06 05:05:25.000000000","message":"Ah, I understand what you said. I have removed \"body[\u0027rescue\u0027] and \".","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fbe6133f436b1bce79135207fe4c7b40707c602f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.response(202)"},{"line_number":53,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":54,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":55,"context_line":"    @validation.schema(request_body_schema\u003drescue_schema.rescue)"},{"line_number":56,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":57,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F92o%3D","line":55,"in_reply_to":"AAAAT3%2F%2Fs%2Bk%3D","updated":"2014-01-06 04:57:44.000000000","message":"Yes, it is necessary. By using @validation.schema framework, we can validate all APIs centrally.","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"48a77658237c1efe5e428d46d52c33e54619fa5b","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.response(202)"},{"line_number":53,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":54,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":55,"context_line":"    @validation.schema(request_body_schema\u003drescue_schema.rescue)"},{"line_number":56,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":57,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F918%3D","line":55,"in_reply_to":"AAAAUH%2F%2F92I%3D","updated":"2014-01-06 05:01:55.000000000","message":"Done","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9c5d4e50ebc82a5ed4d7d62e05f54bd888399496","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.response(202)"},{"line_number":53,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":54,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":55,"context_line":"    @validation.schema(request_body_schema\u003drescue_schema.rescue)"},{"line_number":56,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":57,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F92I%3D","line":55,"in_reply_to":"AAAAUH%2F%2F92o%3D","updated":"2014-01-06 05:00:20.000000000","message":"I feel we can remove \"body[\u0027rescue\u0027] and \" from line61 because it has been validated with the schema which in your patch.","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c739a30d450b8c58f82827476ddf8625603a687c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F91M%3D","line":61,"updated":"2014-01-06 05:05:07.000000000","message":"I posted the comment for patchset2 at the same time you posted patchset3.\nCould you check my comment on patchset2 again?","commit_id":"2b871dad0b7cf149ec425c10a57f58638f10bc30"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"56c3998c986b9ed397d41eab5ce799fc0b7f03f8","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9tI%3D","line":61,"in_reply_to":"AAAAUH%2F%2F91M%3D","updated":"2014-01-06 06:00:08.000000000","message":"there are cases when rescue is passed as None, so \"body[\u0027rescue\u0027] and\" is necessary.","commit_id":"2b871dad0b7cf149ec425c10a57f58638f10bc30"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"c0caa7e40be5ae2424721a92715f10b889509fde","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F4q8%3D","line":61,"in_reply_to":"AAAAUH%2F%2F9fU%3D","updated":"2014-01-07 08:40:35.000000000","message":"Thank you, I misunderstood.\nDone.","commit_id":"2b871dad0b7cf149ec425c10a57f58638f10bc30"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"dac5422ae31b48bb1ce5ec344cc7f0aea23784c1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9fU%3D","line":61,"in_reply_to":"AAAAUH%2F%2F9tI%3D","updated":"2014-01-06 07:04:39.000000000","message":"The extension methods are selected if body includes keyword like \u0027rescue\u0027, \u0027unrescue\u0027, etc.\nso body[\u0027rescue\u0027] must exist if this method is called.","commit_id":"2b871dad0b7cf149ec425c10a57f58638f10bc30"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"376fcb82051aa2ad08d67768ac762d96126c62f5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F9do%3D","line":61,"updated":"2014-01-06 07:16:20.000000000","message":"We can remove \"body[\u0027rescue\u0027] and\" from this line because of \u0027required\u0027: [\u0027rescue\u0027], in the schema.","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"98fa90b7a4d196f9f25d6c927b83d324e257fd95","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F0cM%3D","line":61,"in_reply_to":"AAAAUH%2F%2F33w%3D","updated":"2014-01-08 04:06:09.000000000","message":"Hi Lee,\n\nThe value of this patch is smaller than the other bp/nova-api-validation-fw patches as you said. However I think this patch is worth because of \"\u0027additionalProperties\u0027: False,\".\n\nAll bp/nova-api-validation-fw patches contains \"\u0027additionalProperties\u0027: False,\" for preventing extra API parameters which are not defined in schema. That would make v3 API behavior consistent.\n\nTo verify this behavior, this patch contains test_rescue_with_invalid_property also.","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":9560,"name":"Lee Li","email":"lilinguo8212@gmail.com","username":"llg8212"},"change_message_id":"8fcd35502ec8daf2d406ec37e8c7ee52c3bebee7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F33w%3D","line":61,"in_reply_to":"AAAAUH%2F%2F4e0%3D","updated":"2014-01-07 11:36:24.000000000","message":"Hi, Yuiko Takada. Like you said, I think here is not suitable for validation.schema. What\u0027s your opinion?","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"52743f6ba17a54fa369d642a8a61ab1f6b286ce1","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F4e0%3D","line":61,"in_reply_to":"AAAAUH%2F%2F4og%3D","updated":"2014-01-07 09:18:41.000000000","message":"Hi, Ken\u0027ichi, Lee.\nI noticed \"body[\u0027rescue\u0027] and\" should not be removed because body as dict(rescue\u003dNone) or dict(rescue\u003ddict()) should be allowed as schema, but should not pass this \"if~\".\nPlease see new test codes \"test_rescue_with_none\" and \"test_rescue_with_empty_dict\".","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3f3e97696fd299de5d07ef462d8d0f43f632a1a2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F4og%3D","line":61,"in_reply_to":"AAAAUH%2F%2F8fQ%3D","updated":"2014-01-07 08:40:09.000000000","message":"Hi, Ken\u0027ichi, Lee. Thank you for your advice.\nDone","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":9560,"name":"Lee Li","email":"lilinguo8212@gmail.com","username":"llg8212"},"change_message_id":"3ddc444de82b04d6cef3659f486b2838a3e2780b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":59,"context_line":"        authorize(context)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if body[\u0027rescue\u0027] and \u0027admin_password\u0027 in body[\u0027rescue\u0027]:"},{"line_number":62,"context_line":"            password \u003d body[\u0027rescue\u0027][\u0027admin_password\u0027]"},{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            password \u003d utils.generate_password()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F8fQ%3D","line":61,"in_reply_to":"AAAAUH%2F%2F9do%3D","updated":"2014-01-06 12:24:35.000000000","message":"Yes, I agree.","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"8821aa9dd516c22b518810879111f93d896ad463","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.response(202)"},{"line_number":53,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":54,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":55,"context_line":"    @validation.schema(request_body_schema\u003drescue_schema.rescue)"},{"line_number":56,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":57,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FgQg%3D","line":55,"updated":"2014-01-13 08:45:25.000000000","message":"The same point as https://review.openstack.org/#/c/61972/ .","commit_id":"11624a0a494f852835650dfed253fcede7531a98"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"ff4d1dc4deb7e0faf6dfbb9cd1a0227efce02720","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    @wsgi.response(202)"},{"line_number":53,"context_line":"    @extensions.expected_errors((400, 404, 409))"},{"line_number":54,"context_line":"    @wsgi.action(\u0027rescue\u0027)"},{"line_number":55,"context_line":"    @validation.schema(request_body_schema\u003drescue_schema.rescue)"},{"line_number":56,"context_line":"    def _rescue(self, req, id, body):"},{"line_number":57,"context_line":"        \"\"\"Rescue an instance.\"\"\""},{"line_number":58,"context_line":"        context \u003d req.environ[\"nova.context\"]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FURM%3D","line":55,"in_reply_to":"AAAAUH%2F%2FgQg%3D","updated":"2014-01-15 05:32:13.000000000","message":"Done","commit_id":"11624a0a494f852835650dfed253fcede7531a98"}],"nova/api/openstack/compute/schemas/v3/rescue_schema.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ed749520bad25dbc5760eb8ce4247727f8529e0c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":13,"context_line":"    \u0027properties\u0027: {"},{"line_number":14,"context_line":"        \u0027rescue\u0027: {"},{"line_number":15,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":16,"context_line":"            \u0027properties\u0027: {"},{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F35w%3D","line":15,"updated":"2013-12-29 01:04:36.000000000","message":"null seems unnecessary because admin_password is not required.","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fbe6133f436b1bce79135207fe4c7b40707c602f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":13,"context_line":"    \u0027properties\u0027: {"},{"line_number":14,"context_line":"        \u0027rescue\u0027: {"},{"line_number":15,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":16,"context_line":"            \u0027properties\u0027: {"},{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F93E%3D","line":15,"in_reply_to":"AAAAT3%2F%2F35w%3D","updated":"2014-01-06 04:57:44.000000000","message":"Done","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6f6e3919cd9f605b1480843d937d39b369b4d9bb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":19,"context_line":"                },"},{"line_number":20,"context_line":"            },"},{"line_number":21,"context_line":"        }"},{"line_number":22,"context_line":"    }"},{"line_number":23,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F4vM%3D","line":20,"updated":"2013-12-28 00:36:29.000000000","message":"we should use \"additionalProperties: False\" for more strict check.","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ed749520bad25dbc5760eb8ce4247727f8529e0c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":19,"context_line":"                },"},{"line_number":20,"context_line":"            },"},{"line_number":21,"context_line":"        }"},{"line_number":22,"context_line":"    }"},{"line_number":23,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F35s%3D","line":20,"in_reply_to":"AAAAT3%2F%2F4vM%3D","updated":"2013-12-29 01:04:36.000000000","message":"Agreed, nice point.","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fbe6133f436b1bce79135207fe4c7b40707c602f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":19,"context_line":"                },"},{"line_number":20,"context_line":"            },"},{"line_number":21,"context_line":"        }"},{"line_number":22,"context_line":"    }"},{"line_number":23,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F93A%3D","line":20,"in_reply_to":"AAAAT3%2F%2F4vM%3D","updated":"2014-01-06 04:57:44.000000000","message":"Done","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"6f6e3919cd9f605b1480843d937d39b369b4d9bb","unresolved":false,"context_lines":[{"line_number":19,"context_line":"                },"},{"line_number":20,"context_line":"            },"},{"line_number":21,"context_line":"        }"},{"line_number":22,"context_line":"    }"},{"line_number":23,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAT3%2F%2F4vI%3D","line":22,"updated":"2013-12-28 00:36:29.000000000","message":"ditto","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"fbe6133f436b1bce79135207fe4c7b40707c602f","unresolved":false,"context_lines":[{"line_number":19,"context_line":"                },"},{"line_number":20,"context_line":"            },"},{"line_number":21,"context_line":"        }"},{"line_number":22,"context_line":"    }"},{"line_number":23,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2F928%3D","line":22,"in_reply_to":"AAAAT3%2F%2F4vI%3D","updated":"2014-01-06 04:57:44.000000000","message":"Done","commit_id":"8ff4f51d13e7f3becc1c80e1d901ce21618d3365"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c739a30d450b8c58f82827476ddf8625603a687c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":13,"context_line":"    \u0027properties\u0027: {"},{"line_number":14,"context_line":"        \u0027rescue\u0027: {"},{"line_number":15,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":16,"context_line":"            \u0027properties\u0027: {"},{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F91g%3D","line":15,"updated":"2014-01-06 05:05:07.000000000","message":"You removed a \u0027null\u0027 from wrong place.","commit_id":"2b871dad0b7cf149ec425c10a57f58638f10bc30"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"56c3998c986b9ed397d41eab5ce799fc0b7f03f8","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":13,"context_line":"    \u0027properties\u0027: {"},{"line_number":14,"context_line":"        \u0027rescue\u0027: {"},{"line_number":15,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":16,"context_line":"            \u0027properties\u0027: {"},{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9tc%3D","line":15,"in_reply_to":"AAAAUH%2F%2F91g%3D","updated":"2014-01-06 06:00:08.000000000","message":"Both rescue and admin_password should be allowed as None.","commit_id":"2b871dad0b7cf149ec425c10a57f58638f10bc30"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ab3328cadda48af4d14f3aa0b8c3de21f5f3ef3d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":13,"context_line":"    \u0027properties\u0027: {"},{"line_number":14,"context_line":"        \u0027rescue\u0027: {"},{"line_number":15,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":16,"context_line":"            \u0027properties\u0027: {"},{"line_number":17,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":18,"context_line":"                    \u0027type\u0027: [\u0027string\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUH%2F%2F9eY%3D","line":15,"in_reply_to":"AAAAUH%2F%2F9tc%3D","updated":"2014-01-06 07:06:02.000000000","message":"Thanks for your explanation, I got it.\nSorry for my wrong point.","commit_id":"2b871dad0b7cf149ec425c10a57f58638f10bc30"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"79a9fa72d69d2905bd1cf6d7bd6fa0df5780c431","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    a copy of the License at"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2F0dw%3D","line":1,"updated":"2014-01-08 03:57:28.000000000","message":"The following header is necessary on current line1:\n\n # Copyright 2014 NEC Corporation.\n # All Rights Reserved.\n #\n #    Licensed under the Apache License, Version 2.0 (the \"License\"); you may\n #    not use this file except in compliance with the License. You may obtain","commit_id":"9f2a70542e493aef0a563bdf8e0a3b2da495d74a"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"50a8b282a91824cbbcae0f1a23cc599f7362efe5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    a copy of the License at"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAUH%2F%2F0ak%3D","line":1,"in_reply_to":"AAAAUH%2F%2F0dw%3D","updated":"2014-01-08 04:15:30.000000000","message":"Done","commit_id":"9f2a70542e493aef0a563bdf8e0a3b2da495d74a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"bd4be3aafe1d65bc8ca3540323ff9984432fe4cd","unresolved":false,"context_lines":[{"line_number":20,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":21,"context_line":"            \u0027properties\u0027: {"},{"line_number":22,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":23,"context_line":"                    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"                },"},{"line_number":25,"context_line":"            },"},{"line_number":26,"context_line":"            \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2Fab8%3D","line":23,"updated":"2014-01-14 00:42:58.000000000","message":"we can use parameter_types.admin_password here.","commit_id":"11624a0a494f852835650dfed253fcede7531a98"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"ff4d1dc4deb7e0faf6dfbb9cd1a0227efce02720","unresolved":false,"context_lines":[{"line_number":20,"context_line":"            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],"},{"line_number":21,"context_line":"            \u0027properties\u0027: {"},{"line_number":22,"context_line":"                \u0027admin_password\u0027: {"},{"line_number":23,"context_line":"                    \u0027type\u0027: [\u0027string\u0027, \u0027null\u0027]"},{"line_number":24,"context_line":"                },"},{"line_number":25,"context_line":"            },"},{"line_number":26,"context_line":"            \u0027additionalProperties\u0027: False,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2FUOw%3D","line":23,"in_reply_to":"AAAAUH%2F%2Fab8%3D","updated":"2014-01-15 05:32:13.000000000","message":"In rescue API, parameter \u0027admin_password\u0027 is allowed as None. parameter_types.admin_password is \u0027type\u0027: \u0027string\u0027, so I think this shouldn\u0027t be modified. How do you think?","commit_id":"11624a0a494f852835650dfed253fcede7531a98"}],"nova/tests/api/openstack/compute/plugins/v3/test_rescue.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"376fcb82051aa2ad08d67768ac762d96126c62f5","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":140,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_rescue_without_rescue(self):"},{"line_number":143,"context_line":"        body \u003d {\u0027foo\u0027: None}"},{"line_number":144,"context_line":"        req \u003d webob.Request.blank(\u0027/v3/servers/test_inst/action\u0027)"},{"line_number":145,"context_line":"        req.method \u003d \"POST\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F9dA%3D","line":142,"updated":"2014-01-06 07:16:20.000000000","message":"This test cause is not necessary because rescue method must be called only if body includes \u0027rescue\u0027.","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3f3e97696fd299de5d07ef462d8d0f43f632a1a2","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":140,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def test_rescue_without_rescue(self):"},{"line_number":143,"context_line":"        body \u003d {\u0027foo\u0027: None}"},{"line_number":144,"context_line":"        req \u003d webob.Request.blank(\u0027/v3/servers/test_inst/action\u0027)"},{"line_number":145,"context_line":"        req.method \u003d \"POST\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F4qE%3D","line":142,"in_reply_to":"AAAAUH%2F%2F9dA%3D","updated":"2014-01-07 08:40:09.000000000","message":"Thank you for your advice.\nDone.","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":9560,"name":"Lee Li","email":"lilinguo8212@gmail.com","username":"llg8212"},"change_message_id":"3ddc444de82b04d6cef3659f486b2838a3e2780b","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":150,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def test_rescue_with_invalid_property(self):"},{"line_number":153,"context_line":"        body \u003d {\"rescue\": {\"test\": \"test\"}}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F8ew%3D","line":150,"updated":"2014-01-06 12:24:35.000000000","message":"Does it return 400?\r\nIt should be a exception likes:\r\nself.assertRaises(exception.ValidationError","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"3f3e97696fd299de5d07ef462d8d0f43f632a1a2","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":150,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def test_rescue_with_invalid_property(self):"},{"line_number":153,"context_line":"        body \u003d {\"rescue\": {\"test\": \"test\"}}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F4oo%3D","line":150,"in_reply_to":"AAAAUH%2F%2F5T0%3D","updated":"2014-01-07 08:40:09.000000000","message":"Hi, Lee, Thank you for the question.\nThe answer is as Ken\u0027ichi said. Thank you, Ken\u0027ichi.","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0408a7c0e3100588fbcb0054b2a2afbc12b5d941","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":150,"context_line":"        self.assertEqual(resp.status_int, 400)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def test_rescue_with_invalid_property(self):"},{"line_number":153,"context_line":"        body \u003d {\"rescue\": {\"test\": \"test\"}}"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2F5T0%3D","line":150,"in_reply_to":"AAAAUH%2F%2F8ew%3D","updated":"2014-01-07 04:35:59.000000000","message":"Hi Lee,\n\nCurrent assertEqual is right, because this test case uses get_response(). If calling rescue() method directly, exception.ValidationError happens as you said.\n\nin addition, gate-nova-python26/27 of Jenkins don\u0027t fail.","commit_id":"62f9ca906b3ca5e67c03559659cb4f2617438db5"},{"author":{"_account_id":9046,"name":"Maithem","email":"munshedm@vmware.com","username":"Maithem"},"change_message_id":"ac99df1b04c89083fd5fffc70c4607f15f6d20c0","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":82,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def test_rescue_with_empty_dict(self):"},{"line_number":85,"context_line":"        body \u003d dict(rescue\u003ddict())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FJVM%3D","line":82,"updated":"2014-01-17 01:04:32.000000000","message":"the order of parameters should be (expected, observed) \nhttps://bugs.launchpad.net/nova/+bug/1260134\nPlease address this throughout the patch,","commit_id":"183f733bb92031743834cb0c1d65aebc027b7fc7"},{"author":{"_account_id":7882,"name":"Yuiko Takada Mori","email":"yuiko-mori@nec.com","username":"YuikoTakada"},"change_message_id":"6fa9b075b500c341ae67fbe9e12c6d6e53cb6ffe","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":82,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def test_rescue_with_empty_dict(self):"},{"line_number":85,"context_line":"        body \u003d dict(rescue\u003ddict())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FInY%3D","line":82,"in_reply_to":"AAAAUH%2F%2FJA8%3D","updated":"2014-01-17 04:41:27.000000000","message":"Done","commit_id":"183f733bb92031743834cb0c1d65aebc027b7fc7"},{"author":{"_account_id":9560,"name":"Lee Li","email":"lilinguo8212@gmail.com","username":"llg8212"},"change_message_id":"00bb37f54acd162b0b04ef947f8c4f40b11c7aea","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        resp \u003d req.get_response(self.app)"},{"line_number":82,"context_line":"        self.assertEqual(resp.status_int, 202)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def test_rescue_with_empty_dict(self):"},{"line_number":85,"context_line":"        body \u003d dict(rescue\u003ddict())"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAUH%2F%2FJA8%3D","line":82,"in_reply_to":"AAAAUH%2F%2FJVM%3D","updated":"2014-01-17 02:07:19.000000000","message":"like https://review.openstack.org/#/c/64241/","commit_id":"183f733bb92031743834cb0c1d65aebc027b7fc7"}]}
