)]}'
{"nova/api/openstack/compute/keypairs.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"ce8f808606b8ceee782eab7fab152937f38ca88c","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.10\")    # noqa"},{"line_number":169,"context_line":"    @validation.query_params_schema(keypairs.delete_query_schema_v20,"},{"line_number":170,"context_line":"                                    \u00272.0\u0027, \u00272.9\u0027)"},{"line_number":171,"context_line":"    @wsgi.response(204)"},{"line_number":172,"context_line":"    @extensions.expected_errors(404)"},{"line_number":173,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_5aa14745","line":170,"range":{"start_line":170,"start_character":45,"end_line":170,"end_character":46},"updated":"2016-12-12 11:31:15.000000000","message":"should this be 2.10? this logic seems weird...\n\napi microversion 2.10 while schema use 2.0 to 2.9?","commit_id":"459d512c00617e43c8d11b4a28d5e64b64a01879"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"158a4f334869bc6ec057bcefff378103bb1bed01","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.10\")    # noqa"},{"line_number":169,"context_line":"    @validation.query_params_schema(keypairs.delete_query_schema_v20,"},{"line_number":170,"context_line":"                                    \u00272.0\u0027, \u00272.9\u0027)"},{"line_number":171,"context_line":"    @wsgi.response(204)"},{"line_number":172,"context_line":"    @extensions.expected_errors(404)"},{"line_number":173,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_c3ef32af","line":170,"range":{"start_line":170,"start_character":45,"end_line":170,"end_character":46},"in_reply_to":"3a71b18c_005f60e5","updated":"2016-12-12 12:31:09.000000000","message":"This does make me wonder if we could get away without specifying the range here, given that the controller will only run under the specific versions.","commit_id":"459d512c00617e43c8d11b4a28d5e64b64a01879"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"dc08c88e6ccb132642f0fdc2b26c00085c57b555","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.10\")    # noqa"},{"line_number":169,"context_line":"    @validation.query_params_schema(keypairs.delete_query_schema_v20,"},{"line_number":170,"context_line":"                                    \u00272.0\u0027, \u00272.9\u0027)"},{"line_number":171,"context_line":"    @wsgi.response(204)"},{"line_number":172,"context_line":"    @extensions.expected_errors(404)"},{"line_number":173,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_005f60e5","line":170,"range":{"start_line":170,"start_character":45,"end_line":170,"end_character":46},"in_reply_to":"3a71b18c_5aa14745","updated":"2016-12-12 12:06:56.000000000","message":"emm...right, seems I did some strange thing","commit_id":"459d512c00617e43c8d11b4a28d5e64b64a01879"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7c46148513c368298fb4244c8cf5514fbab2c7eb","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.10\")    # noqa"},{"line_number":169,"context_line":"    @validation.query_params_schema(keypairs.delete_query_schema_v20,"},{"line_number":170,"context_line":"                                    \u00272.0\u0027, \u00272.9\u0027)"},{"line_number":171,"context_line":"    @wsgi.response(204)"},{"line_number":172,"context_line":"    @extensions.expected_errors(404)"},{"line_number":173,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_e9796ffd","line":170,"range":{"start_line":170,"start_character":45,"end_line":170,"end_character":46},"in_reply_to":"3a71b18c_830d3a40","updated":"2016-12-12 13:17:25.000000000","message":"maybe add some test? as the unit passed here","commit_id":"459d512c00617e43c8d11b4a28d5e64b64a01879"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f21442230cea9939a4cb1fd11597ec86430c86a3","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.10\")    # noqa"},{"line_number":169,"context_line":"    @validation.query_params_schema(keypairs.delete_query_schema_v20,"},{"line_number":170,"context_line":"                                    \u00272.0\u0027, \u00272.9\u0027)"},{"line_number":171,"context_line":"    @wsgi.response(204)"},{"line_number":172,"context_line":"    @extensions.expected_errors(404)"},{"line_number":173,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_830d3a40","line":170,"range":{"start_line":170,"start_character":45,"end_line":170,"end_character":46},"in_reply_to":"3a71b18c_c3ef32af","updated":"2016-12-12 12:41:12.000000000","message":"good idea!","commit_id":"459d512c00617e43c8d11b4a28d5e64b64a01879"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"19d716f7c33d46dd2b405f144c3c0071d3e4bdb0","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.10\")    # noqa"},{"line_number":169,"context_line":"    @validation.query_params_schema(keypairs.delete_query_schema_v20,"},{"line_number":170,"context_line":"                                    \u00272.0\u0027, \u00272.9\u0027)"},{"line_number":171,"context_line":"    @wsgi.response(204)"},{"line_number":172,"context_line":"    @extensions.expected_errors(404)"},{"line_number":173,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_4eaf1781","line":170,"range":{"start_line":170,"start_character":45,"end_line":170,"end_character":46},"updated":"2016-12-14 10:50:44.000000000","message":"seems comments not addressed in last patch?\nsorry, am I missing some comments?","commit_id":"3c471eceb699b8de3c616fd9e6b927fc087159d8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"36c5f443149d4e85136e9341ae9a8a31457d0fec","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @wsgi.Controller.api_version(\"2.10\")    # noqa"},{"line_number":169,"context_line":"    @validation.query_params_schema(keypairs.delete_query_schema_v20,"},{"line_number":170,"context_line":"                                    \u00272.0\u0027, \u00272.9\u0027)"},{"line_number":171,"context_line":"    @wsgi.response(204)"},{"line_number":172,"context_line":"    @extensions.expected_errors(404)"},{"line_number":173,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_d4b576ee","line":170,"range":{"start_line":170,"start_character":45,"end_line":170,"end_character":46},"in_reply_to":"1a6eadb0_4eaf1781","updated":"2016-12-14 11:33:10.000000000","message":"oops, I will address it.","commit_id":"3c471eceb699b8de3c616fd9e6b927fc087159d8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f60a76b98d36f047aac1993d16c67c9afe729ce1","unresolved":false,"context_lines":[{"line_number":268,"context_line":"                    target\u003d{\u0027user_id\u0027: user_id,"},{"line_number":269,"context_line":"                            \u0027project_id\u0027: context.project_id})"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.35\u0027):"},{"line_number":272,"context_line":"            limit, marker \u003d common.get_limit_and_marker(req)"},{"line_number":273,"context_line":"        else:"},{"line_number":274,"context_line":"            limit \u003d marker \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_309cf2bf","line":271,"updated":"2017-01-04 14:20:08.000000000","message":"Part of me thinks remove this, now the schema deals with strip out the limits and markers, but I think that looses the semantic information this gives us, so I guess we should keep it.","commit_id":"6977d4c09cdb037c7c8a7bd5edf3a64eb8654d13"}],"nova/api/openstack/compute/schemas/keypairs.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0a55d47a19bf50a8b1e8610582abeb60ccca3f17","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":98,"context_line":"}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"index_query_schema_v210 \u003d copy.deepcopy(index_query_schema_v20)"},{"line_number":101,"context_line":"index_query_schema_v210[\u0027properties\u0027] \u003d {"},{"line_number":102,"context_line":"    \u0027user_id\u0027: parameter_types.multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":103,"context_line":"}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"index_query_schema_v235 \u003d copy.deepcopy(index_query_schema_v210)"},{"line_number":106,"context_line":"index_query_schema_v235[\u0027properties\u0027].update("},{"line_number":107,"context_line":"    parameter_types.pagination_parameters)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"show_query_schema_v20 \u003d index_query_schema_v20"},{"line_number":110,"context_line":"show_query_schema_v210 \u003d index_query_schema_v210"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a77a97e_7c75eac8","line":107,"range":{"start_line":100,"start_character":0,"end_line":107,"end_character":42},"updated":"2016-11-19 01:23:40.000000000","message":"There was some discussion about deepcopy+update vs. duplicated code on microversioned json-schema on both Nova and Tempest sides.\n\nWe tend to prefer duplicated code because that would be readable for developers. Actually the above case is very simple json-schema but the readability seems less.\n\nSo it is a nice chance to implement it like\n\n index_query_schema_v210 \u003d {\n    \u0027type\u0027: \u0027object\u0027,\n    \u0027properties\u0027: {\n        {\u0027user_id\u0027: parameter_types.multi_params({\u0027type\u0027: \u0027string\u0027})}\n    },\n    \u0027additionalProperties\u0027: True\n }\n\n ..","commit_id":"feebeb30659a2bd4f708de53461d308c2a84cc0d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"7fbb5f059fcbcc73f3276d00f752107c17ebb2cc","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":98,"context_line":"}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"index_query_schema_v210 \u003d copy.deepcopy(index_query_schema_v20)"},{"line_number":101,"context_line":"index_query_schema_v210[\u0027properties\u0027] \u003d {"},{"line_number":102,"context_line":"    \u0027user_id\u0027: parameter_types.multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":103,"context_line":"}"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"index_query_schema_v235 \u003d copy.deepcopy(index_query_schema_v210)"},{"line_number":106,"context_line":"index_query_schema_v235[\u0027properties\u0027].update("},{"line_number":107,"context_line":"    parameter_types.pagination_parameters)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"show_query_schema_v20 \u003d index_query_schema_v20"},{"line_number":110,"context_line":"show_query_schema_v210 \u003d index_query_schema_v210"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_2d7318b3","line":107,"range":{"start_line":100,"start_character":0,"end_line":107,"end_character":42},"in_reply_to":"7a77a97e_7c75eac8","updated":"2016-11-23 07:25:04.000000000","message":"yea, for the short schema, maybe avoid to use \u0027deepcopy\u0027 is better. let me update it.","commit_id":"feebeb30659a2bd4f708de53461d308c2a84cc0d"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c8ac06d112836ce69f35fbfb398c3db3d46851d0","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":106,"context_line":"}"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"index_query_schema_v235 \u003d copy.deepcopy(index_query_schema_v210)"},{"line_number":109,"context_line":"index_query_schema_v235[\u0027properties\u0027].update("},{"line_number":110,"context_line":"    parameter_types.pagination_parameters)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"show_query_schema_v20 \u003d index_query_schema_v20"},{"line_number":113,"context_line":"show_query_schema_v210 \u003d index_query_schema_v210"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_7cb8682b","line":110,"range":{"start_line":108,"start_character":0,"end_line":110,"end_character":42},"updated":"2016-12-18 12:58:05.000000000","message":"Why don\u0027t we avoid to use deepcopy and update here?","commit_id":"e0de88c3b4fb91fb3be312c76951ff02f326a6dd"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9971af027583f1d247f205cdbede228f6de655af","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":106,"context_line":"}"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"index_query_schema_v235 \u003d copy.deepcopy(index_query_schema_v210)"},{"line_number":109,"context_line":"index_query_schema_v235[\u0027properties\u0027].update("},{"line_number":110,"context_line":"    parameter_types.pagination_parameters)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"show_query_schema_v20 \u003d index_query_schema_v20"},{"line_number":113,"context_line":"show_query_schema_v210 \u003d index_query_schema_v210"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_2c900243","line":110,"range":{"start_line":108,"start_character":0,"end_line":110,"end_character":42},"in_reply_to":"1a6eadb0_4e7209af","updated":"2016-12-21 08:01:35.000000000","message":"I also like to avoid deepcopy to make schema more readable. I think we can still use parameter_types.pagination_parameters with .update(","commit_id":"e0de88c3b4fb91fb3be312c76951ff02f326a6dd"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ee7b47c124cd669ce49641f9ab696f02cc1800b1","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":106,"context_line":"}"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"index_query_schema_v235 \u003d copy.deepcopy(index_query_schema_v210)"},{"line_number":109,"context_line":"index_query_schema_v235[\u0027properties\u0027].update("},{"line_number":110,"context_line":"    parameter_types.pagination_parameters)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"show_query_schema_v20 \u003d index_query_schema_v20"},{"line_number":113,"context_line":"show_query_schema_v210 \u003d index_query_schema_v210"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a6eadb0_4e7209af","line":110,"range":{"start_line":108,"start_character":0,"end_line":110,"end_character":42},"in_reply_to":"1a6eadb0_7cb8682b","updated":"2016-12-19 06:24:35.000000000","message":"If we avoid to use deepcopy, then we can\u0027t reuse the \"parameter_types.pagination_parameters\"","commit_id":"e0de88c3b4fb91fb3be312c76951ff02f326a6dd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f60a76b98d36f047aac1993d16c67c9afe729ce1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"index_query_schema_v20 \u003d {"},{"line_number":95,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":96,"context_line":"    \u0027properties\u0027: {},"},{"line_number":97,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":98,"context_line":"}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"index_query_schema_v210 \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_101a8e6e","line":97,"updated":"2017-01-04 14:20:08.000000000","message":"Hmm, this looks meaningless, but in reality it causes us to strip out all the params that are passed in. But I am fine with that.","commit_id":"6977d4c09cdb037c7c8a7bd5edf3a64eb8654d13"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5b13d5a27bed70e35537f60fda92136189643c84","unresolved":false,"context_lines":[{"line_number":94,"context_line":"index_query_schema_v20 \u003d {"},{"line_number":95,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":96,"context_line":"    \u0027properties\u0027: {},"},{"line_number":97,"context_line":"    \u0027additionalProperties\u0027: True"},{"line_number":98,"context_line":"}"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"index_query_schema_v210 \u003d {"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_47b1b7e0","line":97,"in_reply_to":"ba5201f7_101a8e6e","updated":"2017-01-04 17:22:14.000000000","message":"Yeah this is just for backward compat I think.","commit_id":"6977d4c09cdb037c7c8a7bd5edf3a64eb8654d13"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5b1e4b76dfa89cf008675ea829b05ad736855dcb","unresolved":false,"context_lines":[{"line_number":418,"context_line":"}"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"pagination_parameters \u003d {"},{"line_number":421,"context_line":"    \u0027limit\u0027: multi_params({\u0027type\u0027: \u0027string\u0027, \u0027format\u0027: \u0027integer-str\u0027}),"},{"line_number":422,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":423,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_6ae67bb1","line":421,"range":{"start_line":421,"start_character":45,"end_line":421,"end_character":68},"updated":"2016-12-26 11:52:30.000000000","message":"Please see the later point for this new format.","commit_id":"19d54a1507ea7bd28f1b7c3db327122ec353ea6f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f60a76b98d36f047aac1993d16c67c9afe729ce1","unresolved":false,"context_lines":[{"line_number":417,"context_line":"    \"pattern\": \"^[^,/]*$\""},{"line_number":418,"context_line":"}"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"pagination_parameters \u003d {"},{"line_number":421,"context_line":"    \u0027limit\u0027: multi_params(non_negative_integer),"},{"line_number":422,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":423,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_f0350ada","line":420,"updated":"2017-01-04 14:20:08.000000000","message":"Nit: not sure its quite the same as the parameter types, but this seems like a good place to put this.","commit_id":"6977d4c09cdb037c7c8a7bd5edf3a64eb8654d13"}],"nova/api/validation/validators.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"5b1e4b76dfa89cf008675ea829b05ad736855dcb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from nova import utils"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027integer-str\u0027)"},{"line_number":37,"context_line":"def _validate_integer_str_format(instance):"},{"line_number":38,"context_line":"    try:"},{"line_number":39,"context_line":"        utils.validate_integer(instance, \u0027\u0027)"},{"line_number":40,"context_line":"    except exception.InvalidInput:"},{"line_number":41,"context_line":"        return False"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    return True"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027date-time\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_2af0f366","line":43,"range":{"start_line":36,"start_character":0,"end_line":43,"end_character":15},"updated":"2016-12-26 11:52:30.000000000","message":"It is nice to use\n\n \u0027pattern\u0027: \u0027^[0-9]*$\u0027\n\ninstead of adding a new format which is different from standard JSON-Schema way.","commit_id":"19d54a1507ea7bd28f1b7c3db327122ec353ea6f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"109db1d1da03a5b37d8279fda9a8e386d162dffd","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from nova import utils"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027integer-str\u0027)"},{"line_number":37,"context_line":"def _validate_integer_str_format(instance):"},{"line_number":38,"context_line":"    try:"},{"line_number":39,"context_line":"        utils.validate_integer(instance, \u0027\u0027)"},{"line_number":40,"context_line":"    except exception.InvalidInput:"},{"line_number":41,"context_line":"        return False"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    return True"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"@jsonschema.FormatChecker.cls_checks(\u0027date-time\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_75d2d25d","line":43,"range":{"start_line":36,"start_character":0,"end_line":43,"end_character":15},"in_reply_to":"da4df55a_2af0f366","updated":"2016-12-27 04:48:50.000000000","message":"ah, good point, thanks","commit_id":"19d54a1507ea7bd28f1b7c3db327122ec353ea6f"}],"nova/tests/unit/api/openstack/compute/test_keypairs.py":[{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"073309789b0ef2a520690d58016a62166308f292","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            self.base_url + \u0027/os-keypairs?limit\u003dabc\u0026marker\u003dfake_marker\u0027,"},{"line_number":617,"context_line":"            version\u003dself.wsgi_api_version, use_admin_context\u003dTrue)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        self.assertRaises(exception.ValidationError, self.controller.index,"},{"line_number":620,"context_line":"                          req)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    @mock.patch(\"nova.db.key_pair_get_all_by_user\")"},{"line_number":623,"context_line":"    def test_keypair_list_limit_and_marker_invalid_in_old_microversion("}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_d666d7eb","line":620,"range":{"start_line":619,"start_character":0,"end_line":620,"end_character":30},"updated":"2017-01-06 21:56:13.000000000","message":"Do we eventually transform these validation errors higher up?\n\nI\u0027m asking because they seem less user friendly than they were before. For example:\n\nBefore:\n- webob.exc.HTTPBadRequest: Invalid input received: limit must be an integer\n\nAfter:\n- nova.exception.ValidationError: Invalid input for query parameters 0. Value: abc. u\u0027abc\u0027 does not match \u0027^[0-9]*$\u0027","commit_id":"6977d4c09cdb037c7c8a7bd5edf3a64eb8654d13"},{"author":{"_account_id":16907,"name":"Diana Clarke","email":"diana.joan.clarke@gmail.com","username":"diana-clarke"},"change_message_id":"f7b8299f3ee4cd5ead4c299e584c2621e6dc16eb","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            self.base_url + \u0027/os-keypairs?limit\u003dabc\u0026marker\u003dfake_marker\u0027,"},{"line_number":617,"context_line":"            version\u003dself.wsgi_api_version, use_admin_context\u003dTrue)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        self.assertRaises(exception.ValidationError, self.controller.index,"},{"line_number":620,"context_line":"                          req)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    @mock.patch(\"nova.db.key_pair_get_all_by_user\")"},{"line_number":623,"context_line":"    def test_keypair_list_limit_and_marker_invalid_in_old_microversion("}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_1dfe14ae","line":620,"range":{"start_line":619,"start_character":0,"end_line":620,"end_character":30},"in_reply_to":"ba5201f7_8d5176db","updated":"2017-01-11 17:07:56.000000000","message":"I added the follow bug for the error messages.\n\n- Query parameter validation using json schema - error messages\n- https://bugs.launchpad.net/nova/+bug/1655710","commit_id":"6977d4c09cdb037c7c8a7bd5edf3a64eb8654d13"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"b2f740d84f3846045e462e993438c070d8bba973","unresolved":false,"context_lines":[{"line_number":616,"context_line":"            self.base_url + \u0027/os-keypairs?limit\u003dabc\u0026marker\u003dfake_marker\u0027,"},{"line_number":617,"context_line":"            version\u003dself.wsgi_api_version, use_admin_context\u003dTrue)"},{"line_number":618,"context_line":""},{"line_number":619,"context_line":"        self.assertRaises(exception.ValidationError, self.controller.index,"},{"line_number":620,"context_line":"                          req)"},{"line_number":621,"context_line":""},{"line_number":622,"context_line":"    @mock.patch(\"nova.db.key_pair_get_all_by_user\")"},{"line_number":623,"context_line":"    def test_keypair_list_limit_and_marker_invalid_in_old_microversion("}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_8d5176db","line":620,"range":{"start_line":619,"start_character":0,"end_line":620,"end_character":30},"in_reply_to":"ba5201f7_d666d7eb","updated":"2017-01-09 13:18:50.000000000","message":"I think we don\u0027t transform, agree this is not as good as previous error\n\nif we really want, maybe need some handling in schema validation so the error can be transformed\n\nwill consider some sample and submit a change if have any idea on it","commit_id":"6977d4c09cdb037c7c8a7bd5edf3a64eb8654d13"}]}
