)]}'
{"openstack_dashboard/dashboards/project/access_and_security/keypairs/forms.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"a6a422ef85cfb46b9352a45095dbc0563cd351f5","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            if isinstance(e, novaclient_exceptions.BadRequest):"},{"line_number":69,"context_line":"                error_msg \u003d e.message"},{"line_number":70,"context_line":"            else:"},{"line_number":71,"context_line":"                error_msg \u003d _(\u0027Unable to import keypair.\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"            exceptions.handle(request, ignore\u003dTrue)"},{"line_number":74,"context_line":"            self.api_error(error_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B4do%3D","line":71,"updated":"2014-01-21 05:38:02.000000000","message":"message is getting deprecated from baseException. For the error msg to be displayed, you can use : \"_(\u0027Unable to import keypair: %s) % e\"\n\nThe nova exception already implements the __str__ method, so will already get the formatted error message this way.","commit_id":"ba4878d7665d5de4136342a637d1d5c5f9bc67a7"},{"author":{"_account_id":10009,"name":"Thomas Orozco","email":"thomas@scalr.com","username":"krallin"},"change_message_id":"7e7c4ba2bc2209e01465133f55da431e68534519","unresolved":false,"context_lines":[{"line_number":68,"context_line":"            if isinstance(e, novaclient_exceptions.BadRequest):"},{"line_number":69,"context_line":"                error_msg \u003d e.message"},{"line_number":70,"context_line":"            else:"},{"line_number":71,"context_line":"                error_msg \u003d _(\u0027Unable to import keypair.\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"            exceptions.handle(request, ignore\u003dTrue)"},{"line_number":74,"context_line":"            self.api_error(error_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3p0%3D","line":71,"in_reply_to":"AAAAUH%2F%2B4do%3D","updated":"2014-01-21 09:11:46.000000000","message":"Duly noted : fixed in patch set 3","commit_id":"ba4878d7665d5de4136342a637d1d5c5f9bc67a7"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"d085a3de91a7156642b80cccc0fa9ca802ca1ca5","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            return keypair"},{"line_number":65,"context_line":"        except Exception as e:"},{"line_number":66,"context_line":"            exceptions.handle(request, ignore\u003dTrue)"},{"line_number":67,"context_line":"            self.api_error(_(\u0027Unable to import keypair: %s\u0027) % e)"},{"line_number":68,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B3eM%3D","line":67,"updated":"2014-01-21 09:41:02.000000000","message":"You might want to have a unicode string here.","commit_id":"23781bab8c8a28832494e35bccc47bc7d91816bc"},{"author":{"_account_id":10009,"name":"Thomas Orozco","email":"thomas@scalr.com","username":"krallin"},"change_message_id":"5a4512add549f974f7a74aca7b4c1d6d75b318c3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            return keypair"},{"line_number":65,"context_line":"        except Exception as e:"},{"line_number":66,"context_line":"            exceptions.handle(request, ignore\u003dTrue)"},{"line_number":67,"context_line":"            self.api_error(_(\u0027Unable to import keypair: %s\u0027) % e)"},{"line_number":68,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B3Uc%3D","line":67,"in_reply_to":"AAAAUH%2F%2B3WA%3D","updated":"2014-01-21 10:09:52.000000000","message":"Yup, _ is ugettext_lazy here, so it will indeed give us back unicode","commit_id":"23781bab8c8a28832494e35bccc47bc7d91816bc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"0ff936574c5455c140d4d6f36000ef3c399b74b2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            return keypair"},{"line_number":65,"context_line":"        except Exception as e:"},{"line_number":66,"context_line":"            exceptions.handle(request, ignore\u003dTrue)"},{"line_number":67,"context_line":"            self.api_error(_(\u0027Unable to import keypair: %s\u0027) % e)"},{"line_number":68,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B3WA%3D","line":67,"in_reply_to":"AAAAUH%2F%2B3YU%3D","updated":"2014-01-21 10:07:35.000000000","message":"The thing is, when you use \"%s\", it uses str() on the argument, and if you use u\"%s\", it will use unicode() on it. Some of the exceptions have different output for str() and for unicode(). I\u0027m not entirely sure if it matters here, because the _() is probably turning it into unicode anyways.","commit_id":"23781bab8c8a28832494e35bccc47bc7d91816bc"},{"author":{"_account_id":10009,"name":"Thomas Orozco","email":"thomas@scalr.com","username":"krallin"},"change_message_id":"2631ad8e4a538a68471678ca52dcde6d4ff2887c","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            return keypair"},{"line_number":65,"context_line":"        except Exception as e:"},{"line_number":66,"context_line":"            exceptions.handle(request, ignore\u003dTrue)"},{"line_number":67,"context_line":"            self.api_error(_(\u0027Unable to import keypair: %s\u0027) % e)"},{"line_number":68,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2B3YU%3D","line":67,"in_reply_to":"AAAAUH%2F%2B3eM%3D","updated":"2014-01-21 09:56:10.000000000","message":"Makes sense, of course — I tried to stay consistent with the rest of the codebase that seems not to, any advice?\n\nThanks!","commit_id":"23781bab8c8a28832494e35bccc47bc7d91816bc"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"b90d29ef94cb72c9794da07055aae3c033c52355","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                                       % data[\u0027name\u0027])"},{"line_number":64,"context_line":"            return keypair"},{"line_number":65,"context_line":"        except Exception as e:"},{"line_number":66,"context_line":"            exceptions.handle(request, ignore\u003dTrue)"},{"line_number":67,"context_line":"            self.api_error(_(\u0027Unable to import key pair: %s\u0027) % e)"},{"line_number":68,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BcdY%3D","line":66,"updated":"2014-01-26 09:02:43.000000000","message":"Dumping the exception to the user is not a good solution.  We should test for known errors and provide a translated message to the user providing greater details regarding the failure. If it is an unknown error, leave the generic error message.","commit_id":"bff045034a5ff348f9c5b737852915901d85ac9a"}],"openstack_dashboard/dashboards/project/access_and_security/keypairs/tests.py":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"44e16d349af85179354ee95bcf1f7aa795b9a47e","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027keypair_import\u0027)"},{"line_number":137,"context_line":"        api.nova.keypair_import(IsA(http.HttpRequest), key_name, public_key) \\"},{"line_number":138,"context_line":"                        .AndRaise(self.exceptions.nova_bad_request)"},{"line_number":139,"context_line":"        self.mox.ReplayAll()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        formData \u003d {\u0027method\u0027: \u0027ImportKeypair\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B340%3D","line":138,"updated":"2014-01-21 08:23:00.000000000","message":"Strange indentation. Please consider\n\napi.nova.keypair_import(IsA(http.HttpRequest), key_name, public_key) \\\n    .AndRaise(self.exceptions.nova_bad_request)","commit_id":"ba4878d7665d5de4136342a637d1d5c5f9bc67a7"},{"author":{"_account_id":10009,"name":"Thomas Orozco","email":"thomas@scalr.com","username":"krallin"},"change_message_id":"7e7c4ba2bc2209e01465133f55da431e68534519","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027keypair_import\u0027)"},{"line_number":137,"context_line":"        api.nova.keypair_import(IsA(http.HttpRequest), key_name, public_key) \\"},{"line_number":138,"context_line":"                        .AndRaise(self.exceptions.nova_bad_request)"},{"line_number":139,"context_line":"        self.mox.ReplayAll()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        formData \u003d {\u0027method\u0027: \u0027ImportKeypair\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3qA%3D","line":138,"in_reply_to":"AAAAUH%2F%2B340%3D","updated":"2014-01-21 09:11:46.000000000","message":"Thanks! \n\nI\u0027m removing this test in Patch Set 3 though, since as per Lin Hua\u0027s recommendation, we only have one code path to test no.\n\nThe other tests have the same strange indentation, is that something we should consider fixing along with this change?","commit_id":"ba4878d7665d5de4136342a637d1d5c5f9bc67a7"},{"author":{"_account_id":10009,"name":"Thomas Orozco","email":"thomas@scalr.com","username":"krallin"},"change_message_id":"63eee6f13510c02cca546b762c01cfd23b1d7a19","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027keypair_import\u0027)"},{"line_number":137,"context_line":"        api.nova.keypair_import(IsA(http.HttpRequest), key_name, public_key) \\"},{"line_number":138,"context_line":"                        .AndRaise(self.exceptions.nova_bad_request)"},{"line_number":139,"context_line":"        self.mox.ReplayAll()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        formData \u003d {\u0027method\u0027: \u0027ImportKeypair\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3WM%3D","line":138,"in_reply_to":"AAAAUH%2F%2B3Wo%3D","updated":"2014-01-21 10:05:59.000000000","message":"Sounds good, thanks for the tip!","commit_id":"ba4878d7665d5de4136342a637d1d5c5f9bc67a7"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"e1cfb45cdde7171033e6d8f36370aaae1aca091a","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        self.mox.StubOutWithMock(api.nova, \u0027keypair_import\u0027)"},{"line_number":137,"context_line":"        api.nova.keypair_import(IsA(http.HttpRequest), key_name, public_key) \\"},{"line_number":138,"context_line":"                        .AndRaise(self.exceptions.nova_bad_request)"},{"line_number":139,"context_line":"        self.mox.ReplayAll()"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        formData \u003d {\u0027method\u0027: \u0027ImportKeypair\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3Wo%3D","line":138,"in_reply_to":"AAAAUH%2F%2B3qA%3D","updated":"2014-01-21 10:03:51.000000000","message":"I think we should just avoid strange indentation in our own patch sets. If the other code have strange indentation too, it\u0027s not necessary to fix it here.","commit_id":"ba4878d7665d5de4136342a637d1d5c5f9bc67a7"}]}
