)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7ce096a7e5d7e7895b998ff2a4d0584cf3970423","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add query parameters white list for server list/detail"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch enables a white list for query parameter."},{"line_number":10,"context_line":"The parameters, which are out of white list, will be ignored."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The sort_key still accepts open value. The later patch will add white"},{"line_number":13,"context_line":"list to it."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"ba5201f7_35d13258","line":10,"range":{"start_line":10,"start_character":45,"end_line":10,"end_character":61},"updated":"2017-01-11 16:19:10.000000000","message":"not true given additionalProperties \u003d True, right?","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b19f2f0bdecdc1aad385406ed54b9b61af4dab54","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Add query parameters white list for server list/detail"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch enables a white list for query parameter."},{"line_number":10,"context_line":"The parameters, which are out of white list, will be ignored."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The sort_key still accepts open value. The later patch will add white"},{"line_number":13,"context_line":"list to it."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":38,"id":"ba5201f7_55a796bc","line":10,"range":{"start_line":10,"start_character":45,"end_line":10,"end_character":61},"in_reply_to":"ba5201f7_35d13258","updated":"2017-01-11 16:21:15.000000000","message":"Oh nevermind https://review.openstack.org/#/c/408571/38/nova/api/validation/__init__.py@135","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"}],"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"114731f5dc23f956408e39e75ad49f48bae4c203","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                       \u0027format\u0027: \u0027date-time\u0027}),"},{"line_number":253,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":254,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":255,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":256,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":257,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":258,"context_line":"        # The alias of tenant_id. It should be removed in the future."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_a324f60c","line":255,"updated":"2016-12-12 12:32:58.000000000","message":"ip6 is only valid after like 2.5, right?","commit_id":"56e09a6f47ebe3ec9889274cf01ee1b5f6c1a471"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cde209b720d71d7733cd0617cabe12ef2fda34f1","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                                       \u0027format\u0027: \u0027date-time\u0027}),"},{"line_number":253,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":254,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":255,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":256,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":257,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":258,"context_line":"        # The alias of tenant_id. It should be removed in the future."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_43b3229a","line":255,"in_reply_to":"3a71b18c_a324f60c","updated":"2016-12-12 12:37:56.000000000","message":"It is valid for admin user before 2.5. It only valid for non-admin user after 2.5.","commit_id":"56e09a6f47ebe3ec9889274cf01ee1b5f6c1a471"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7f3b272a255773da6d6279e1629e737983d89d6","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        # The alias of name. It should be removed in the future."},{"line_number":266,"context_line":"        \u0027display_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":267,"context_line":"        \u0027description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":268,"context_line":"        \u0027display_description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":269,"context_line":"        \u0027locked_by\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":270,"context_line":"        \u0027uuid\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_4bdb4f4f","line":268,"updated":"2016-12-28 07:23:53.000000000","message":"It is worth to do a test, if I input invalid regex for this filter, is there any error raise out?","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c0f1ad8964edf4867beb6dc781d26bd6cfe99dd","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        # The alias of name. It should be removed in the future."},{"line_number":266,"context_line":"        \u0027display_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":267,"context_line":"        \u0027description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":268,"context_line":"        \u0027display_description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":269,"context_line":"        \u0027locked_by\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":270,"context_line":"        \u0027uuid\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_2b51ab36","line":268,"in_reply_to":"da4df55a_4bdb4f4f","updated":"2016-12-28 07:38:09.000000000","message":"Done","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7f3b272a255773da6d6279e1629e737983d89d6","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        \u0027uuid\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_6b7574f8","line":273,"updated":"2016-12-28 07:23:53.000000000","message":"We only can use multi_params({\u0027type\u0027: \u0027string\u0027}) at here. If we strict the validation, that will break the API user client.","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c0f1ad8964edf4867beb6dc781d26bd6cfe99dd","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        \u0027uuid\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_6bb9f378","line":273,"in_reply_to":"da4df55a_6b7574f8","updated":"2016-12-28 07:38:09.000000000","message":"Done","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7f3b272a255773da6d6279e1629e737983d89d6","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_8b72980f","line":274,"updated":"2016-12-28 07:23:53.000000000","message":"ditto","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c0f1ad8964edf4867beb6dc781d26bd6cfe99dd","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_8bb29792","line":274,"in_reply_to":"da4df55a_8b72980f","updated":"2016-12-28 07:38:09.000000000","message":"Done","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7f3b272a255773da6d6279e1629e737983d89d6","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_ab611c3b","line":275,"updated":"2016-12-28 07:23:53.000000000","message":"ditto","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c0f1ad8964edf4867beb6dc781d26bd6cfe99dd","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_cba81f23","line":275,"in_reply_to":"da4df55a_ab611c3b","updated":"2016-12-28 07:38:09.000000000","message":"Done","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7f3b272a255773da6d6279e1629e737983d89d6","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_cb666050","line":276,"updated":"2016-12-28 07:23:53.000000000","message":"ditto","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c0f1ad8964edf4867beb6dc781d26bd6cfe99dd","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: parameter_types.accessIPv4,"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: parameter_types.accessIPv6,"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: parameter_types.disk_config,"},{"line_number":276,"context_line":"        \u0027progress\u0027: parameter_types.non_negative_integer,"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_eba5e346","line":276,"in_reply_to":"da4df55a_cb666050","updated":"2016-12-28 07:38:09.000000000","message":"Done","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7f3b272a255773da6d6279e1629e737983d89d6","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":290,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_8bed38b9","line":287,"updated":"2016-12-28 07:23:53.000000000","message":"We have no \u0027created_at\u0027, but I think we should have \u0027updated_at\u0027 which I forget in the spec. Due to there is field \u0027updated\u0027 in the API response.","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d46ba02393eca4292b3c3801ba75147af0c2bf69","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":290,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_0d3ea927","line":287,"in_reply_to":"da4df55a_4e97dd39","updated":"2016-12-29 01:32:08.000000000","message":"ah, yea, thanks. We also have change-since for updated_at. I missed that.","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c0f1ad8964edf4867beb6dc781d26bd6cfe99dd","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":290,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_0b4ce79c","line":287,"in_reply_to":"da4df55a_8bed38b9","updated":"2016-12-28 07:38:09.000000000","message":"Ah, then I think I discovered some error then, but is in sort.","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0191a6f29f3b602de2e716c59f8bb8d3283141c5","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":290,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_4e97dd39","line":287,"in_reply_to":"da4df55a_8bed38b9","updated":"2016-12-28 08:07:00.000000000","message":"we also have created in the detailed response","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"de9619995d979fb87cb7a8cf4542443b77e66d19","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":290,"context_line":"}"},{"line_number":291,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_cb7f3fa9","line":288,"updated":"2016-12-28 07:37:45.000000000","message":"We also said return 400 for keys which returns 500. Like the joined-table and internal attributes. We can try to use patternProperties http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.17","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f114305b07080167e2a97baf7513666e60a0f523","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        # from DB index."},{"line_number":264,"context_line":"        \u0027name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":265,"context_line":"        # The alias of name. It should be removed in the future."},{"line_number":266,"context_line":"        \u0027display_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":267,"context_line":"        \u0027description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":268,"context_line":"        \u0027display_description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":269,"context_line":"        \u0027locked_by\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_3e95b5dd","line":266,"range":{"start_line":266,"start_character":57,"end_line":266,"end_character":75},"updated":"2017-01-04 07:43:23.000000000","message":"I find this bug https://bugs.launchpad.net/nova/+bug/1653899\n\nWe can fix it with schema. Would you mind to add \"\u0027format\u0027: \u0027regex\u0027\" for all the pattern match parameters in a separated patch?","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0212361827749afcd9778ebfbb2b3dbf2454a101","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        # from DB index."},{"line_number":264,"context_line":"        \u0027name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":265,"context_line":"        # The alias of name. It should be removed in the future."},{"line_number":266,"context_line":"        \u0027display_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":267,"context_line":"        \u0027description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":268,"context_line":"        \u0027display_description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":269,"context_line":"        \u0027locked_by\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_f978a7c6","line":266,"range":{"start_line":266,"start_character":57,"end_line":266,"end_character":75},"in_reply_to":"ba5201f7_3e95b5dd","updated":"2017-01-04 08:01:34.000000000","message":"Sure, I will do it","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":245,"context_line":"        # The alias of image. It should be removed in the future."},{"line_number":246,"context_line":"        \u0027image_ref\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":247,"context_line":"        \u0027image\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":248,"context_line":"        \u0027kernel_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":249,"context_line":"        \u0027ramdisk_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":250,"context_line":"        \u0027hostname\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_0b4b43b1","line":247,"updated":"2017-01-04 15:33:11.000000000","message":"I think these are all uuids?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"673ace4232a30591cb58bafb709acbdc9ee0c347","unresolved":false,"context_lines":[{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":245,"context_line":"        # The alias of image. It should be removed in the future."},{"line_number":246,"context_line":"        \u0027image_ref\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":247,"context_line":"        \u0027image\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":248,"context_line":"        \u0027kernel_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":249,"context_line":"        \u0027ramdisk_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":250,"context_line":"        \u0027hostname\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_58f8a349","line":247,"in_reply_to":"ba5201f7_0b4b43b1","updated":"2017-01-05 04:53:40.000000000","message":"If we set the format as uuids, that means we strict the validation. we should strict the validation with microversion in the future","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        \u0027locked_by\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":270,"context_line":"        \u0027uuid\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_0b7423fb","line":272,"updated":"2017-01-04 15:33:11.000000000","message":"isn\u0027t that a boolean?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a434bbaa19f3b6a8090c251d56b48befd5e6fce6","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        \u0027locked_by\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":270,"context_line":"        \u0027uuid\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_c047551b","line":272,"in_reply_to":"ba5201f7_0b7423fb","updated":"2017-01-04 15:37:48.000000000","message":"I should have been clearer, I am fine these all being string to start with, assuming that doesn\u0027t break when they were boolean before.\n\nBut something tells me this breaks config_drive\u003dTrue, where it used to work before. But I could be wrong?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"673ace4232a30591cb58bafb709acbdc9ee0c347","unresolved":false,"context_lines":[{"line_number":269,"context_line":"        \u0027locked_by\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":270,"context_line":"        \u0027uuid\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":271,"context_line":"        \u0027root_device_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":272,"context_line":"        \u0027config_drive\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_7865671c","line":272,"in_reply_to":"ba5201f7_c047551b","updated":"2017-01-05 04:53:40.000000000","message":"Query parameters passed from URL. So it is always string.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_b02622cc","line":276,"updated":"2017-01-04 15:33:11.000000000","message":"is that meant to be an int? I guess string is fine, just wondering how that works today.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a434bbaa19f3b6a8090c251d56b48befd5e6fce6","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_e06d3999","line":276,"in_reply_to":"ba5201f7_b02622cc","updated":"2017-01-04 15:37:48.000000000","message":"as above, progress\u003d80 maybe works right now? not sure. This one is an integer in the DB:\nhttps://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L325\n\nLeaving it as a string might give us a different API behavior depending on the DB backend? Maybe broken on postgres? I am not sure. But worth a check.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"673ace4232a30591cb58bafb709acbdc9ee0c347","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        \u0027accessIPv4\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_9b2da597","line":276,"in_reply_to":"ba5201f7_e06d3999","updated":"2017-01-05 04:53:40.000000000","message":"it works for mysql \nselect * from instances where progress \u003d \"1\"\n\nyea, it is worth to check postgres. \n\n@Kevin, would you like to check that?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":280,"context_line":"        \u0027deleted\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":281,"context_line":"        \u0027status\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_0b5fc30e","line":278,"range":{"start_line":277,"start_character":9,"end_line":278,"end_character":53},"updated":"2017-01-04 15:33:11.000000000","message":"Should we not treat these a bit like the pagination params on line293? Well I guess only sort_dir.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"08f48a90c6fb3bdbf989eaaebe62145c07840169","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":280,"context_line":"        \u0027deleted\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":281,"context_line":"        \u0027status\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_013918d7","line":278,"range":{"start_line":277,"start_character":9,"end_line":278,"end_character":53},"in_reply_to":"ba5201f7_0b5fc30e","updated":"2017-01-06 07:22:22.000000000","message":"we will handle it again in the follow-up patch, so how about do it later?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"673ace4232a30591cb58bafb709acbdc9ee0c347","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \u0027accessIPv6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":275,"context_line":"        \u0027auto_disk_config\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":280,"context_line":"        \u0027deleted\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":281,"context_line":"        \u0027status\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_5b5edd12","line":278,"range":{"start_line":277,"start_character":9,"end_line":278,"end_character":53},"in_reply_to":"ba5201f7_0b5fc30e","updated":"2017-01-05 04:53:40.000000000","message":"yea, it could be. But leave to Kevin to ensure that.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a434bbaa19f3b6a8090c251d56b48befd5e6fce6","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":280,"context_line":"        \u0027deleted\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":281,"context_line":"        \u0027status\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":282,"context_line":"        \u0027changes-since\u0027: multi_params({\u0027type\u0027: \u0027string\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_60b5c9ec","line":279,"updated":"2017-01-04 15:37:48.000000000","message":"Does this reject a boolean?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"673ace4232a30591cb58bafb709acbdc9ee0c347","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":280,"context_line":"        \u0027deleted\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":281,"context_line":"        \u0027status\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":282,"context_line":"        \u0027changes-since\u0027: multi_params({\u0027type\u0027: \u0027string\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_bba349ff","line":279,"in_reply_to":"ba5201f7_60b5c9ec","updated":"2017-01-05 04:53:40.000000000","message":"Hope Kevin can ensure that.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"64d3b6fc16945ae3008372e7bf0ff0d73a201a34","unresolved":false,"context_lines":[{"line_number":276,"context_line":"        \u0027progress\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":277,"context_line":"        \u0027sort_key\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":278,"context_line":"        \u0027sort_dir\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":279,"context_line":"        \u0027all_tenants\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":280,"context_line":"        \u0027deleted\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":281,"context_line":"        \u0027status\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":282,"context_line":"        \u0027changes-since\u0027: multi_params({\u0027type\u0027: \u0027string\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_8c19edd9","line":279,"in_reply_to":"ba5201f7_bba349ff","updated":"2017-01-05 07:29:09.000000000","message":"I tested and it rejects boolean","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"2c6e9174f3da5cd0ea98f1a90a3de4cc679ae4fa","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                                       \u0027format\u0027: \u0027date-time\u0027}),"},{"line_number":284,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_e582ae93","line":286,"updated":"2017-01-04 14:13:29.000000000","message":"this isn\u0027t in the initial microversion IIRC","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"673ace4232a30591cb58bafb709acbdc9ee0c347","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                                       \u0027format\u0027: \u0027date-time\u0027}),"},{"line_number":284,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_db71eda9","line":286,"in_reply_to":"ba5201f7_90459e18","updated":"2017-01-05 04:53:40.000000000","message":"ip6 is enabled for admin user in the initial microversion. In later microversion, it is open for non-admin user. To distinguish admin filters or non-admin filters, that is done in the python code. https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/servers.py#L219","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3563da8c109dc79a406954b340c39d6f070c4884","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                                       \u0027format\u0027: \u0027date-time\u0027}),"},{"line_number":284,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":285,"context_line":"        \u0027ip\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_90459e18","line":286,"in_reply_to":"ba5201f7_e582ae93","updated":"2017-01-04 14:35:02.000000000","message":"Given we separated out tags, feels like we should separate out ip6.\n\nAlthough in reality it makes no difference to the current implementation, I guess.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2be9e5ae2207923991545c588277ad805e1b6143","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":290,"context_line":"}"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"query_params_v21[\u0027properties\u0027].update("}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5201f7_decd2d67","line":289,"updated":"2017-01-06 06:54:17.000000000","message":"To implement this https://review.openstack.org/#/c/393205/21/specs/ocata/approved/add-whitelist-for-server-list-filter-sort-parameters.rst@45\n\nWe should let the joined-table an internal-attributes pass the schema, then raise 400 for them in python.\n\nFor joined-table, we just can the same thing in your sort whitelist patch. Put them into variable, and in the list of properties.\n\nFor internal-attributes, we can use patternProperites.\n\n\u0027patternProperties\u0027: {\" ^_\": multi_params({\"type\": \"string\"})}\n\nAnd then, we need to ensure the parameters match the \u0027patternProperties\u0027 won\u0027t be stripped. So we need some code at https://github.com/openstack/nova/blob/master/nova/api/validation/__init__.py#L113","commit_id":"7f038bea34ff20674b6fe8a1048876bc05b34e49"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9a252cb33073fa19332898e58e6ad7188aa98456","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":239,"context_line":"    \u0027properties\u0027: {"},{"line_number":240,"context_line":"        \u0027user_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":241,"context_line":"        # The alias of tenant_id. It should be removed in the future."},{"line_number":242,"context_line":"        \u0027project_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":243,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_1a7a4188","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":69},"updated":"2017-01-07 00:40:24.000000000","message":"I feel it is difficult to remove it because of backwards compatibility.\nOr how about adding \"with microversion bump\" or something on the above comment?","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d151295474fafdb7346491512fbe3953608e735","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":239,"context_line":"    \u0027properties\u0027: {"},{"line_number":240,"context_line":"        \u0027user_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":241,"context_line":"        # The alias of tenant_id. It should be removed in the future."},{"line_number":242,"context_line":"        \u0027project_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":243,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_7d7fc714","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":69},"in_reply_to":"ba5201f7_1a7a4188","updated":"2017-01-07 01:38:05.000000000","message":"yea, we should remove it with microversion.","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"74e5ce3e60e914cbcded56662a6eea6b659e9dff","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":239,"context_line":"    \u0027properties\u0027: {"},{"line_number":240,"context_line":"        \u0027user_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":241,"context_line":"        # The alias of tenant_id. It should be removed in the future."},{"line_number":242,"context_line":"        \u0027project_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":243,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_4a3dd0db","line":241,"range":{"start_line":241,"start_character":8,"end_line":241,"end_character":69},"in_reply_to":"ba5201f7_7d7fc714","updated":"2017-01-08 00:32:13.000000000","message":"Done","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9a252cb33073fa19332898e58e6ad7188aa98456","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        \u0027project_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":243,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":245,"context_line":"        # The alias of image. It should be removed in the future."},{"line_number":246,"context_line":"        \u0027image_ref\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":247,"context_line":"        \u0027image\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":248,"context_line":"        \u0027kernel_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_5a7049a4","line":245,"range":{"start_line":245,"start_character":8,"end_line":245,"end_character":65},"updated":"2017-01-07 00:40:24.000000000","message":"ditto","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"74e5ce3e60e914cbcded56662a6eea6b659e9dff","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        \u0027project_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":243,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":245,"context_line":"        # The alias of image. It should be removed in the future."},{"line_number":246,"context_line":"        \u0027image_ref\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":247,"context_line":"        \u0027image\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":248,"context_line":"        \u0027kernel_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_6a28d49a","line":245,"range":{"start_line":245,"start_character":8,"end_line":245,"end_character":65},"in_reply_to":"ba5201f7_5a7049a4","updated":"2017-01-08 00:32:13.000000000","message":"Done","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9a252cb33073fa19332898e58e6ad7188aa98456","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":245,"context_line":"        # The alias of image. It should be removed in the future."},{"line_number":246,"context_line":"        \u0027image_ref\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":247,"context_line":"        \u0027image\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":248,"context_line":"        \u0027kernel_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":249,"context_line":"        \u0027ramdisk_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":250,"context_line":"        \u0027hostname\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_9a49d133","line":247,"range":{"start_line":246,"start_character":0,"end_line":247,"end_character":50},"updated":"2017-01-07 00:40:24.000000000","message":"On \"create a server\" API schema, image_ref is defined as parameter_types.image_id_or_empty_string. So how about using it here again to clarify?\n\nOr do we just want to check the param\u0027s existences without checking the values? If so, it also is reasonable for me, but we will be able to use a common pattern without defining each schema value like\n\n # NOTE: We don\u0027t check actual values of queries on params\n # which are defined as the following common_param.\n common_param \u003d multi_params({\u0027type\u0027: \u0027string\u0027})\n\n [..]\n\n \u0027kernel_id\u0027: common_param,\n \u0027ramdisk_id\u0027: common_params,\n ..","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4122a855f39f1dc86b4db4d1090eb57baccaef94","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        \u0027tenant_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":244,"context_line":"        \u0027launch_index\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":245,"context_line":"        # The alias of image. It should be removed in the future."},{"line_number":246,"context_line":"        \u0027image_ref\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":247,"context_line":"        \u0027image\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":248,"context_line":"        \u0027kernel_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":249,"context_line":"        \u0027ramdisk_id\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":250,"context_line":"        \u0027hostname\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_657f2515","line":247,"range":{"start_line":246,"start_character":0,"end_line":247,"end_character":50},"in_reply_to":"ba5201f7_9a49d133","updated":"2017-01-08 02:36:16.000000000","message":"I guess this is reasonable","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9a252cb33073fa19332898e58e6ad7188aa98456","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        # NOTE(alex_xu): This is pattern matching, it didn\u0027t get any benefit"},{"line_number":263,"context_line":"        # from DB index."},{"line_number":264,"context_line":"        \u0027name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":265,"context_line":"        # The alias of name. It should be removed in the future."},{"line_number":266,"context_line":"        \u0027display_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":267,"context_line":"        \u0027description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":268,"context_line":"        \u0027display_description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_3a0e25e5","line":265,"range":{"start_line":265,"start_character":8,"end_line":265,"end_character":64},"updated":"2017-01-07 00:40:24.000000000","message":"This comment should be put on line 264 as the same as the other comments..","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"74e5ce3e60e914cbcded56662a6eea6b659e9dff","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        # NOTE(alex_xu): This is pattern matching, it didn\u0027t get any benefit"},{"line_number":263,"context_line":"        # from DB index."},{"line_number":264,"context_line":"        \u0027name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":265,"context_line":"        # The alias of name. It should be removed in the future."},{"line_number":266,"context_line":"        \u0027display_name\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":267,"context_line":"        \u0027description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":268,"context_line":"        \u0027display_description\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_aa2e3ca2","line":265,"range":{"start_line":265,"start_character":8,"end_line":265,"end_character":64},"in_reply_to":"ba5201f7_3a0e25e5","updated":"2017-01-08 00:32:13.000000000","message":"Done","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9a252cb33073fa19332898e58e6ad7188aa98456","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":290,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": multi_params({\"type\": \"string\"})}"},{"line_number":291,"context_line":"}"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_5a0be923","line":289,"range":{"start_line":289,"start_character":28,"end_line":289,"end_character":32},"updated":"2017-01-07 00:40:24.000000000","message":"Why this value should be True?\nIs it acceptable to receive unsupported query params?\n\nOr maybe this allows the existing APPs which pass unsupported query params unintentionally to avoid breaking them, I guess.\nIf so, it is nice to describe the reason of this True.","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d151295474fafdb7346491512fbe3953608e735","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        \u0027ip6\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027}),"},{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":290,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": multi_params({\"type\": \"string\"})}"},{"line_number":291,"context_line":"}"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_bdaccf8c","line":289,"range":{"start_line":289,"start_character":28,"end_line":289,"end_character":32},"in_reply_to":"ba5201f7_5a0be923","updated":"2017-01-07 01:38:05.000000000","message":"this is for backward-compatible. And we will strip the extra params out. https://github.com/openstack/nova/blob/master/nova/api/validation/__init__.py#L113\n\n+1 for a comment","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d151295474fafdb7346491512fbe3953608e735","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":290,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": multi_params({\"type\": \"string\"})}"},{"line_number":291,"context_line":"}"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_fdb817ca","line":290,"updated":"2017-01-07 01:38:05.000000000","message":"We should add a comment to explain what is this","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"74e5ce3e60e914cbcded56662a6eea6b659e9dff","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \u0027created_at\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":288,"context_line":"    },"},{"line_number":289,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":290,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": multi_params({\"type\": \"string\"})}"},{"line_number":291,"context_line":"}"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_ca29c09c","line":290,"in_reply_to":"ba5201f7_fdb817ca","updated":"2017-01-08 00:32:13.000000000","message":"Done","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d151295474fafdb7346491512fbe3953608e735","unresolved":false,"context_lines":[{"line_number":293,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."},{"line_number":294,"context_line":"# Update the joined-table fields to the list so it will not be"},{"line_number":295,"context_line":"# stripped in later process, thus can be handled later in api"},{"line_number":296,"context_line":"# to raise HTTP 400."},{"line_number":297,"context_line":"query_params_v21[\u0027properties\u0027].update({"},{"line_number":298,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":299,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_5db203e6","line":296,"updated":"2017-01-07 01:38:05.000000000","message":"nice comment.","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2d151295474fafdb7346491512fbe3953608e735","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    \u0027numa_topology\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":306,"context_line":"    \u0027pci_requests\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":307,"context_line":"    \u0027device_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":308,"context_line":"    \u0027keypairs\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})})"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"query_params_v21[\u0027properties\u0027].update("},{"line_number":311,"context_line":"    parameter_types.pagination_parameters)"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_7dd427eb","line":308,"updated":"2017-01-07 01:38:05.000000000","message":"I prefer to put them into variable first, then update at here. Maybe the variable named as JOINED_TABLE_INVALID_QUERY_PARAMS.\n\nThen the name of variable already explain something.","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"74e5ce3e60e914cbcded56662a6eea6b659e9dff","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    \u0027numa_topology\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":306,"context_line":"    \u0027pci_requests\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":307,"context_line":"    \u0027device_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":308,"context_line":"    \u0027keypairs\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})})"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"query_params_v21[\u0027properties\u0027].update("},{"line_number":311,"context_line":"    parameter_types.pagination_parameters)"}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_0a1e686f","line":308,"in_reply_to":"ba5201f7_7dd427eb","updated":"2017-01-08 00:32:13.000000000","message":"Done","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7964e636364b3ba7ade8872be9f018f460c1e53f","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    \u0027required\u0027: [\u0027trigger_crash_dump\u0027],"},{"line_number":234,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":235,"context_line":"}"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"common_param \u003d multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":238,"context_line":"common_regex_param \u003d multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027})"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_46fe7206","line":236,"updated":"2017-01-10 00:17:09.000000000","message":"It is nice to put the following comment\n\n # NOTE: We don\u0027t check actual values of queries on params\n # which are defined as the following common_param.\n\nbefore line 237 as PS31.","commit_id":"18ce528d97bf55bfdac3fb9350170547aaf68223"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"1cb52461325c8ba653d4cabdadedbeb3ef4cd9be","unresolved":false,"context_lines":[{"line_number":233,"context_line":"    \u0027required\u0027: [\u0027trigger_crash_dump\u0027],"},{"line_number":234,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":235,"context_line":"}"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"common_param \u003d multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":238,"context_line":"common_regex_param \u003d multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027regex\u0027})"},{"line_number":239,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_c1888cc9","line":236,"in_reply_to":"ba5201f7_46fe7206","updated":"2017-01-10 01:42:46.000000000","message":"Done","commit_id":"18ce528d97bf55bfdac3fb9350170547aaf68223"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"7964e636364b3ba7ade8872be9f018f460c1e53f","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        \u0027ip6\u0027: common_regex_param,"},{"line_number":293,"context_line":"        \u0027created_at\u0027: common_param,"},{"line_number":294,"context_line":"    },"},{"line_number":295,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":296,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":297,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": common_param}"},{"line_number":298,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_c6126258","line":295,"range":{"start_line":295,"start_character":4,"end_line":295,"end_character":33},"updated":"2017-01-10 00:17:09.000000000","message":"As Alex and I said on PS31, this True is for backwards compatibility for the existing APPs which pass unsupported parameters. And it is necessary to put such comment with the prefix \"NOTE: \" like the above as PS31\u0027s point.","commit_id":"18ce528d97bf55bfdac3fb9350170547aaf68223"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"1cb52461325c8ba653d4cabdadedbeb3ef4cd9be","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        \u0027ip6\u0027: common_regex_param,"},{"line_number":293,"context_line":"        \u0027created_at\u0027: common_param,"},{"line_number":294,"context_line":"    },"},{"line_number":295,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":296,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":297,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": common_param}"},{"line_number":298,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_61c0c0e1","line":295,"range":{"start_line":295,"start_character":4,"end_line":295,"end_character":33},"in_reply_to":"ba5201f7_c6126258","updated":"2017-01-10 01:42:46.000000000","message":"Ah, I must have missed this one","commit_id":"18ce528d97bf55bfdac3fb9350170547aaf68223"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"275298409270a6c042773ec944281a46e33dd3d2","unresolved":false,"context_lines":[{"line_number":294,"context_line":"    },"},{"line_number":295,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":296,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":297,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": common_param}"},{"line_number":298,"context_line":"}"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_73ec1390","line":297,"range":{"start_line":297,"start_character":27,"end_line":297,"end_character":28},"updated":"2017-01-10 02:14:09.000000000","message":"there is a extra space at here?","commit_id":"18ce528d97bf55bfdac3fb9350170547aaf68223"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"7a50c9b601b1cbd2fe229f3a527277de0d1dcf3a","unresolved":false,"context_lines":[{"line_number":294,"context_line":"    },"},{"line_number":295,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":296,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":297,"context_line":"    \u0027patternProperties\u0027: {\" ^_\": common_param}"},{"line_number":298,"context_line":"}"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."}],"source_content_type":"text/x-python","patch_set":33,"id":"ba5201f7_3367eb26","line":297,"range":{"start_line":297,"start_character":27,"end_line":297,"end_character":28},"in_reply_to":"ba5201f7_73ec1390","updated":"2017-01-10 02:16:57.000000000","message":"Done","commit_id":"18ce528d97bf55bfdac3fb9350170547aaf68223"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":300,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":301,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":302,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":303,"context_line":"}"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_0b09b92c","line":302,"range":{"start_line":302,"start_character":27,"end_line":302,"end_character":29},"updated":"2017-01-10 13:01:15.000000000","message":"This regex isn\u0027t right, it should be only allow the properties without \u0027_\u0027 prefix.\n\nAnd we need unittest for this case.","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3376e7b56f9ad91ed04ae06d8e52220f7f868397","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":300,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":301,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":302,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":303,"context_line":"}"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_ed68e9bc","line":302,"range":{"start_line":302,"start_character":27,"end_line":302,"end_character":29},"in_reply_to":"ba5201f7_0b09b92c","updated":"2017-01-11 03:09:28.000000000","message":"The correct pattern should be \"^[^]\" like we discussed in IRC :)","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"49734da85710034d50b828d47ae2eb04b49eb1c0","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":244,"context_line":"    \u0027properties\u0027: {"},{"line_number":245,"context_line":"        \u0027user_id\u0027: common_param,"},{"line_number":246,"context_line":"        # The alias of tenant_id. It should be removed in the"},{"line_number":247,"context_line":"        # future with microversion bump."},{"line_number":248,"context_line":"        \u0027project_id\u0027: common_param,"},{"line_number":249,"context_line":"        \u0027tenant_id\u0027: common_param,"},{"line_number":250,"context_line":"        \u0027launch_index\u0027: common_param,"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_fad6d2c1","line":247,"range":{"start_line":246,"start_character":0,"end_line":247,"end_character":40},"updated":"2017-01-11 09:46:17.000000000","message":"or remove tenant_id instead","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"47ebfd9bf04bee963a5d64be19912b0dd5e7120c","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":244,"context_line":"    \u0027properties\u0027: {"},{"line_number":245,"context_line":"        \u0027user_id\u0027: common_param,"},{"line_number":246,"context_line":"        # The alias of tenant_id. It should be removed in the"},{"line_number":247,"context_line":"        # future with microversion bump."},{"line_number":248,"context_line":"        \u0027project_id\u0027: common_param,"},{"line_number":249,"context_line":"        \u0027tenant_id\u0027: common_param,"},{"line_number":250,"context_line":"        \u0027launch_index\u0027: common_param,"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_b015494a","line":247,"range":{"start_line":246,"start_character":0,"end_line":247,"end_character":40},"in_reply_to":"ba5201f7_fad6d2c1","updated":"2017-01-11 09:57:53.000000000","message":"Done","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"49734da85710034d50b828d47ae2eb04b49eb1c0","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # with microversion bump."},{"line_number":274,"context_line":"        \u0027display_name\u0027: common_regex_param,"},{"line_number":275,"context_line":"        \u0027description\u0027: common_param,"},{"line_number":276,"context_line":"        \u0027display_description\u0027: common_param,"},{"line_number":277,"context_line":"        \u0027locked_by\u0027: common_param,"},{"line_number":278,"context_line":"        \u0027uuid\u0027: common_param,"},{"line_number":279,"context_line":"        \u0027root_device_name\u0027: common_param,"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_d5963f93","line":276,"range":{"start_line":276,"start_character":4,"end_line":276,"end_character":44},"updated":"2017-01-11 09:46:17.000000000","message":"also we can add note for removing display_description","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"49734da85710034d50b828d47ae2eb04b49eb1c0","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        # The alias of name. It should be removed in the future"},{"line_number":273,"context_line":"        # with microversion bump."},{"line_number":274,"context_line":"        \u0027display_name\u0027: common_regex_param,"},{"line_number":275,"context_line":"        \u0027description\u0027: common_param,"},{"line_number":276,"context_line":"        \u0027display_description\u0027: common_param,"},{"line_number":277,"context_line":"        \u0027locked_by\u0027: common_param,"},{"line_number":278,"context_line":"        \u0027uuid\u0027: common_param,"},{"line_number":279,"context_line":"        \u0027root_device_name\u0027: common_param,"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_559b2fc9","line":276,"range":{"start_line":275,"start_character":0,"end_line":276,"end_character":44},"updated":"2017-01-11 09:46:17.000000000","message":"these also common_regex_param,","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"47ebfd9bf04bee963a5d64be19912b0dd5e7120c","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        # with microversion bump."},{"line_number":274,"context_line":"        \u0027display_name\u0027: common_regex_param,"},{"line_number":275,"context_line":"        \u0027description\u0027: common_param,"},{"line_number":276,"context_line":"        \u0027display_description\u0027: common_param,"},{"line_number":277,"context_line":"        \u0027locked_by\u0027: common_param,"},{"line_number":278,"context_line":"        \u0027uuid\u0027: common_param,"},{"line_number":279,"context_line":"        \u0027root_device_name\u0027: common_param,"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_701be180","line":276,"range":{"start_line":276,"start_character":4,"end_line":276,"end_character":44},"in_reply_to":"ba5201f7_d5963f93","updated":"2017-01-11 09:57:53.000000000","message":"Done","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"49734da85710034d50b828d47ae2eb04b49eb1c0","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        # NOTE(alex_xu): The ip and ip6 are implemented in the python."},{"line_number":293,"context_line":"        \u0027ip\u0027: common_regex_param,"},{"line_number":294,"context_line":"        \u0027ip6\u0027: common_regex_param,"},{"line_number":295,"context_line":"        \u0027created_at\u0027: common_param,"},{"line_number":296,"context_line":"    },"},{"line_number":297,"context_line":"    # For backward-compatible additionalProperties is set to be True here."},{"line_number":298,"context_line":"    # And we will either strip the extra params out or raise HTTP 400"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_b5cd3bb9","line":295,"range":{"start_line":295,"start_character":22,"end_line":295,"end_character":35},"updated":"2017-01-11 09:46:17.000000000","message":"we can check date-time format like for changes-since","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"62494604b371e3648511505aa0a7ee5a1c249e05","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    # And we will either strip the extra params out or raise HTTP 400"},{"line_number":299,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":300,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":301,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":302,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":303,"context_line":"}"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_f577c338","line":301,"range":{"start_line":301,"start_character":6,"end_line":301,"end_character":70},"updated":"2017-01-11 09:35:35.000000000","message":"We are not filter those out. We just enable them pass the schema validation. And return 400 for them later. Better to improve a little for this comment.","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"47ebfd9bf04bee963a5d64be19912b0dd5e7120c","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    # And we will either strip the extra params out or raise HTTP 400"},{"line_number":299,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":300,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":301,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":302,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":303,"context_line":"}"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_5677b69e","line":301,"range":{"start_line":301,"start_character":6,"end_line":301,"end_character":70},"in_reply_to":"ba5201f7_90ca05a0","updated":"2017-01-11 09:57:53.000000000","message":"We have a \"strip\" additional params process in validation.__init__.py all params that are not listed in the above list is will be striped out and ignore silently, but we also agreed to raise HTTP 400 for internal attributes like \"__contains__\" so we have to prevent them from being striped in validation then raise 400 in API.","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e43fd4ab10088f7930499f6f1cd7a8cc15d4ae3a","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    # And we will either strip the extra params out or raise HTTP 400"},{"line_number":299,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":300,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":301,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":302,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":303,"context_line":"}"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_50825d53","line":301,"range":{"start_line":301,"start_character":6,"end_line":301,"end_character":70},"in_reply_to":"ba5201f7_f577c338","updated":"2017-01-11 09:41:43.000000000","message":"My bad, forgot to modify the comment","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"49734da85710034d50b828d47ae2eb04b49eb1c0","unresolved":false,"context_lines":[{"line_number":298,"context_line":"    # And we will either strip the extra params out or raise HTTP 400"},{"line_number":299,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":300,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":301,"context_line":"    # Filter out internal-attributes that are started with underscore."},{"line_number":302,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":303,"context_line":"}"},{"line_number":304,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_90ca05a0","line":301,"range":{"start_line":301,"start_character":6,"end_line":301,"end_character":70},"in_reply_to":"ba5201f7_f577c338","updated":"2017-01-11 09:46:17.000000000","message":"but what is the purpose to allow here? it is all allowed as of now as additionalProperties is True,","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"49734da85710034d50b828d47ae2eb04b49eb1c0","unresolved":false,"context_lines":[{"line_number":314,"context_line":""},{"line_number":315,"context_line":"query_params_v226 \u003d copy.deepcopy(query_params_v21)"},{"line_number":316,"context_line":"query_params_v226[\u0027properties\u0027].update({"},{"line_number":317,"context_line":"    \u0027tags\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":318,"context_line":"    \u0027tags-any\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":319,"context_line":"    \u0027not-tags\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":320,"context_line":"    \u0027not-tags-any\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_55ddef12","line":317,"range":{"start_line":317,"start_character":12,"end_line":317,"end_character":44},"updated":"2017-01-11 09:46:17.000000000","message":"we can use common_param\n\nsame for all below cases","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c7f237491094a3314993178c8a743c38337d5ca5","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":303,"context_line":"    # Prevent internal-attributes that are started with underscore from"},{"line_number":304,"context_line":"    # being striped out in schema validation, and raise HTTP 400 in API."},{"line_number":305,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":306,"context_line":"}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_84c4ef40","line":305,"range":{"start_line":305,"start_character":32,"end_line":305,"end_character":44},"updated":"2017-01-13 03:53:02.000000000","message":"and here change this to {\u0027not\u0027: {}}","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e9d04b357a8d1001f527165b0160fac4895b669c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":306,"context_line":"}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."},{"line_number":309,"context_line":"# Update the joined-table fields to the list so it will not be"},{"line_number":310,"context_line":"# stripped in later process, thus can be handled later in api"},{"line_number":311,"context_line":"# to raise HTTP 400."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_bbec7ec8","line":308,"range":{"start_line":308,"start_character":2,"end_line":308,"end_character":59},"updated":"2017-01-14 00:06:58.000000000","message":"There is no chance to cleanup this. We only can strict it with microversion.","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e9d04b357a8d1001f527165b0160fac4895b669c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":306,"context_line":"}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."},{"line_number":309,"context_line":"# Update the joined-table fields to the list so it will not be"},{"line_number":310,"context_line":"# stripped in later process, thus can be handled later in api"},{"line_number":311,"context_line":"# to raise HTTP 400."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_fbce0659","line":308,"range":{"start_line":308,"start_character":2,"end_line":308,"end_character":59},"updated":"2017-01-14 00:06:58.000000000","message":"There is no chance to cleanup this. We only can strict the validation with microversion. The old version still need keep the behaviour same.","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ffa69719b0f9690d822bb659b8197e2a1ba896e2","unresolved":false,"context_lines":[{"line_number":305,"context_line":"    \u0027patternProperties\u0027: {\"^_\": common_param}"},{"line_number":306,"context_line":"}"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"# TODO(Kevin Zheng): Cleanup this once the check is strict."},{"line_number":309,"context_line":"# Update the joined-table fields to the list so it will not be"},{"line_number":310,"context_line":"# stripped in later process, thus can be handled later in api"},{"line_number":311,"context_line":"# to raise HTTP 400."}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_36a8a31f","line":308,"range":{"start_line":308,"start_character":2,"end_line":308,"end_character":59},"in_reply_to":"7a3c09a3_fbce0659","updated":"2017-01-14 01:13:19.000000000","message":"Done","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"edd75ad322c772f57a0382361f809ec3eb2cef3a","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \u0027flavor\u0027: common_param,"},{"line_number":275,"context_line":"        \u0027reservation_id\u0027: common_param,"},{"line_number":276,"context_line":"        \u0027launched_at\u0027: common_param,"},{"line_number":277,"context_line":"        \u0027terminate_at\u0027: common_param,"},{"line_number":278,"context_line":"        \u0027availability_zone\u0027: common_param,"},{"line_number":279,"context_line":"        # NOTE(alex_xu): This is pattern matching, it didn\u0027t get any benefit"},{"line_number":280,"context_line":"        # from DB index."}],"source_content_type":"text/x-python","patch_set":41,"id":"3a461143_85da23e8","line":277,"range":{"start_line":277,"start_character":9,"end_line":277,"end_character":21},"updated":"2017-02-01 22:46:03.000000000","message":"Shouldn\u0027t this be terminated_at?","commit_id":"134c19faeb12ed81f13d84e83d96872d58843d72"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fd6a4af84b7bbbe5f16d4e0bd3f30de670a36531","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                msg \u003d _(\"Only administrators may list deleted instances\")"},{"line_number":274,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"        # Verify the value of the \u0027name\u0027 option is a correct regex."},{"line_number":277,"context_line":"        if \u0027name\u0027 in search_opts:"},{"line_number":278,"context_line":"            try:"},{"line_number":279,"context_line":"                re.compile(search_opts[\u0027name\u0027])"},{"line_number":280,"context_line":"            except re.error:"},{"line_number":281,"context_line":"                msg \u003d _(\"The regex for server name is incorrect\")"},{"line_number":282,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":285,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_a60525c3","side":"PARENT","line":282,"range":{"start_line":276,"start_character":0,"end_line":282,"end_character":57},"updated":"2017-01-04 02:09:18.000000000","message":"Nice to remove :)","commit_id":"00a3812a1ff0dad0559874b0aee756e128a2273a"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"fd6a4af84b7bbbe5f16d4e0bd3f30de670a36531","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            LOG.debug(\"Did not find any server create schemas\")"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @extensions.expected_errors((400, 403))"},{"line_number":189,"context_line":"    @validation.query_params_schema(schema_servers.query_parameters_v226,"},{"line_number":190,"context_line":"                                    \u00272.26\u0027)"},{"line_number":191,"context_line":"    @validation.query_params_schema(schema_servers.query_parameters_v21,"},{"line_number":192,"context_line":"                                    \u00272.1\u0027, \u00272.25\u0027)"},{"line_number":193,"context_line":"    def index(self, req):"},{"line_number":194,"context_line":"        \"\"\"Returns a list of server names and ids for a given user.\"\"\""},{"line_number":195,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_2673f581","line":192,"range":{"start_line":189,"start_character":0,"end_line":192,"end_character":50},"updated":"2017-01-04 02:09:18.000000000","message":"This decorator seems very long and a little less readable for me..\n\nHow about changing the decorator name to query_schema() and the schema name to query_v226 for removing params/parameters?\n\nHere will be changed like\n\n @validation.query_schema(schema_servers.query_v226, \u00272.26\u0027)\n @validation.query_schema(schema_servers.query_v21, \u00272.1\u0027, \u00272.25\u0027)\n\nto keep each decorator in a single line.","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d9865ecf29e1315592bc68209471c964d594f676","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            LOG.debug(\"Did not find any server create schemas\")"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @extensions.expected_errors((400, 403))"},{"line_number":189,"context_line":"    @validation.query_params_schema(schema_servers.query_parameters_v226,"},{"line_number":190,"context_line":"                                    \u00272.26\u0027)"},{"line_number":191,"context_line":"    @validation.query_params_schema(schema_servers.query_parameters_v21,"},{"line_number":192,"context_line":"                                    \u00272.1\u0027, \u00272.25\u0027)"},{"line_number":193,"context_line":"    def index(self, req):"},{"line_number":194,"context_line":"        \"\"\"Returns a list of server names and ids for a given user.\"\"\""},{"line_number":195,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_8ad4a347","line":192,"range":{"start_line":189,"start_character":0,"end_line":192,"end_character":50},"in_reply_to":"ba5201f7_2673f581","updated":"2017-01-04 03:46:41.000000000","message":"this is actually done in\nhttps://review.openstack.org/#/c/389003/22/nova/api/validation/__init__.py\n:) so lets change it there.","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f114305b07080167e2a97baf7513666e60a0f523","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            LOG.debug(\"Did not find any server create schemas\")"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    @extensions.expected_errors((400, 403))"},{"line_number":189,"context_line":"    @validation.query_params_schema(schema_servers.query_parameters_v226,"},{"line_number":190,"context_line":"                                    \u00272.26\u0027)"},{"line_number":191,"context_line":"    @validation.query_params_schema(schema_servers.query_parameters_v21,"},{"line_number":192,"context_line":"                                    \u00272.1\u0027, \u00272.25\u0027)"},{"line_number":193,"context_line":"    def index(self, req):"},{"line_number":194,"context_line":"        \"\"\"Returns a list of server names and ids for a given user.\"\"\""},{"line_number":195,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_de48298a","line":192,"range":{"start_line":189,"start_character":0,"end_line":192,"end_character":50},"in_reply_to":"ba5201f7_8ad4a347","updated":"2017-01-04 07:43:23.000000000","message":"so....@Ken\u0027ichi, you want to me change the name?","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f114305b07080167e2a97baf7513666e60a0f523","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        if \u0027changes-since\u0027 in search_opts:"},{"line_number":251,"context_line":"            try:"},{"line_number":252,"context_line":"                parsed \u003d timeutils.parse_isotime(search_opts[\u0027changes-since\u0027])"},{"line_number":253,"context_line":"            except ValueError:"},{"line_number":254,"context_line":"                msg \u003d _(\u0027Invalid changes-since value\u0027)"},{"line_number":255,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":256,"context_line":"            search_opts[\u0027changes-since\u0027] \u003d parsed"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        # By default, compute\u0027s get_all() will return deleted instances."}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_7e32dd11","line":255,"range":{"start_line":253,"start_character":11,"end_line":255,"end_character":57},"updated":"2017-01-04 07:43:23.000000000","message":"So....we can remove this exception catching.","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0212361827749afcd9778ebfbb2b3dbf2454a101","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        if \u0027changes-since\u0027 in search_opts:"},{"line_number":251,"context_line":"            try:"},{"line_number":252,"context_line":"                parsed \u003d timeutils.parse_isotime(search_opts[\u0027changes-since\u0027])"},{"line_number":253,"context_line":"            except ValueError:"},{"line_number":254,"context_line":"                msg \u003d _(\u0027Invalid changes-since value\u0027)"},{"line_number":255,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":256,"context_line":"            search_opts[\u0027changes-since\u0027] \u003d parsed"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        # By default, compute\u0027s get_all() will return deleted instances."}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_d9168354","line":255,"range":{"start_line":253,"start_character":11,"end_line":255,"end_character":57},"in_reply_to":"ba5201f7_7e32dd11","updated":"2017-01-04 08:01:34.000000000","message":"Done","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            states \u003d common.task_and_vm_state_from_status(statuses)"},{"line_number":233,"context_line":"            vm_state, task_state \u003d states"},{"line_number":234,"context_line":"            if not vm_state and not task_state:"},{"line_number":235,"context_line":"                if api_version_request.is_supported(req, min_version\u003d\u00272.38\u0027):"},{"line_number":236,"context_line":"                    msg \u003d _(\u0027Invalid status value\u0027)"},{"line_number":237,"context_line":"                    raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":238,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_4bf2ab70","line":235,"updated":"2017-01-04 15:33:11.000000000","message":"Nit: I guess we can role this into the parameter validation eventually?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3563da8c109dc79a406954b340c39d6f070c4884","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                msg \u003d _(\"Only administrators may list deleted instances\")"},{"line_number":272,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":275,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"},{"line_number":276,"context_line":"                if tag_filter in search_opts:"},{"line_number":277,"context_line":"                    search_opts[tag_filter] \u003d search_opts["}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_d0f566cb","line":274,"updated":"2017-01-04 14:35:02.000000000","message":"Nit: I guess the validation means we don\u0027t need this now, but its kinda nice having it here still.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ca8e4647d2d3da197838ecc9f394823cfb957c05","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                msg \u003d _(\"Only administrators may list deleted instances\")"},{"line_number":272,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":275,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"},{"line_number":276,"context_line":"                if tag_filter in search_opts:"},{"line_number":277,"context_line":"                    search_opts[tag_filter] \u003d search_opts["}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_ccae9597","line":274,"in_reply_to":"ba5201f7_d0f566cb","updated":"2017-01-05 07:23:46.000000000","message":"Done","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3563da8c109dc79a406954b340c39d6f070c4884","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"            password \u003d utils.generate_password()"},{"line_number":1095,"context_line":"        return password"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":"    def _get_server_search_options(self, req):"},{"line_number":1098,"context_line":"        \"\"\"Return server search options allowed by non-admin.\"\"\""},{"line_number":1099,"context_line":"        opt_list \u003d (\u0027reservation_id\u0027, \u0027name\u0027, \u0027status\u0027, \u0027image\u0027, \u0027flavor\u0027,"},{"line_number":1100,"context_line":"                    \u0027ip\u0027, \u0027changes-since\u0027, \u0027all_tenants\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_f078aaf4","line":1097,"updated":"2017-01-04 14:35:02.000000000","message":"Ah, so these things are restricted here. I guess we should really match the min_version for ip6 in the schema as sdague noted.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ca8e4647d2d3da197838ecc9f394823cfb957c05","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"            password \u003d utils.generate_password()"},{"line_number":1095,"context_line":"        return password"},{"line_number":1096,"context_line":""},{"line_number":1097,"context_line":"    def _get_server_search_options(self, req):"},{"line_number":1098,"context_line":"        \"\"\"Return server search options allowed by non-admin.\"\"\""},{"line_number":1099,"context_line":"        opt_list \u003d (\u0027reservation_id\u0027, \u0027name\u0027, \u0027status\u0027, \u0027image\u0027, \u0027flavor\u0027,"},{"line_number":1100,"context_line":"                    \u0027ip\u0027, \u0027changes-since\u0027, \u0027all_tenants\u0027)"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_0c95fd3d","line":1097,"in_reply_to":"ba5201f7_f078aaf4","updated":"2017-01-05 07:23:46.000000000","message":"Done","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":1179,"context_line":"        # Only remove parameters for sorting and pagination"},{"line_number":1180,"context_line":"        for key in (\u0027sort_key\u0027, \u0027sort_dir\u0027, \u0027limit\u0027, \u0027marker\u0027):"},{"line_number":1181,"context_line":"            search_options.pop(key, None)"},{"line_number":1182,"context_line":"        return"},{"line_number":1183,"context_line":"    # Otherwise, strip out all unknown options"},{"line_number":1184,"context_line":"    unknown_options \u003d [opt for opt in search_options"},{"line_number":1185,"context_line":"                        if opt not in allowed_search_options]"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_005f9d0e","line":1182,"updated":"2017-01-04 15:33:11.000000000","message":"Nit: I guess the validation logic is just changing this side of the filtering?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"    # Otherwise, strip out all unknown options"},{"line_number":1184,"context_line":"    unknown_options \u003d [opt for opt in search_options"},{"line_number":1185,"context_line":"                        if opt not in allowed_search_options]"},{"line_number":1186,"context_line":"    if unknown_options:"},{"line_number":1187,"context_line":"        LOG.debug(\"Removing options \u0027%s\u0027 from query\","},{"line_number":1188,"context_line":"                  \", \".join(unknown_options))"},{"line_number":1189,"context_line":"        for opt in unknown_options:"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_a03b31d0","line":1186,"updated":"2017-01-04 15:33:11.000000000","message":"Nit: I guess this is a no-op now, if we got the validation logic working correctly?","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ca8e4647d2d3da197838ecc9f394823cfb957c05","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"    # Otherwise, strip out all unknown options"},{"line_number":1184,"context_line":"    unknown_options \u003d [opt for opt in search_options"},{"line_number":1185,"context_line":"                        if opt not in allowed_search_options]"},{"line_number":1186,"context_line":"    if unknown_options:"},{"line_number":1187,"context_line":"        LOG.debug(\"Removing options \u0027%s\u0027 from query\","},{"line_number":1188,"context_line":"                  \", \".join(unknown_options))"},{"line_number":1189,"context_line":"        for opt in unknown_options:"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_cc9cd55f","line":1186,"in_reply_to":"ba5201f7_a03b31d0","updated":"2017-01-05 07:23:46.000000000","message":"No, we have to strip out available filters for non-admins here.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d7bd8c92ece6f7add3466c553d161fb8228ae7b4","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        for search_opt in search_opts:"},{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS:"},{"line_number":231,"context_line":"                msg \u003d _(\"Joined-table fields are not allowed to be used \""},{"line_number":232,"context_line":"                        \"as filters\")"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_d42ec541","line":231,"updated":"2017-01-07 17:31:25.000000000","message":"Should we put the search_opt variable in the message for clarity? The user might not know which field they are filtering on which is causing the problem.","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"74e5ce3e60e914cbcded56662a6eea6b659e9dff","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        for search_opt in search_opts:"},{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS:"},{"line_number":231,"context_line":"                msg \u003d _(\"Joined-table fields are not allowed to be used \""},{"line_number":232,"context_line":"                        \"as filters\")"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_4a14f04b","line":231,"in_reply_to":"ba5201f7_d42ec541","updated":"2017-01-08 00:32:13.000000000","message":"Done","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fddb523c0ea5e873440bfc95add202624052e334","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS:"},{"line_number":231,"context_line":"                msg \u003d _(\"Joined-table fields are not allowed to be used \""},{"line_number":232,"context_line":"                        \"as filters\")"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        # Verify search by \u0027status\u0027 contains a valid status."},{"line_number":236,"context_line":"        # Convert it to filter by vm_state or task_state for compute_api."}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_9df62b8d","line":233,"updated":"2017-01-07 01:39:34.000000000","message":"We need test to ensure this works.","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"74e5ce3e60e914cbcded56662a6eea6b659e9dff","unresolved":false,"context_lines":[{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS:"},{"line_number":231,"context_line":"                msg \u003d _(\"Joined-table fields are not allowed to be used \""},{"line_number":232,"context_line":"                        \"as filters\")"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        # Verify search by \u0027status\u0027 contains a valid status."},{"line_number":236,"context_line":"        # Convert it to filter by vm_state or task_state for compute_api."}],"source_content_type":"text/x-python","patch_set":31,"id":"ba5201f7_8a0a5824","line":233,"in_reply_to":"ba5201f7_9df62b8d","updated":"2017-01-08 00:32:13.000000000","message":"Done","commit_id":"1a84231193f75e4e2e6572c0f49e7859ac6db435"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        for search_opt in search_opts:"},{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS:"},{"line_number":231,"context_line":"                msg \u003d _(\"Invalid filter field: %s. Joined-table fields \""},{"line_number":232,"context_line":"                        \"are not allowed to be used as filters\") % search_opt"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_0ae536a7","line":231,"range":{"start_line":231,"start_character":51,"end_line":231,"end_character":70},"updated":"2017-01-10 13:01:15.000000000","message":"We needn\u0027t talk about our DB schema detail to the API user.","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3376e7b56f9ad91ed04ae06d8e52220f7f868397","unresolved":false,"context_lines":[{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        for search_opt in search_opts:"},{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS:"},{"line_number":231,"context_line":"                msg \u003d _(\"Invalid filter field: %s. Joined-table fields \""},{"line_number":232,"context_line":"                        \"are not allowed to be used as filters\") % search_opt"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_4d5e5513","line":231,"range":{"start_line":231,"start_character":51,"end_line":231,"end_character":70},"in_reply_to":"ba5201f7_0ae536a7","updated":"2017-01-11 03:09:28.000000000","message":"Yeah you are correct","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"49734da85710034d50b828d47ae2eb04b49eb1c0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_utils import strutils"},{"line_number":20,"context_line":"from oslo_utils import timeutils"},{"line_number":21,"context_line":"from oslo_utils import uuidutils"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":"import stevedore"},{"line_number":25,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_7002010b","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":9},"updated":"2017-01-11 09:46:17.000000000","message":"this should not be moved as std lib","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"47ebfd9bf04bee963a5d64be19912b0dd5e7120c","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from oslo_utils import strutils"},{"line_number":20,"context_line":"from oslo_utils import timeutils"},{"line_number":21,"context_line":"from oslo_utils import uuidutils"},{"line_number":22,"context_line":"import re"},{"line_number":23,"context_line":"import six"},{"line_number":24,"context_line":"import stevedore"},{"line_number":25,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_70bf6160","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":9},"in_reply_to":"ba5201f7_7002010b","updated":"2017-01-11 09:57:53.000000000","message":"AH, this is a mistake","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"62494604b371e3648511505aa0a7ee5a1c249e05","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                self._get_server_search_options(req))"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        for search_opt in search_opts:"},{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS or \\"},{"line_number":231,"context_line":"                    search_opt.startswith(\u0027_\u0027):"},{"line_number":232,"context_line":"                msg \u003d _(\"Invalid filter field: %s.\") % search_opt"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_55d32f38","line":230,"range":{"start_line":230,"start_character":52,"end_line":230,"end_character":53},"updated":"2017-01-11 09:35:35.000000000","message":"in normally we use () for wrap line.\n\nIf (search_opt in JONED_TABLE_FIELDS or\n      .......)\n\nAnd I prefer to use this variable directly https://review.openstack.org/#/c/408571/36/nova/api/validation/parameter_types.py@416\n\nJust write as:\n\nparameter_types.JOINED_TABLE_INVALID_QUERY_PARAMS.keys()","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e43fd4ab10088f7930499f6f1cd7a8cc15d4ae3a","unresolved":false,"context_lines":[{"line_number":227,"context_line":"                self._get_server_search_options(req))"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        for search_opt in search_opts:"},{"line_number":230,"context_line":"            if search_opt in JOINED_TABLE_FIEDLS or \\"},{"line_number":231,"context_line":"                    search_opt.startswith(\u0027_\u0027):"},{"line_number":232,"context_line":"                msg \u003d _(\"Invalid filter field: %s.\") % search_opt"},{"line_number":233,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_b07f0965","line":230,"range":{"start_line":230,"start_character":52,"end_line":230,"end_character":53},"in_reply_to":"ba5201f7_55d32f38","updated":"2017-01-11 09:41:43.000000000","message":"Done","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"14e0a6fdd6f2034d5966c4ffd527f5e647b942a9","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        remove_invalid_options(context, search_opts,"},{"line_number":223,"context_line":"                self._get_server_search_options(req))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        for search_opt in search_opts:"},{"line_number":226,"context_line":"            if (search_opt.startswith(\u0027_\u0027) or"},{"line_number":227,"context_line":"                    search_opt in"},{"line_number":228,"context_line":"                    parameter_types.JOINED_TABLE_QUERY_PARAMS.keys()):"}],"source_content_type":"text/x-python","patch_set":38,"id":"ba5201f7_f6edffb7","line":225,"updated":"2017-01-11 13:11:19.000000000","message":"Its tempting to put this in a decorator that runs before the schema checks execute.\n\nThat way the schema stays clean(er)?","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e9d04b357a8d1001f527165b0160fac4895b669c","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        remove_invalid_options(context, search_opts,"},{"line_number":223,"context_line":"                self._get_server_search_options(req))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        for search_opt in search_opts:"},{"line_number":226,"context_line":"            if (search_opt.startswith(\u0027_\u0027) or"},{"line_number":227,"context_line":"                    search_opt in"},{"line_number":228,"context_line":"                    parameter_types.JOINED_TABLE_QUERY_PARAMS.keys()):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_bb9e3e54","line":225,"in_reply_to":"7a3c09a3_5f1d740e","updated":"2017-01-14 00:06:58.000000000","message":"As discussion on the IRC, we can refactor this later.","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"07b0bc4d5db102c93eb6fe2c13aed38ff566cd6f","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        remove_invalid_options(context, search_opts,"},{"line_number":223,"context_line":"                self._get_server_search_options(req))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        for search_opt in search_opts:"},{"line_number":226,"context_line":"            if (search_opt.startswith(\u0027_\u0027) or"},{"line_number":227,"context_line":"                    search_opt in"},{"line_number":228,"context_line":"                    parameter_types.JOINED_TABLE_QUERY_PARAMS.keys()):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_5f1d740e","line":225,"in_reply_to":"7a3c09a3_6479c32f","updated":"2017-01-13 04:32:58.000000000","message":"As discussed on IRC, error message is something needs to be modified and needs same hack or new format as with new format checker suggested in https://review.openstack.org/#/c/419256/7","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c7f237491094a3314993178c8a743c38337d5ca5","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        remove_invalid_options(context, search_opts,"},{"line_number":223,"context_line":"                self._get_server_search_options(req))"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        for search_opt in search_opts:"},{"line_number":226,"context_line":"            if (search_opt.startswith(\u0027_\u0027) or"},{"line_number":227,"context_line":"                    search_opt in"},{"line_number":228,"context_line":"                    parameter_types.JOINED_TABLE_QUERY_PARAMS.keys()):"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_6479c32f","line":225,"in_reply_to":"ba5201f7_f6edffb7","updated":"2017-01-13 03:53:02.000000000","message":"got a way to do this in schema side itself with \u0027not\u0027 property\n\nlike- \u0027system_metadata\u0027: {\u0027not\u0027: {}},\n\nit will disallow any value given in \u0027system_metadata\u0027 with below error. \n\nexample: ?system_metadata\u003dmymeta\n\n\"Invalid input for field/attribute system_metadata. Value: . {} is not allowed for \u0027mymeta\u0027 \"\n\nError message we can modify if we need.","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"bf9514a577fb1db58de1881e4a19c08302b28fd1","unresolved":false,"context_lines":[{"line_number":226,"context_line":"                schema_servers.JOINED_TABLE_QUERY_PARAMS_SERVERS.keys() or"},{"line_number":227,"context_line":"                    search_opt.startswith(\u0027_\u0027)):"},{"line_number":228,"context_line":"                msg \u003d _(\"Invalid filter field: %s.\") % search_opt"},{"line_number":229,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # Verify search by \u0027status\u0027 contains a valid status."},{"line_number":232,"context_line":"        # Convert it to filter by vm_state or task_state for compute_api."}],"source_content_type":"text/x-python","patch_set":41,"id":"7a3c09a3_e1a309b0","line":229,"updated":"2017-01-18 12:46:37.000000000","message":"Its a lot of effort to get this to work, but I think its worth it.","commit_id":"134c19faeb12ed81f13d84e83d96872d58843d72"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"bf9514a577fb1db58de1881e4a19c08302b28fd1","unresolved":false,"context_lines":[{"line_number":278,"context_line":"                msg \u003d _(\"Only administrators may list deleted instances\")"},{"line_number":279,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.26\u0027):"},{"line_number":282,"context_line":"            for tag_filter in TAG_SEARCH_FILTERS:"},{"line_number":283,"context_line":"                if tag_filter in search_opts:"},{"line_number":284,"context_line":"                    search_opts[tag_filter] \u003d search_opts["}],"source_content_type":"text/x-python","patch_set":41,"id":"7a3c09a3_012c9597","line":281,"updated":"2017-01-18 12:46:37.000000000","message":"Nit: I guess we could drop this, but I kinda like it being here still.","commit_id":"134c19faeb12ed81f13d84e83d96872d58843d72"}],"nova/api/validation/__init__.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"62494604b371e3648511505aa0a7ee5a1c249e05","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            # retained and handle latter."},{"line_number":134,"context_line":"            if not (list(pattern_regex for pattern_regex in pattern_regexes"},{"line_number":135,"context_line":"                         if pattern_regex.match(param))):"},{"line_number":136,"context_line":"                if param not in schema[\u0027properties\u0027].keys():"},{"line_number":137,"context_line":"                    del req.GET[param]"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_35f86b49","line":136,"updated":"2017-01-11 09:35:35.000000000","message":"nit, maybe we should check the \u0027properties\u0027 first, that is cheaper than a set of regex match.","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e43fd4ab10088f7930499f6f1cd7a8cc15d4ae3a","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            # retained and handle latter."},{"line_number":134,"context_line":"            if not (list(pattern_regex for pattern_regex in pattern_regexes"},{"line_number":135,"context_line":"                         if pattern_regex.match(param))):"},{"line_number":136,"context_line":"                if param not in schema[\u0027properties\u0027].keys():"},{"line_number":137,"context_line":"                    del req.GET[param]"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"ba5201f7_b0f629f7","line":136,"in_reply_to":"ba5201f7_35f86b49","updated":"2017-01-11 09:41:43.000000000","message":"I did it that way first, but the other one is just to long and could not get a good formation, let me try again :)","commit_id":"7a955343d9e6d88cd6af48ef8bcd677955cf2c00"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":425,"context_line":"}"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"JOINED_TABLE_INVALID_QUERY_PARAMS \u003d {"},{"line_number":428,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":429,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":430,"context_line":"    \u0027system_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_cb0411c8","line":427,"updated":"2017-01-10 13:01:15.000000000","message":"We also have block_device_mapping","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"3376e7b56f9ad91ed04ae06d8e52220f7f868397","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":425,"context_line":"}"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"JOINED_TABLE_INVALID_QUERY_PARAMS \u003d {"},{"line_number":428,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":429,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":430,"context_line":"    \u0027system_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_4db5752f","line":427,"in_reply_to":"ba5201f7_cb0411c8","updated":"2017-01-11 03:09:28.000000000","message":"Double checking all fields...","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":430,"context_line":"    \u0027system_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":431,"context_line":"    \u0027info_cache\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":432,"context_line":"    \u0027security_groups\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":433,"context_line":"    \u0027fault\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":434,"context_line":"    \u0027pci_devices\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":435,"context_line":"    \u0027numa_topology\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":436,"context_line":"    \u0027pci_requests\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_2bb75df6","line":433,"range":{"start_line":433,"start_character":13,"end_line":433,"end_character":25},"updated":"2017-01-10 13:01:15.000000000","message":"I just print the dir(models.Instance), found no this field in the output","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":432,"context_line":"    \u0027security_groups\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":433,"context_line":"    \u0027fault\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":434,"context_line":"    \u0027pci_devices\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":435,"context_line":"    \u0027numa_topology\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":436,"context_line":"    \u0027pci_requests\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":437,"context_line":"    \u0027device_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":438,"context_line":"    \u0027keypairs\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_8bf129d0","line":435,"updated":"2017-01-10 13:01:15.000000000","message":"no, this one in the db model.","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":433,"context_line":"    \u0027fault\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":434,"context_line":"    \u0027pci_devices\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":435,"context_line":"    \u0027numa_topology\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":436,"context_line":"    \u0027pci_requests\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":437,"context_line":"    \u0027device_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":438,"context_line":"    \u0027keypairs\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":439,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_8b9f695e","line":436,"updated":"2017-01-10 13:01:15.000000000","message":"ditto","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":434,"context_line":"    \u0027pci_devices\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":435,"context_line":"    \u0027numa_topology\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":436,"context_line":"    \u0027pci_requests\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":437,"context_line":"    \u0027device_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":438,"context_line":"    \u0027keypairs\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":439,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_4b20214a","line":437,"updated":"2017-01-10 13:01:15.000000000","message":"I didn\u0027t find this in the db object mapping also.","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"fdef975ce28bd0aaca5cf4274498ff72ae53cad4","unresolved":false,"context_lines":[{"line_number":435,"context_line":"    \u0027numa_topology\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":436,"context_line":"    \u0027pci_requests\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":437,"context_line":"    \u0027device_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":438,"context_line":"    \u0027keypairs\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":439,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":34,"id":"ba5201f7_4bf901c8","line":438,"updated":"2017-01-10 13:01:15.000000000","message":"We didn\u0027t have keypairs mapping in the db model object I think","commit_id":"b48f90376c5bf4b243ce9fa47b30bbb172e09e80"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e9d04b357a8d1001f527165b0160fac4895b669c","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":425,"context_line":"}"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"JOINED_TABLE_QUERY_PARAMS \u003d {"},{"line_number":428,"context_line":"    \u0027block_device_mapping\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":429,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":430,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_fb236603","line":427,"range":{"start_line":427,"start_character":0,"end_line":427,"end_character":25},"updated":"2017-01-14 00:06:58.000000000","message":"Maybe we should call JOINED_TABLE_QUERY_PARAMS_FOR_SERVERS.\n\nThis is only about servers API.","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"ffa69719b0f9690d822bb659b8197e2a1ba896e2","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":425,"context_line":"}"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"JOINED_TABLE_QUERY_PARAMS \u003d {"},{"line_number":428,"context_line":"    \u0027block_device_mapping\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":429,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":430,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_56636f1a","line":427,"range":{"start_line":427,"start_character":0,"end_line":427,"end_character":25},"in_reply_to":"7a3c09a3_fb236603","updated":"2017-01-14 01:13:19.000000000","message":"A too long name makes the code look ugly... but I will try","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c7f237491094a3314993178c8a743c38337d5ca5","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":425,"context_line":"}"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"JOINED_TABLE_QUERY_PARAMS \u003d {"},{"line_number":428,"context_line":"    \u0027block_device_mapping\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":429,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":430,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":431,"context_line":"    \u0027system_metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":432,"context_line":"    \u0027info_cache\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":433,"context_line":"    \u0027security_groups\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":434,"context_line":"    \u0027pci_devices\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":435,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":38,"id":"7a3c09a3_64a0e391","line":435,"range":{"start_line":427,"start_character":0,"end_line":435,"end_character":1},"updated":"2017-01-13 03:53:02.000000000","message":"so here if we define schema as below then all will get rejected with 400 for any given value.\n\nJOINED_TABLE_QUERY_PARAMS \u003d {\n    \u0027block_device_mapping\u0027: {\u0027not\u0027: {}},\n    \u0027services\u0027: {\u0027not\u0027: {}},\n    \u0027metadata\u0027: {\u0027not\u0027: {}},\n    \u0027system_metadata\u0027: {\u0027not\u0027: {}},\n    \u0027info_cache\u0027: {\u0027not\u0027: {}},\n    \u0027security_groups\u0027: {\u0027not\u0027: {}},\n    \u0027pci_devices\u0027: {\u0027not\u0027: {}})\n}","commit_id":"d3edbd2736ebad0f78a44a214abf5204276ee5a5"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"20c66fee882cdaf510edc4527e8793f362d8ef7f","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":425,"context_line":"}"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"JOINED_TABLE_QUERY_PARAMS_SERVERS \u003d {"},{"line_number":428,"context_line":"    \u0027block_device_mapping\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":429,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":430,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a3c09a3_b5335461","line":427,"range":{"start_line":427,"start_character":0,"end_line":427,"end_character":33},"updated":"2017-01-17 06:07:39.000000000","message":"I\u0027m prefer to move this to https://review.openstack.org/#/c/408571/39/nova/api/openstack/compute/schemas/servers.py\n\nThis isn\u0027t a common stuff. We should move it back to the it own file.\n\nBut this can be done later.","commit_id":"60d90a1fcdf846db88d3e531c559a00bbbe297b2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"4f5bdc7a6ba8764c28d1f4dd2ed578087e4e0309","unresolved":false,"context_lines":[{"line_number":424,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":425,"context_line":"}"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"JOINED_TABLE_QUERY_PARAMS_SERVERS \u003d {"},{"line_number":428,"context_line":"    \u0027block_device_mapping\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":429,"context_line":"    \u0027services\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"},{"line_number":430,"context_line":"    \u0027metadata\u0027: multi_params({\u0027type\u0027: \u0027string\u0027}),"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a3c09a3_73f8214a","line":427,"range":{"start_line":427,"start_character":0,"end_line":427,"end_character":33},"in_reply_to":"7a3c09a3_b5335461","updated":"2017-01-17 08:52:28.000000000","message":"yes better to do in server schema.","commit_id":"60d90a1fcdf846db88d3e531c559a00bbbe297b2"}],"nova/api/validation/validators.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d7f3b272a255773da6d6279e1629e737983d89d6","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027regex\u0027)"},{"line_number":36,"context_line":"def _validate_regex_format(instance):"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        if isinstance(instance, six.text_type):"},{"line_number":39,"context_line":"            re.compile(instance)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_0b8a271b","line":36,"updated":"2016-12-28 07:23:53.000000000","message":"it is worth to add a unittest for this validator","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"6c0f1ad8964edf4867beb6dc781d26bd6cfe99dd","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027regex\u0027)"},{"line_number":36,"context_line":"def _validate_regex_format(instance):"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        if isinstance(instance, six.text_type):"},{"line_number":39,"context_line":"            re.compile(instance)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da4df55a_4b426f69","line":36,"in_reply_to":"da4df55a_0b8a271b","updated":"2016-12-28 07:38:09.000000000","message":"Done","commit_id":"7b0162c6f3674601147731f49236c6247e80dcf9"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"73cb1f848a0fb3180500942d18ab111b4f793a0a","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027regex\u0027)"},{"line_number":36,"context_line":"def _validate_regex_format(instance):"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        if isinstance(instance, six.text_type):"},{"line_number":39,"context_line":"            re.compile(instance)"},{"line_number":40,"context_line":"        else:"},{"line_number":41,"context_line":"            return False"},{"line_number":42,"context_line":"    except re.error:"},{"line_number":43,"context_line":"        return False"},{"line_number":44,"context_line":"    else:"},{"line_number":45,"context_line":"        return True"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027date-time\u0027)"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a3c09a3_44a61511","line":45,"range":{"start_line":37,"start_character":0,"end_line":45,"end_character":19},"updated":"2017-01-16 18:29:21.000000000","message":"nit: A little complex code here..\n\nHow about just liking\n\n if not isinstance(instance, six.text_type):\n     return False\n try:\n     re.compile(instance)\n except re.error:\n     return False\n return True\n\n?","commit_id":"60d90a1fcdf846db88d3e531c559a00bbbe297b2"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"35381d703f013e8fa1e783a603b2d40c0e6e2da1","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027regex\u0027)"},{"line_number":36,"context_line":"def _validate_regex_format(instance):"},{"line_number":37,"context_line":"    try:"},{"line_number":38,"context_line":"        if isinstance(instance, six.text_type):"},{"line_number":39,"context_line":"            re.compile(instance)"},{"line_number":40,"context_line":"        else:"},{"line_number":41,"context_line":"            return False"},{"line_number":42,"context_line":"    except re.error:"},{"line_number":43,"context_line":"        return False"},{"line_number":44,"context_line":"    else:"},{"line_number":45,"context_line":"        return True"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027date-time\u0027)"}],"source_content_type":"text/x-python","patch_set":39,"id":"7a3c09a3_898e2ece","line":45,"range":{"start_line":37,"start_character":0,"end_line":45,"end_character":19},"in_reply_to":"7a3c09a3_44a61511","updated":"2017-01-17 14:01:22.000000000","message":"Done","commit_id":"60d90a1fcdf846db88d3e531c559a00bbbe297b2"}],"nova/tests/unit/test_api_validation.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f114305b07080167e2a97baf7513666e60a0f523","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                                    expected_detail\u003ddetail)"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"class DisplayDescriptionTestCase(APIValidationTestCase):"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"    def setUp(self):"},{"line_number":682,"context_line":"        super(DisplayDescriptionTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_39a14fa4","line":679,"updated":"2017-01-04 07:43:23.000000000","message":"Emm....I\u0027m not sure what this tested for?","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0212361827749afcd9778ebfbb2b3dbf2454a101","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                                    expected_detail\u003ddetail)"},{"line_number":677,"context_line":""},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"class DisplayDescriptionTestCase(APIValidationTestCase):"},{"line_number":680,"context_line":""},{"line_number":681,"context_line":"    def setUp(self):"},{"line_number":682,"context_line":"        super(DisplayDescriptionTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_0b6432e2","line":679,"in_reply_to":"ba5201f7_39a14fa4","updated":"2017-01-04 08:01:34.000000000","message":"Done","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f114305b07080167e2a97baf7513666e60a0f523","unresolved":false,"context_lines":[{"line_number":1457,"context_line":"                                    expected_detail\u003ddetail)"},{"line_number":1458,"context_line":""},{"line_number":1459,"context_line":""},{"line_number":1460,"context_line":"class RegexTestCase(APIValidationTestCase):"},{"line_number":1461,"context_line":""},{"line_number":1462,"context_line":"    def setUp(self):"},{"line_number":1463,"context_line":"        super(APIValidationTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_790677cf","line":1460,"range":{"start_line":1460,"start_character":6,"end_line":1460,"end_character":19},"updated":"2017-01-04 07:43:23.000000000","message":"nit, RegexFormatTestCase.","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f114305b07080167e2a97baf7513666e60a0f523","unresolved":false,"context_lines":[{"line_number":1470,"context_line":"            },"},{"line_number":1471,"context_line":"        }"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"        @validation.schema(request_body_schema\u003dschema)"},{"line_number":1474,"context_line":"        def post(req, body):"},{"line_number":1475,"context_line":"            return \u0027Validation succeeded.\u0027"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"        self.post \u003d post"},{"line_number":1478,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_59c53359","line":1475,"range":{"start_line":1473,"start_character":8,"end_line":1475,"end_character":42},"updated":"2017-01-04 07:43:23.000000000","message":"So we need to move this out of this class, just like this https://review.openstack.org/#/c/389003/23/nova/tests/unit/test_api_validation.py@32\n\nThis is for the TODO note at https://github.com/openstack/nova/blob/df2fd4a252cecc1e1ef471c071e57526ddf65499/nova/api/validation/__init__.py#L44\n\nWe should write line 1481 like this, self.post(req, body\u003d....)","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"0212361827749afcd9778ebfbb2b3dbf2454a101","unresolved":false,"context_lines":[{"line_number":1470,"context_line":"            },"},{"line_number":1471,"context_line":"        }"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"        @validation.schema(request_body_schema\u003dschema)"},{"line_number":1474,"context_line":"        def post(req, body):"},{"line_number":1475,"context_line":"            return \u0027Validation succeeded.\u0027"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"        self.post \u003d post"},{"line_number":1478,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_ab5b262d","line":1475,"range":{"start_line":1473,"start_character":8,"end_line":1475,"end_character":42},"in_reply_to":"ba5201f7_59c53359","updated":"2017-01-04 08:01:34.000000000","message":"Done","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"a76db3ae2bc5fa20d8a5ca6f4c367d2f8ebc716c","unresolved":false,"context_lines":[{"line_number":1470,"context_line":"            },"},{"line_number":1471,"context_line":"        }"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"        @validation.schema(request_body_schema\u003dschema)"},{"line_number":1474,"context_line":"        def post(req, body):"},{"line_number":1475,"context_line":"            return \u0027Validation succeeded.\u0027"},{"line_number":1476,"context_line":""},{"line_number":1477,"context_line":"        self.post \u003d post"},{"line_number":1478,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"ba5201f7_2b4656bf","line":1475,"range":{"start_line":1473,"start_character":8,"end_line":1475,"end_character":42},"in_reply_to":"ba5201f7_59c53359","updated":"2017-01-04 08:18:39.000000000","message":"Sorry I didn\u0027t quite get this one","commit_id":"a1dddd1725408f80d8efcfc4f26fc03ada41cdef"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"fcec685d97852d20398a184ac4bb847d30db81f1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.api.openstack import api_version_request as api_version"},{"line_number":24,"context_line":"from nova.api import validation"},{"line_number":25,"context_line":"from nova.api.validation import parameter_types"},{"line_number":26,"context_line":"from nova.api.validation.parameter_types import multi_params"},{"line_number":27,"context_line":"from nova.api.validation import validators"},{"line_number":28,"context_line":"from nova import exception"},{"line_number":29,"context_line":"from nova import test"}],"source_content_type":"text/x-python","patch_set":26,"id":"ba5201f7_8b1013aa","line":26,"updated":"2017-01-04 15:33:11.000000000","message":"This isn\u0027t being used, hence pep8 error.","commit_id":"01929647916a536d5b02006378440cc82cc14ae6"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"738a82005f835e545b3253a94c3b1f92dca3e764","unresolved":false,"context_lines":[{"line_number":289,"context_line":"        res.sort()"},{"line_number":290,"context_line":"        self.assertEqual([\u0027bar\u0027, \u0027foo\u0027, \u0027foos\u0027], res)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def test_validate_request_with_invalid_regex_fails(self):"},{"line_number":293,"context_line":"        req \u003d fakes.HTTPRequest.blank(\"/tests?__foo__\u003dfoo\")"},{"line_number":294,"context_line":"        req.api_version_request \u003d api_version.APIVersionRequest(\"2.1\")"},{"line_number":295,"context_line":"        self.assertRaises(exception.ValidationError, self.controller.get, req)"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5201f7_f94b4729","line":292,"updated":"2017-01-11 06:04:17.000000000","message":"Sorry, maybe I didn\u0027t clear in the previous commit. We should add this untitest for servers API, probably in the nova/tests/unit/api/openstack/compute/test_serversV21.py","commit_id":"f195fc77ce453358d0747f74200c3d5107e9f0f4"}]}
