)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d04a35f10d3ee4cab96fb16379cc85d7f38abdbc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Matt Riedemann \u003cmriedem.os@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-03-09 19:23:32 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Decrement quota when deleting an instance in cell0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we fail to schedule an instance, e.g. there are no hosts"},{"line_number":10,"context_line":"available, conductor creates the instance in the cell0 database"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_8b15289d","line":7,"range":{"start_line":7,"start_character":10,"end_line":7,"end_character":15},"updated":"2017-03-10 19:21:57.000000000","message":"\"Quota\" on its own refers to the limit, not the usage. So I would say \"quota usage\" here.","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7978f50e7d9e06c8e41410468575ea42bcf761a3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Matt Riedemann \u003cmriedem.os@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-03-09 19:23:32 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Decrement quota when deleting an instance in cell0"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we fail to schedule an instance, e.g. there are no hosts"},{"line_number":10,"context_line":"available, conductor creates the instance in the cell0 database"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_fa4ae353","line":7,"range":{"start_line":7,"start_character":10,"end_line":7,"end_character":15},"in_reply_to":"9a30ddce_8b15289d","updated":"2017-03-11 03:55:32.000000000","message":"Will update.","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d04a35f10d3ee4cab96fb16379cc85d7f38abdbc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we fail to schedule an instance, e.g. there are no hosts"},{"line_number":10,"context_line":"available, conductor creates the instance in the cell0 database"},{"line_number":11,"context_line":"and deletes the build request. At this point quota reservations"},{"line_number":12,"context_line":"have been made in the main \u0027nova\u0027 database."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"When the instance is deleted, the build request is already gone"},{"line_number":15,"context_line":"so _delete_while_booting returns False and we lookup the instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_cbd000cc","line":12,"range":{"start_line":11,"start_character":31,"end_line":12,"end_character":43},"updated":"2017-03-10 19:21:57.000000000","message":"As mentioned on the regression test review, what\u0027s important is that the quota usage record was incremented when the instance was created.\n\n\"At this point, quota usage has been incremented in the main \u0027nova\u0027 database.\"","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7978f50e7d9e06c8e41410468575ea42bcf761a3","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we fail to schedule an instance, e.g. there are no hosts"},{"line_number":10,"context_line":"available, conductor creates the instance in the cell0 database"},{"line_number":11,"context_line":"and deletes the build request. At this point quota reservations"},{"line_number":12,"context_line":"have been made in the main \u0027nova\u0027 database."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"When the instance is deleted, the build request is already gone"},{"line_number":15,"context_line":"so _delete_while_booting returns False and we lookup the instance"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_1a46d74e","line":12,"range":{"start_line":11,"start_character":31,"end_line":12,"end_character":43},"in_reply_to":"9a30ddce_cbd000cc","updated":"2017-03-11 03:55:32.000000000","message":"Done","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d04a35f10d3ee4cab96fb16379cc85d7f38abdbc","unresolved":false,"context_lines":[{"line_number":14,"context_line":"When the instance is deleted, the build request is already gone"},{"line_number":15,"context_line":"so _delete_while_booting returns False and we lookup the instance"},{"line_number":16,"context_line":"in cell0 and delete it from there, but that flow wasn\u0027t decrementing"},{"line_number":17,"context_line":"quota like _delete_while_booting was."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This change adds the same quotas decrement handling that"},{"line_number":20,"context_line":"_delete_while_booting performs."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_6be0f496","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":5},"updated":"2017-03-10 19:21:57.000000000","message":"quota usage","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7978f50e7d9e06c8e41410468575ea42bcf761a3","unresolved":false,"context_lines":[{"line_number":14,"context_line":"When the instance is deleted, the build request is already gone"},{"line_number":15,"context_line":"so _delete_while_booting returns False and we lookup the instance"},{"line_number":16,"context_line":"in cell0 and delete it from there, but that flow wasn\u0027t decrementing"},{"line_number":17,"context_line":"quota like _delete_while_booting was."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This change adds the same quotas decrement handling that"},{"line_number":20,"context_line":"_delete_while_booting performs."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_3a771ba1","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":5},"in_reply_to":"9a30ddce_6be0f496","updated":"2017-03-11 03:55:32.000000000","message":"Done","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d04a35f10d3ee4cab96fb16379cc85d7f38abdbc","unresolved":false,"context_lines":[{"line_number":16,"context_line":"in cell0 and delete it from there, but that flow wasn\u0027t decrementing"},{"line_number":17,"context_line":"quota like _delete_while_booting was."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This change adds the same quotas decrement handling that"},{"line_number":20,"context_line":"_delete_while_booting performs."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I4cb0169ce0de537804ab9129bc671d75ce5f7953"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_abf4ac5a","line":19,"range":{"start_line":19,"start_character":26,"end_line":19,"end_character":32},"updated":"2017-03-10 19:21:57.000000000","message":"quota usage","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7978f50e7d9e06c8e41410468575ea42bcf761a3","unresolved":false,"context_lines":[{"line_number":16,"context_line":"in cell0 and delete it from there, but that flow wasn\u0027t decrementing"},{"line_number":17,"context_line":"quota like _delete_while_booting was."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This change adds the same quotas decrement handling that"},{"line_number":20,"context_line":"_delete_while_booting performs."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I4cb0169ce0de537804ab9129bc671d75ce5f7953"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a30ddce_5a7a0f89","line":19,"range":{"start_line":19,"start_character":26,"end_line":19,"end_character":32},"in_reply_to":"9a30ddce_abf4ac5a","updated":"2017-03-11 03:55:32.000000000","message":"Done","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"}],"nova/compute/api.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"115b9b9a57a3927fce68366094b3f701c14b6b36","unresolved":false,"context_lines":[{"line_number":1822,"context_line":"                            instance.destroy()"},{"line_number":1823,"context_line":"                            return"},{"line_number":1824,"context_line":"                    except exception.InstanceNotFound:"},{"line_number":1825,"context_line":"                        quotas.rollback()"},{"line_number":1826,"context_line":"                if not instance:"},{"line_number":1827,"context_line":"                    # Instance is already deleted."},{"line_number":1828,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a30ddce_c0b11691","line":1825,"range":{"start_line":1825,"start_character":24,"end_line":1825,"end_character":41},"updated":"2017-03-09 02:55:24.000000000","message":"I\u0027m not actually sure if this is right, but this is what _delete_while_booting does.","commit_id":"ca7b6d51fe470faa719fec9ac60245cba37a4150"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6b148301b87482c6856b05d32cf7b302ce6d6eac","unresolved":false,"context_lines":[{"line_number":1822,"context_line":"                            instance.destroy()"},{"line_number":1823,"context_line":"                            return"},{"line_number":1824,"context_line":"                    except exception.InstanceNotFound:"},{"line_number":1825,"context_line":"                        quotas.rollback()"},{"line_number":1826,"context_line":"                if not instance:"},{"line_number":1827,"context_line":"                    # Instance is already deleted."},{"line_number":1828,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a30ddce_dd1bab71","line":1825,"updated":"2017-03-09 12:43:51.000000000","message":"Do we need to rollback the quota here as if the instance is already deleted then L1816 decremented too much?","commit_id":"41993364cd694cbed579fecf1a2f1d92543ed50f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9813bebc2094fafd0524cdb21082db0b11272923","unresolved":false,"context_lines":[{"line_number":1822,"context_line":"                            instance.destroy()"},{"line_number":1823,"context_line":"                            return"},{"line_number":1824,"context_line":"                    except exception.InstanceNotFound:"},{"line_number":1825,"context_line":"                        quotas.rollback()"},{"line_number":1826,"context_line":"                if not instance:"},{"line_number":1827,"context_line":"                    # Instance is already deleted."},{"line_number":1828,"context_line":"                    return"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a30ddce_ebc26933","line":1825,"in_reply_to":"9a30ddce_dd1bab71","updated":"2017-03-09 13:46:10.000000000","message":"Honestly I\u0027m not entirely sure about this myself, but I\u0027m just copying _delete_while_booting which is doing the same thing. Just trying to see if this fixes the issue, then we can cleanup.","commit_id":"41993364cd694cbed579fecf1a2f1d92543ed50f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"0d8b10f1f717312d7c74b964686bde633b473ef2","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"                        context, instance)"},{"line_number":1814,"context_line":"                    try:"},{"line_number":1815,"context_line":"                        # This is confusing but actually decrements quota."},{"line_number":1816,"context_line":"                        quotas \u003d self._create_reservations(context,"},{"line_number":1817,"context_line":"                                                           instance,"},{"line_number":1818,"context_line":"                                                           instance.task_state,"},{"line_number":1819,"context_line":"                                                           project_id, user_id)"},{"line_number":1820,"context_line":"                        quotas.commit()"},{"line_number":1821,"context_line":"                        with nova_context.target_cell(context, cell):"},{"line_number":1822,"context_line":"                            instance.destroy()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_75c4815e","line":1819,"range":{"start_line":1816,"start_character":24,"end_line":1819,"end_character":79},"updated":"2017-03-09 21:07:41.000000000","message":"This should go outside the \u0027try\u0027.\n\nI assume _create_reservations should never raise InstanceNotFound; but if it did, your except path would have an uninitialized \u0027quotas\u0027 variable.","commit_id":"6ed021f29900338373ab87ea6247812324cad240"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2475d8ae1e1305ae0c4b5d4e2aef1b25c858f246","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"                        context, instance)"},{"line_number":1814,"context_line":"                    try:"},{"line_number":1815,"context_line":"                        # This is confusing but actually decrements quota."},{"line_number":1816,"context_line":"                        quotas \u003d self._create_reservations(context,"},{"line_number":1817,"context_line":"                                                           instance,"},{"line_number":1818,"context_line":"                                                           instance.task_state,"},{"line_number":1819,"context_line":"                                                           project_id, user_id)"},{"line_number":1820,"context_line":"                        quotas.commit()"},{"line_number":1821,"context_line":"                        with nova_context.target_cell(context, cell):"},{"line_number":1822,"context_line":"                            instance.destroy()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_5c1c02c1","line":1819,"range":{"start_line":1816,"start_character":24,"end_line":1819,"end_character":79},"in_reply_to":"9a30ddce_75c4815e","updated":"2017-03-09 22:39:56.000000000","message":"Hmm, good point.","commit_id":"6ed021f29900338373ab87ea6247812324cad240"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d660fe3c083fbf47ab040699c761e7e8f1889396","unresolved":false,"context_lines":[{"line_number":1819,"context_line":"                                                       instance.task_state,"},{"line_number":1820,"context_line":"                                                       project_id, user_id)"},{"line_number":1821,"context_line":"                    try:"},{"line_number":1822,"context_line":"                        quotas.commit()"},{"line_number":1823,"context_line":"                        with nova_context.target_cell(context, cell):"},{"line_number":1824,"context_line":"                            with compute_utils.notify_about_instance_delete("},{"line_number":1825,"context_line":"                                    self.notifier, context, instance):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_16850606","line":1822,"updated":"2017-03-10 00:23:15.000000000","message":"This doesn\u0027t need to be in the try/except.","commit_id":"cf2773c4c8cc68e9431dc8323d9709d58b2ea5a2"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d04a35f10d3ee4cab96fb16379cc85d7f38abdbc","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"                    # quotas must still be decremented in the main cell DB."},{"line_number":1814,"context_line":"                    project_id, user_id \u003d quotas_obj.ids_from_instance("},{"line_number":1815,"context_line":"                        context, instance)"},{"line_number":1816,"context_line":"                    # This is confusing but actually decrements quota."},{"line_number":1817,"context_line":"                    quotas \u003d self._create_reservations(context,"},{"line_number":1818,"context_line":"                                                       instance,"},{"line_number":1819,"context_line":"                                                       instance.task_state,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_8b98c81d","line":1816,"range":{"start_line":1816,"start_character":64,"end_line":1816,"end_character":69},"updated":"2017-03-10 19:21:57.000000000","message":"Bah, I guess some people use quota to mean usage AND limit (I know this comment is old) :P","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7978f50e7d9e06c8e41410468575ea42bcf761a3","unresolved":false,"context_lines":[{"line_number":1813,"context_line":"                    # quotas must still be decremented in the main cell DB."},{"line_number":1814,"context_line":"                    project_id, user_id \u003d quotas_obj.ids_from_instance("},{"line_number":1815,"context_line":"                        context, instance)"},{"line_number":1816,"context_line":"                    # This is confusing but actually decrements quota."},{"line_number":1817,"context_line":"                    quotas \u003d self._create_reservations(context,"},{"line_number":1818,"context_line":"                                                       instance,"},{"line_number":1819,"context_line":"                                                       instance.task_state,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a30ddce_7a6d13cb","line":1816,"range":{"start_line":1816,"start_character":64,"end_line":1816,"end_character":69},"in_reply_to":"9a30ddce_8b98c81d","updated":"2017-03-11 03:55:32.000000000","message":"Yes, quota is used generically, much like people say \"the gate is broken\" which could be any number of things (check queue, gate queue, jobs, specific tests, package mirrors, etc etc).","commit_id":"a7b8e4c3c9ba818708b6828243942d5773112764"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"810f8de0bfce632b0b351588e2dec21064fff7da","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"                self.context, instance, instance.task_state,"},{"line_number":1517,"context_line":"                self.context.project_id, instance.user_id)"},{"line_number":1518,"context_line":"            quota_mock.commit.assert_called_once_with()"},{"line_number":1519,"context_line":"            target_cell_mock.assert_called_once_with(self.context, cell0)"},{"line_number":1520,"context_line":"            notify_mock.assert_called_once_with("},{"line_number":1521,"context_line":"                self.compute_api.notifier, self.context, instance)"},{"line_number":1522,"context_line":"            destroy_mock.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a30ddce_16e92fb7","line":1519,"range":{"start_line":1519,"start_character":12,"end_line":1519,"end_character":73},"updated":"2017-03-13 15:33:24.000000000","message":"I\u0027m not sure why this is working like this, since it\u0027s a context manager. However, it\u0027s not part of what is trying to be verified here, so I shan\u0027t obsess over it.","commit_id":"f1c09175c232224590a2c2ab5e236c036335b8a4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d6d82fdf4397f43d66272d2dc9cae1808c460afa","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"                self.context, instance, instance.task_state,"},{"line_number":1517,"context_line":"                self.context.project_id, instance.user_id)"},{"line_number":1518,"context_line":"            quota_mock.commit.assert_called_once_with()"},{"line_number":1519,"context_line":"            target_cell_mock.assert_called_once_with(self.context, cell0)"},{"line_number":1520,"context_line":"            notify_mock.assert_called_once_with("},{"line_number":1521,"context_line":"                self.compute_api.notifier, self.context, instance)"},{"line_number":1522,"context_line":"            destroy_mock.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a25e98e_3b744bce","line":1519,"range":{"start_line":1519,"start_character":12,"end_line":1519,"end_character":73},"in_reply_to":"7a25e98e_66554e1c","updated":"2017-03-13 20:59:49.000000000","message":"Yeah, this works with mock.patch (but not with a mock.Mock, fwiw) - when a mock.patch\u0027d method is used as a context manager, the constructor gets call args, but __enter__ and __exit__ get nothing.\n\n In [1]: import mock\n \n In [2]: from contextlib import contextmanager\n \n In [3]: @contextmanager\n    ...: def cm(foo, bar):\n    ...:     yield\n    ...:     \n \n In [4]: with cm(\u0027one\u0027, \u0027two\u0027):\n    ...:         pass\n    ...: \n \n In [5]: mp \u003d mock.patch(\u0027__main__.cm\u0027)\n \n In [6]: mock_cm \u003d mp.start()\n \n In [7]: with cm(\u0027one\u0027, \u0027two\u0027):\n         pass\n    ...: \n \n In [8]: mp.stop()\n \n In [9]: mock_cm.call_args\n Out[9]: call(\u0027one\u0027, \u0027two\u0027)\n \n In [10]: mock_cm.__enter__.call_count\n Out[10]: 0\n \n In [11]: mock_cm.__exit__.call_count\n Out[11]: 0","commit_id":"f1c09175c232224590a2c2ab5e236c036335b8a4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"de7d08b394ad34dc32488689110e9b71a589ef4e","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"                self.context, instance, instance.task_state,"},{"line_number":1517,"context_line":"                self.context.project_id, instance.user_id)"},{"line_number":1518,"context_line":"            quota_mock.commit.assert_called_once_with()"},{"line_number":1519,"context_line":"            target_cell_mock.assert_called_once_with(self.context, cell0)"},{"line_number":1520,"context_line":"            notify_mock.assert_called_once_with("},{"line_number":1521,"context_line":"                self.compute_api.notifier, self.context, instance)"},{"line_number":1522,"context_line":"            destroy_mock.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a30ddce_f66bbbee","line":1519,"range":{"start_line":1519,"start_character":12,"end_line":1519,"end_character":73},"in_reply_to":"9a30ddce_16e92fb7","updated":"2017-03-13 15:42:24.000000000","message":"Might be how assert_called_once_with deals with asserting the mock on the actual method rather than the enter/exit magic methods. I was reading about that last week and magic methods aren\u0027t included in certain mock variables for asserting calls later, of which assert_has_calls is not one of them, as you\u0027ll see in the next change in the series.","commit_id":"f1c09175c232224590a2c2ab5e236c036335b8a4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"7a8f4fce8b30698f85cdb34bcdba3de6891550a9","unresolved":false,"context_lines":[{"line_number":1516,"context_line":"                self.context, instance, instance.task_state,"},{"line_number":1517,"context_line":"                self.context.project_id, instance.user_id)"},{"line_number":1518,"context_line":"            quota_mock.commit.assert_called_once_with()"},{"line_number":1519,"context_line":"            target_cell_mock.assert_called_once_with(self.context, cell0)"},{"line_number":1520,"context_line":"            notify_mock.assert_called_once_with("},{"line_number":1521,"context_line":"                self.compute_api.notifier, self.context, instance)"},{"line_number":1522,"context_line":"            destroy_mock.assert_called_once_with()"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a25e98e_66554e1c","line":1519,"range":{"start_line":1519,"start_character":12,"end_line":1519,"end_character":73},"in_reply_to":"9a30ddce_f66bbbee","updated":"2017-03-13 18:03:17.000000000","message":"Ah, good to know.","commit_id":"f1c09175c232224590a2c2ab5e236c036335b8a4"}]}
