)]}'
{"nova/tests/unit/volume/test_cinder.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a82c75754bd26ef9ea96e81afeedba5232723d69","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    def test_translate_cinder_exception_no_error(self):"},{"line_number":445,"context_line":"        my_func \u003d mock.Mock()"},{"line_number":446,"context_line":"        my_func.__name__ \u003d \u0027my_func\u0027"},{"line_number":447,"context_line":"        my_func.return_value \u003d \u0027foo\u0027"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        res \u003d cinder.translate_cinder_exception(my_func)(\u0027fizzbuzz\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_8a3f65d5","line":446,"updated":"2016-03-09 01:48:29.000000000","message":"I\u0027m not sure why this is necessary.","commit_id":"52ea5649544205e3a28b5feea13840553d85ba79"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"73b60edb18e52afffff150af9252a3b719862cf2","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    def test_translate_cinder_exception_no_error(self):"},{"line_number":445,"context_line":"        my_func \u003d mock.Mock()"},{"line_number":446,"context_line":"        my_func.__name__ \u003d \u0027my_func\u0027"},{"line_number":447,"context_line":"        my_func.return_value \u003d \u0027foo\u0027"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        res \u003d cinder.translate_cinder_exception(my_func)(\u0027fizzbuzz\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_8f3e33d8","line":446,"in_reply_to":"5aef4532_81a3acb1","updated":"2016-03-09 14:23:03.000000000","message":"Ah OK, I would have probably just created a fake function for testing, like:\n\ndef my_func(*args, **kwargs):\n    # assert the args here\n    return \u0027foo\u0027\n\nBut what you have works too.","commit_id":"52ea5649544205e3a28b5feea13840553d85ba79"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"cd2d5db424843d87dfffe8ffd7f787d73d30bfc9","unresolved":false,"context_lines":[{"line_number":443,"context_line":""},{"line_number":444,"context_line":"    def test_translate_cinder_exception_no_error(self):"},{"line_number":445,"context_line":"        my_func \u003d mock.Mock()"},{"line_number":446,"context_line":"        my_func.__name__ \u003d \u0027my_func\u0027"},{"line_number":447,"context_line":"        my_func.return_value \u003d \u0027foo\u0027"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"        res \u003d cinder.translate_cinder_exception(my_func)(\u0027fizzbuzz\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_81a3acb1","line":446,"in_reply_to":"5aef4532_8a3f65d5","updated":"2016-03-09 13:57:29.000000000","message":"Because translate_cinder_exception() is using functools.wraps, it grabs __name__ off of the function. I figured mock would be able to handle that call just fine, but for some reason it doesn\u0027t. I guess it needs to be a string, but mock returns a Mock object.\n\nMore info here: http://stackoverflow.com/questions/22204660/python-mock-wrapsf-problems","commit_id":"52ea5649544205e3a28b5feea13840553d85ba79"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a82c75754bd26ef9ea96e81afeedba5232723d69","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    def _do_translate_cinder_exception_test(self, raised_exc, expected_exc):"},{"line_number":476,"context_line":"        my_func \u003d mock.Mock()"},{"line_number":477,"context_line":"        my_func.__name__ \u003d \u0027my_func\u0027"},{"line_number":478,"context_line":"        my_func.side_effect \u003d raised_exc"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        self.assertRaises(expected_exc,"}],"source_content_type":"text/x-python","patch_set":2,"id":"5aef4532_ea26e9cc","line":477,"updated":"2016-03-09 01:48:29.000000000","message":"ditto","commit_id":"52ea5649544205e3a28b5feea13840553d85ba79"}],"nova/volume/cinder.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"1866206147155d8e33cf5a5ff3c66b8910a94664","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    return d"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def translate_cinder_exception(method):"},{"line_number":228,"context_line":"    \"\"\"Transforms a cinder exception but keeps its traceback intact.\"\"\""},{"line_number":229,"context_line":"    @functools.wraps(method)"},{"line_number":230,"context_line":"    def wrapper(self, ctx, resource_id, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_0ec1b380","line":227,"updated":"2016-03-08 20:42:35.000000000","message":"Do we want this minimum wrapper to be put on all api operations?","commit_id":"9a2ebbbf964a28098462b0c14deef9e55a45282e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"715fd11040c317724605d6e22ecf34d29807b71a","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    return d"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def translate_cinder_exception(method):"},{"line_number":228,"context_line":"    \"\"\"Transforms a cinder exception but keeps its traceback intact.\"\"\""},{"line_number":229,"context_line":"    @functools.wraps(method)"},{"line_number":230,"context_line":"    def wrapper(self, ctx, resource_id, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_42954fdc","line":227,"in_reply_to":"5aef4532_0ec1b380","updated":"2016-03-08 21:26:31.000000000","message":"I think so yes.","commit_id":"9a2ebbbf964a28098462b0c14deef9e55a45282e"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"5a6d2f5cf2b0d16049e8c6967df3c77271a589cf","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    return d"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def translate_cinder_exception(method):"},{"line_number":228,"context_line":"    \"\"\"Transforms a cinder exception but keeps its traceback intact.\"\"\""},{"line_number":229,"context_line":"    @functools.wraps(method)"},{"line_number":230,"context_line":"    def wrapper(self, ctx, resource_id, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_3bcaee6d","line":227,"in_reply_to":"5aef4532_42954fdc","updated":"2016-03-08 22:32:26.000000000","message":"Done","commit_id":"9a2ebbbf964a28098462b0c14deef9e55a45282e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"715fd11040c317724605d6e22ecf34d29807b71a","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def wrapper(self, ctx, resource_id, *args, **kwargs):"},{"line_number":231,"context_line":"        try:"},{"line_number":232,"context_line":"            res \u003d method(self, ctx, resource_id, *args, **kwargs)"},{"line_number":233,"context_line":"        except (cinder_exception.ConnectionError,"},{"line_number":234,"context_line":"                keystone_exception.ConnectionError):"},{"line_number":235,"context_line":"            exc_type, exc_value, exc_trace \u003d sys.exc_info()"},{"line_number":236,"context_line":"            exc_value \u003d exception.CinderConnectionFailed("}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_a271b3e2","line":233,"updated":"2016-03-08 21:26:31.000000000","message":"I think we can add cinder_exception.BadRequest to this list since the Invalid exception returned is generic. The snapshot wrapper just wasn\u0027t using it.","commit_id":"9a2ebbbf964a28098462b0c14deef9e55a45282e"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"5a6d2f5cf2b0d16049e8c6967df3c77271a589cf","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def wrapper(self, ctx, resource_id, *args, **kwargs):"},{"line_number":231,"context_line":"        try:"},{"line_number":232,"context_line":"            res \u003d method(self, ctx, resource_id, *args, **kwargs)"},{"line_number":233,"context_line":"        except (cinder_exception.ConnectionError,"},{"line_number":234,"context_line":"                keystone_exception.ConnectionError):"},{"line_number":235,"context_line":"            exc_type, exc_value, exc_trace \u003d sys.exc_info()"},{"line_number":236,"context_line":"            exc_value \u003d exception.CinderConnectionFailed("}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_7ba2b6af","line":233,"in_reply_to":"5aef4532_a271b3e2","updated":"2016-03-08 22:32:26.000000000","message":"Done","commit_id":"9a2ebbbf964a28098462b0c14deef9e55a45282e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"715fd11040c317724605d6e22ecf34d29807b71a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                    reason\u003dsix.text_type(exc_value))"},{"line_number":259,"context_line":"            six.reraise(exc_value, None, exc_trace)"},{"line_number":260,"context_line":"        return res"},{"line_number":261,"context_line":"    return translate_cinder_exception(wrapper)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"def translate_snapshot_exception(method):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_42838f98","line":261,"updated":"2016-03-08 21:26:31.000000000","message":"ooo fancy","commit_id":"9a2ebbbf964a28098462b0c14deef9e55a45282e"}]}
