)]}'
{"nova/api/openstack/placement/util.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c187c098a742ff526c84c7ca45d718c11870736e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    \"\"\""},{"line_number":307,"context_line":"    ret \u003d set(substr.strip() for substr in val.split(\u0027,\u0027))"},{"line_number":308,"context_line":"    if not all(trait for trait in ret):"},{"line_number":309,"context_line":"        msg \u003d _(\u0027Invalid query string parameters: Expected \"required\" \u0027"},{"line_number":310,"context_line":"                \u0027parameter value of the form: HW_CPU_X86_VMX,CUSTOM_MAGIC. \u0027"},{"line_number":311,"context_line":"                \u0027Got: \"%s\"\u0027) % val"},{"line_number":312,"context_line":"        raise webob.exc.HTTPBadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f93b717_2e86d867","line":309,"range":{"start_line":309,"start_character":59,"end_line":309,"end_character":69},"updated":"2018-01-30 23:10:01.000000000","message":"This broke two functional tests.","commit_id":"0788f422297282b711432a576ea7aca263c4ee2b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3e943914cfec66641c374e07d95983ff08ead377","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    \"\"\""},{"line_number":307,"context_line":"    ret \u003d set(substr.strip() for substr in val.split(\u0027,\u0027))"},{"line_number":308,"context_line":"    if not all(trait for trait in ret):"},{"line_number":309,"context_line":"        msg \u003d _(\u0027Invalid query string parameters: Expected required \u0027"},{"line_number":310,"context_line":"                \u0027parameter value of the form: HW_CPU_X86_VMX,CUSTOM_MAGIC. \u0027"},{"line_number":311,"context_line":"                \u0027Got: %s\u0027) % val"},{"line_number":312,"context_line":"        raise webob.exc.HTTPBadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_48d22502","line":309,"updated":"2018-01-31 15:05:36.000000000","message":"Uck, now this is confusing.  Which required parameter?  Oh, the parameter named \"required\".\n\nThe nit being fixed was the backslashes.  Let\u0027s toggle the outer quotes to double quotes so we can *just* remove the backslashes.  (Taking the double quotes off of %s below is probably also okay.)","commit_id":"2d413f8033ad78408587824756380caf8030fcc7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ec431065c0c9260e238b6b57e1e842a26f9fdc22","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    \"\"\""},{"line_number":307,"context_line":"    ret \u003d set(substr.strip() for substr in val.split(\u0027,\u0027))"},{"line_number":308,"context_line":"    if not all(trait for trait in ret):"},{"line_number":309,"context_line":"        msg \u003d _(\u0027Invalid query string parameters: Expected required \u0027"},{"line_number":310,"context_line":"                \u0027parameter value of the form: HW_CPU_X86_VMX,CUSTOM_MAGIC. \u0027"},{"line_number":311,"context_line":"                \u0027Got: %s\u0027) % val"},{"line_number":312,"context_line":"        raise webob.exc.HTTPBadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_48dc65e3","line":309,"in_reply_to":"5f93b717_48d22502","updated":"2018-01-31 15:07:39.000000000","message":"Yeah agree \"required\" needs to be quoted one way or another.","commit_id":"2d413f8033ad78408587824756380caf8030fcc7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"2020a6624059eca09e457b7e24d772710da74c96","unresolved":false,"context_lines":[{"line_number":306,"context_line":"    \"\"\""},{"line_number":307,"context_line":"    ret \u003d set(substr.strip() for substr in val.split(\u0027,\u0027))"},{"line_number":308,"context_line":"    if not all(trait for trait in ret):"},{"line_number":309,"context_line":"        msg \u003d _(\u0027Invalid query string parameters: Expected required \u0027"},{"line_number":310,"context_line":"                \u0027parameter value of the form: HW_CPU_X86_VMX,CUSTOM_MAGIC. \u0027"},{"line_number":311,"context_line":"                \u0027Got: %s\u0027) % val"},{"line_number":312,"context_line":"        raise webob.exc.HTTPBadRequest(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f93b717_a8d87bee","line":309,"in_reply_to":"5f93b717_48dc65e3","updated":"2018-02-01 00:16:46.000000000","message":"yea, it is confusing. I remove it since I find the double-quote will have strange output in the placement API. Finally, you will get error info with \\\"\u0027 for all the double quote.","commit_id":"2d413f8033ad78408587824756380caf8030fcc7"}]}
