)]}'
{"nova/tests/integrated/test_api_samples.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"be0b85758581624a424749110a6ad265a91c16f4","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                    if key not in ex_keys:"},{"line_number":183,"context_line":"                        res_delta.append(key)"},{"line_number":184,"context_line":"                raise NoMatch(_(\u0027Dictionary key mismatch:\\n\u0027"},{"line_number":185,"context_line":"                              \u0027Template: %(ex_keys)s\\nResponse: %(res_keys)s\u0027)"},{"line_number":186,"context_line":"                              % locals())"},{"line_number":187,"context_line":"            for key in ex_keys:"},{"line_number":188,"context_line":"                res \u003d self._compare_result(subs, expected[key], result[key])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bkk4%3D","line":185,"updated":"2013-02-27 00:52:50.000000000","message":"since you created ex_delta and res_delta, I suppose you want to show them here, am I right? otherwise no need to calculate the deltas","commit_id":"9f1fd6991d17e79bc9493fc745677f66caa9838f"},{"author":{"_account_id":4598,"name":"Giampaolo Lauria","email":"lauria@us.ibm.com","username":"lauria"},"change_message_id":"b8428ea1eb4f572667ead4483d618ab27833409d","unresolved":false,"context_lines":[{"line_number":182,"context_line":"                    if key not in ex_keys:"},{"line_number":183,"context_line":"                        res_delta.append(key)"},{"line_number":184,"context_line":"                raise NoMatch(_(\u0027Dictionary key mismatch:\\n\u0027"},{"line_number":185,"context_line":"                              \u0027Template: %(ex_keys)s\\nResponse: %(res_keys)s\u0027)"},{"line_number":186,"context_line":"                              % locals())"},{"line_number":187,"context_line":"            for key in ex_keys:"},{"line_number":188,"context_line":"                res \u003d self._compare_result(subs, expected[key], result[key])"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAM3%2F%2Bkfo%3D","line":185,"in_reply_to":"AAAAM3%2F%2Bkk4%3D","updated":"2013-02-27 01:35:46.000000000","message":"Mauro, thanks. Yes, mine is a typo. Thanks for catching it!","commit_id":"9f1fd6991d17e79bc9493fc745677f66caa9838f"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"80d30d11a5fcc718fff6c6494248bcde05cc67c6","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    if key not in ex_keys:"},{"line_number":184,"context_line":"                        res_delta.append(key)"},{"line_number":185,"context_line":"                raise NoMatch(_(\u0027Dictionary key mismatch:\\n\u0027"},{"line_number":186,"context_line":"                             \u0027Template: %(ex_delta)s\\nResponse: %(res_delta)s\u0027)"},{"line_number":187,"context_line":"                             % locals())"},{"line_number":188,"context_line":"            for key in ex_keys:"},{"line_number":189,"context_line":"                res \u003d self._compare_result(subs, expected[key], result[key])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bjrg%3D","line":186,"updated":"2013-02-27 14:33:38.000000000","message":"I think this output could be a bit confusing for someone the first time they see it.  Something like \u0027Keys in template but not in response:\u0027 and the reverse are a bit more clear, though verbose.","commit_id":"028d05027971b91d3810513a06d76025581717aa"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b67bb352dd1d3945d6a664d0dd6328996b41c7cb","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    if key not in ex_keys:"},{"line_number":184,"context_line":"                        res_delta.append(key)"},{"line_number":185,"context_line":"                raise NoMatch(_(\u0027Dictionary key mismatch:\\n\u0027"},{"line_number":186,"context_line":"                             \u0027Template: %(ex_delta)s\\nResponse: %(res_delta)s\u0027)"},{"line_number":187,"context_line":"                             % locals())"},{"line_number":188,"context_line":"            for key in ex_keys:"},{"line_number":189,"context_line":"                res \u003d self._compare_result(subs, expected[key], result[key])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bjlo%3D","line":186,"in_reply_to":"AAAAM3%2F%2Bjnc%3D","updated":"2013-02-27 15:41:11.000000000","message":"I\u0027m coming at this from the perspective of someone who has fought with api sample testing quite a bit somewhat recently.  This change is a big improvement over the current behavior of just listing all the keys and making developers compare manually.  But if I were writing a new extension and testing for the first time and the output was:\n\nDictionary key mismatch:\nTemplate: []\nResponse: [forgotten_key]\n\nit doesn\u0027t smack me in the face with what is wrong.  This is extremely nitpicky, which is why I still +1ed, but I think the addition of just something like:\n\nDictionary key mismatch:\nExtra key(s) in template: []\nExtra key(s) in response: [forgotten_key]\n\nwould make it just a bit more clear.  As I said, extremely nitpicky.","commit_id":"028d05027971b91d3810513a06d76025581717aa"},{"author":{"_account_id":4598,"name":"Giampaolo Lauria","email":"lauria@us.ibm.com","username":"lauria"},"change_message_id":"a3b96e2aea210e42a8d5a57d8a09db4af6b9222b","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    if key not in ex_keys:"},{"line_number":184,"context_line":"                        res_delta.append(key)"},{"line_number":185,"context_line":"                raise NoMatch(_(\u0027Dictionary key mismatch:\\n\u0027"},{"line_number":186,"context_line":"                             \u0027Template: %(ex_delta)s\\nResponse: %(res_delta)s\u0027)"},{"line_number":187,"context_line":"                             % locals())"},{"line_number":188,"context_line":"            for key in ex_keys:"},{"line_number":189,"context_line":"                res \u003d self._compare_result(subs, expected[key], result[key])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2Bjnc%3D","line":186,"in_reply_to":"AAAAM3%2F%2Bjrg%3D","updated":"2013-02-27 15:20:26.000000000","message":"Andrew, thanks for your review. I\u0027d be happy to change the msg, but I don\u0027t fully understand your proposal. Would you give me an exact example of what you\u0027d like to see? Thanks\nNB Since this has been approved by Vish, I\u0027d like to push your changes in a follow up patch together w/ more improvements I am thinking of. I will work on it sometime in the future as time allows.","commit_id":"028d05027971b91d3810513a06d76025581717aa"}]}
