)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"c86bfb2ce1b429e97d8c95903998a2d6273007b1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Improve some of the validation messages."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Iabf8808a840e927307bbcae4cd41790af3d79a9e"},{"line_number":19,"context_line":"Fixes: bug #1076813"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAM3%2F%2FEyE%3D","line":19,"updated":"2013-02-07 22:21:28.000000000","message":"nit:This line should be on L17","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f20471cf868c150f0c7c2d5516cc1c6b280621c0","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Improve some of the validation messages."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: Iabf8808a840e927307bbcae4cd41790af3d79a9e"},{"line_number":19,"context_line":"Fixes: bug #1076813"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAM3%2F%2FEfk%3D","line":19,"in_reply_to":"AAAAM3%2F%2FEyE%3D","updated":"2013-02-08 16:15:02.000000000","message":"Done","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"}],"quantum/api/v2/attributes.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":34,"context_line":"def _verify_dict_keys(expected_keys, target_dict):"},{"line_number":35,"context_line":"    if not isinstance(target_dict, dict):"},{"line_number":36,"context_line":"        msg \u003d _(\"Invalid input. \u0027%(target_dict)s\u0027 must be a dictionary with \""},{"line_number":37,"context_line":"                \"keys: %(expected_keys)s\") % locals()"},{"line_number":38,"context_line":"        return msg"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    provided_keys \u003d target_dict.keys()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FEEc%3D","line":37,"updated":"2013-02-08 12:16:28.000000000","message":"From very recent discussion the mailing list, use of locals() is going to be banned.\n\nDevelopers caught using locals() will be brought to a secret prison camp in Siberia and forced to code in Visual Basic for the rest of their lifes.\n\nFor the time being it seem like you should use an explicit dict.","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f20471cf868c150f0c7c2d5516cc1c6b280621c0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"def _verify_dict_keys(expected_keys, target_dict):"},{"line_number":35,"context_line":"    if not isinstance(target_dict, dict):"},{"line_number":36,"context_line":"        msg \u003d _(\"Invalid input. \u0027%(target_dict)s\u0027 must be a dictionary with \""},{"line_number":37,"context_line":"                \"keys: %(expected_keys)s\") % locals()"},{"line_number":38,"context_line":"        return msg"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    provided_keys \u003d target_dict.keys()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FDtY%3D","line":37,"in_reply_to":"AAAAM3%2F%2FEEc%3D","updated":"2013-02-08 17:07:53.000000000","message":"Done","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f20471cf868c150f0c7c2d5516cc1c6b280621c0","unresolved":false,"context_lines":[{"line_number":34,"context_line":"def _verify_dict_keys(expected_keys, target_dict):"},{"line_number":35,"context_line":"    if not isinstance(target_dict, dict):"},{"line_number":36,"context_line":"        msg \u003d _(\"Invalid input. \u0027%(target_dict)s\u0027 must be a dictionary with \""},{"line_number":37,"context_line":"                \"keys: %(expected_keys)s\") % locals()"},{"line_number":38,"context_line":"        return msg"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    provided_keys \u003d target_dict.keys()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FDx0%3D","line":37,"in_reply_to":"AAAAM3%2F%2FEEc%3D","updated":"2013-02-08 16:15:02.000000000","message":"Thanks, I saw that discussion. Will comply.","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"80a4c15a104be4bcb5c63516e234b99acc7f83bd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    if not isinstance(data, list):"},{"line_number":105,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid data format for IP pool \""},{"line_number":106,"context_line":"                \"(expected a list)\") % data"},{"line_number":107,"context_line":"        LOG.debug(msg)"},{"line_number":108,"context_line":"        return msg"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FEuI%3D","line":106,"updated":"2013-02-07 23:13:47.000000000","message":"You\u0027re making the assumption that the API requestor submitted the request as JSON.  If they\u0027re using XML, they will be serializing their request differently.","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f20471cf868c150f0c7c2d5516cc1c6b280621c0","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    if not isinstance(data, list):"},{"line_number":105,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid data format for IP pool \""},{"line_number":106,"context_line":"                \"(expected a list)\") % data"},{"line_number":107,"context_line":"        LOG.debug(msg)"},{"line_number":108,"context_line":"        return msg"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FDxw%3D","line":106,"in_reply_to":"AAAAM3%2F%2FEEY%3D","updated":"2013-02-08 16:15:02.000000000","message":"I understand, but what wording should I use that will make sense to both JSON and XML requestors?","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    if not isinstance(data, list):"},{"line_number":105,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid data format for IP pool \""},{"line_number":106,"context_line":"                \"(expected a list)\") % data"},{"line_number":107,"context_line":"        LOG.debug(msg)"},{"line_number":108,"context_line":"        return msg"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FEEY%3D","line":106,"in_reply_to":"AAAAM3%2F%2FEuI%3D","updated":"2013-02-08 12:16:28.000000000","message":"This is actually within the API, so serialization/deserialization will always end up in a list.\n\nHowever I agree with Mark that a python list looks pretty much like a JSON list. Not so much for XML","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"80a4c15a104be4bcb5c63516e234b99acc7f83bd","unresolved":false,"context_lines":[{"line_number":151,"context_line":"def _validate_nameservers(data, valid_values\u003dNone):"},{"line_number":152,"context_line":"    if not hasattr(data, \u0027__iter__\u0027):"},{"line_number":153,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid data format for nameserver \""},{"line_number":154,"context_line":"                \"(expected something iterable, like a list)\") % data"},{"line_number":155,"context_line":"        LOG.debug(msg)"},{"line_number":156,"context_line":"        return msg"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FEtY%3D","line":154,"updated":"2013-02-07 23:13:47.000000000","message":"This error message is too specific to our underlying python implementation and you\u0027re commenting on the type after the request is deserialized.  The original error message while imprecise is probably the best option because XML does not have the concept of an iterable.","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f20471cf868c150f0c7c2d5516cc1c6b280621c0","unresolved":false,"context_lines":[{"line_number":151,"context_line":"def _validate_nameservers(data, valid_values\u003dNone):"},{"line_number":152,"context_line":"    if not hasattr(data, \u0027__iter__\u0027):"},{"line_number":153,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid data format for nameserver \""},{"line_number":154,"context_line":"                \"(expected something iterable, like a list)\") % data"},{"line_number":155,"context_line":"        LOG.debug(msg)"},{"line_number":156,"context_line":"        return msg"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FDtQ%3D","line":154,"in_reply_to":"AAAAM3%2F%2FEtY%3D","updated":"2013-02-08 17:07:53.000000000","message":"Done","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"80a4c15a104be4bcb5c63516e234b99acc7f83bd","unresolved":false,"context_lines":[{"line_number":175,"context_line":"def _validate_hostroutes(data, valid_values\u003dNone):"},{"line_number":176,"context_line":"    if not isinstance(data, list):"},{"line_number":177,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid data format for hostroute \""},{"line_number":178,"context_line":"                \"(expected a list)\") % data"},{"line_number":179,"context_line":"        LOG.debug(msg)"},{"line_number":180,"context_line":"        return msg"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FEtU%3D","line":178,"updated":"2013-02-07 23:13:47.000000000","message":"ditto","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f20471cf868c150f0c7c2d5516cc1c6b280621c0","unresolved":false,"context_lines":[{"line_number":175,"context_line":"def _validate_hostroutes(data, valid_values\u003dNone):"},{"line_number":176,"context_line":"    if not isinstance(data, list):"},{"line_number":177,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is not a valid data format for hostroute \""},{"line_number":178,"context_line":"                \"(expected a list)\") % data"},{"line_number":179,"context_line":"        LOG.debug(msg)"},{"line_number":180,"context_line":"        return msg"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FDtM%3D","line":178,"in_reply_to":"AAAAM3%2F%2FEtU%3D","updated":"2013-02-08 17:07:53.000000000","message":"Done","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"}],"quantum/tests/unit/test_attributes.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"c86bfb2ce1b429e97d8c95903998a2d6273007b1","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                           \u0027f3eeab00-8367-4524-b662-55e64d4cacb5\u0027,"},{"line_number":403,"context_line":"                           \u0027e5069610-744b-42a7-8bd8-ceac1a229cd4\u0027]"},{"line_number":404,"context_line":"        msg \u003d attributes._validate_uuid_list(duplicate_uuids)"},{"line_number":405,"context_line":"        error \u003d \"Duplicate items in the list: \u0027%s\u0027\" %\\"},{"line_number":406,"context_line":"                \u0027, \u0027.join(duplicate_uuids)"},{"line_number":407,"context_line":"        self.assertEquals(msg, error)"},{"line_number":408,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FEx0%3D","line":405,"updated":"2013-02-07 22:21:28.000000000","message":"nit: we should avoid to use \\","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"f20471cf868c150f0c7c2d5516cc1c6b280621c0","unresolved":false,"context_lines":[{"line_number":402,"context_line":"                           \u0027f3eeab00-8367-4524-b662-55e64d4cacb5\u0027,"},{"line_number":403,"context_line":"                           \u0027e5069610-744b-42a7-8bd8-ceac1a229cd4\u0027]"},{"line_number":404,"context_line":"        msg \u003d attributes._validate_uuid_list(duplicate_uuids)"},{"line_number":405,"context_line":"        error \u003d \"Duplicate items in the list: \u0027%s\u0027\" %\\"},{"line_number":406,"context_line":"                \u0027, \u0027.join(duplicate_uuids)"},{"line_number":407,"context_line":"        self.assertEquals(msg, error)"},{"line_number":408,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2FEfU%3D","line":405,"in_reply_to":"AAAAM3%2F%2FEx0%3D","updated":"2013-02-08 16:15:02.000000000","message":"Done","commit_id":"d838f53bd4cba708610b5d7e10367cc042c6ef14"}]}
