)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"b2e99d871aee77f19b09a3253ff7eaf3f48c4f77","unresolved":false,"context_lines":[{"line_number":13,"context_line":"the iscsi deployment preparation method if we are not writing an image"},{"line_number":14,"context_line":"since we will ultimately skip deployment."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Depends-On: I46b374104ea2cb9a68581a99a9db431ef4444c1b"},{"line_number":17,"context_line":"Change-Id: If6bd7e34ea92add15c3c7d8b94a2efbaf882d6ff"},{"line_number":18,"context_line":"Partial-Bug: #1559691"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"ff346bd7_b1723aac","line":16,"range":{"start_line":16,"start_character":12,"end_line":16,"end_character":53},"updated":"2017-07-26 15:41:43.000000000","message":"This depend-on patch is abandoned.","commit_id":"e247e28d3481baafd864ac4897175b6711871c79"}],"ironic/drivers/modules/agent.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8edc52859e7bb3b894f963cbd46e5ee21db66c04","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            # image properties if we will not be writing an image"},{"line_number":340,"context_line":"            # in a boot from volume case. As such, return to the caller."},{"line_number":341,"context_line":"            LOG.debug(\u0027Skipping complete deployment interface validation \u0027"},{"line_number":342,"context_line":"                      \u0027for node %s as it is set to deploy from a remote \u0027"},{"line_number":343,"context_line":"                      \u0027volume.\u0027, node.uuid)"},{"line_number":344,"context_line":"            return"},{"line_number":345,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_0e952333","line":342,"updated":"2017-07-18 15:09:43.000000000","message":"s/deploy/boot/","commit_id":"0cc60f70120b37dc4a1d1210444df1b65f13f32a"}],"ironic/drivers/modules/iscsi_deploy.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"582fb39e514d5dd8b5009434b8cbb68cc2e50b8a","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                task.driver.storage.attach_volumes(task)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"            deploy_opts \u003d deploy_utils.build_agent_options(node)"},{"line_number":533,"context_line":"            task.driver.boot.prepare_ramdisk(task, deploy_opts)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    @METRICS.timer(\u0027ISCSIDeploy.clean_up\u0027)"},{"line_number":536,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_e72cd348","line":533,"updated":"2017-06-30 14:53:14.000000000","message":"Looking at the code in modules/pxe, seems like this bit will try to download instance kernel/ramdisk if boot option is set to netboot and image_source is still set on the volume-booted node. Is it correct? Should we add more checks into the prepare_ramdisk or _get_instance_image_info?","commit_id":"5eb988e62fbbb8408ec5f2967534f87f126751a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7afa68a991bec87341c48a3be29bf14baa95300c","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                task.driver.storage.attach_volumes(task)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"            deploy_opts \u003d deploy_utils.build_agent_options(node)"},{"line_number":533,"context_line":"            task.driver.boot.prepare_ramdisk(task, deploy_opts)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    @METRICS.timer(\u0027ISCSIDeploy.clean_up\u0027)"},{"line_number":536,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_656afb80","line":533,"in_reply_to":"3f1d235d_e72cd348","updated":"2017-06-30 15:53:55.000000000","message":"I guess I should wip this at the moment as I\u0027m waiting to see where mjturek goes with the patch he is working on.","commit_id":"5eb988e62fbbb8408ec5f2967534f87f126751a6"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"ee77e74b62b36df2b298f8446618c5b99b9d873e","unresolved":false,"context_lines":[{"line_number":530,"context_line":"                task.driver.storage.attach_volumes(task)"},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"            deploy_opts \u003d deploy_utils.build_agent_options(node)"},{"line_number":533,"context_line":"            task.driver.boot.prepare_ramdisk(task, deploy_opts)"},{"line_number":534,"context_line":""},{"line_number":535,"context_line":"    @METRICS.timer(\u0027ISCSIDeploy.clean_up\u0027)"},{"line_number":536,"context_line":"    def clean_up(self, task):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f1d235d_6858f654","line":533,"in_reply_to":"3f1d235d_e72cd348","updated":"2017-07-06 14:06:37.000000000","message":"We shouldn\u0027t, at least I think we shouldn\u0027t download the instance kernel/ramdisk (of which there likely is none), with https://review.openstack.org/#/c/478690/2 and the pxe.py changes it makes.\n\nThe patches can land independently, but I\u0027ll add depends-on in the commit message for now.","commit_id":"5eb988e62fbbb8408ec5f2967534f87f126751a6"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"8edc52859e7bb3b894f963cbd46e5ee21db66c04","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        # tasks evaluate root device hints."},{"line_number":429,"context_line":"        if not task.driver.storage.should_write_image(task):"},{"line_number":430,"context_line":"            LOG.debug(\u0027Skipping complete deployment interface validation \u0027"},{"line_number":431,"context_line":"                      \u0027for node %s as it is set to deploy from a remote \u0027"},{"line_number":432,"context_line":"                      \u0027volume.\u0027, node.uuid)"},{"line_number":433,"context_line":"            return"},{"line_number":434,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1f1a1f67_2e921f4d","line":431,"updated":"2017-07-18 15:09:43.000000000","message":"s/deploy/boot/","commit_id":"0cc60f70120b37dc4a1d1210444df1b65f13f32a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"5e295026f50d53f7fb2605988b1b64d2da3e07f5","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            # refactored in the near future."},{"line_number":465,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":466,"context_line":"            task.driver.network.remove_provisioning_network(task)"},{"line_number":467,"context_line":"            task.driver.network.configure_tenant_networks(task)"},{"line_number":468,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":469,"context_line":"            task.process_event(\u0027done\u0027)"},{"line_number":470,"context_line":"            LOG.info(\u0027Deployment to node %s done\u0027, node.uuid)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df3967d1_195e9443","line":467,"updated":"2017-08-04 10:59:10.000000000","message":"I hope these calls are idempotent enough to run them twice... Well, the CI passes, so probably they are :)","commit_id":"c0ce6ebf1988c29cc68d16fc2e9142a022f7024b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"dacb362056a656f1584ea43c541c2e5b371273e9","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            # refactored in the near future."},{"line_number":465,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":466,"context_line":"            task.driver.network.remove_provisioning_network(task)"},{"line_number":467,"context_line":"            task.driver.network.configure_tenant_networks(task)"},{"line_number":468,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":469,"context_line":"            task.process_event(\u0027done\u0027)"},{"line_number":470,"context_line":"            LOG.info(\u0027Deployment to node %s done\u0027, node.uuid)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df3967d1_356aaaed","line":467,"updated":"2017-08-03 06:49:44.000000000","message":"should we remove these two commands, not that we don\u0027t configure provisioning network in prepare?","commit_id":"c0ce6ebf1988c29cc68d16fc2e9142a022f7024b"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"267ea729c2b09ed6536ef7e1405b02883ad51d97","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            # refactored in the near future."},{"line_number":465,"context_line":"            manager_utils.node_power_action(task, states.POWER_OFF)"},{"line_number":466,"context_line":"            task.driver.network.remove_provisioning_network(task)"},{"line_number":467,"context_line":"            task.driver.network.configure_tenant_networks(task)"},{"line_number":468,"context_line":"            manager_utils.node_power_action(task, states.POWER_ON)"},{"line_number":469,"context_line":"            task.process_event(\u0027done\u0027)"},{"line_number":470,"context_line":"            LOG.info(\u0027Deployment to node %s done\u0027, node.uuid)"}],"source_content_type":"text/x-python","patch_set":11,"id":"df3967d1_4611f403","line":467,"in_reply_to":"df3967d1_356aaaed","updated":"2017-08-03 15:04:39.000000000","message":"I don\u0027t think so, because prepare and deploy can be called at different phases of a node\u0027s life.  Thinking deeply about that requires more brain power than I have at the moment.","commit_id":"c0ce6ebf1988c29cc68d16fc2e9142a022f7024b"}],"ironic/tests/unit/drivers/modules/test_agent.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"28521626f91ed5711e1740198e63bb33f6b174c1","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":"            self.assertFalse(build_instance_info_mock.called)"},{"line_number":437,"context_line":"            self.assertFalse(build_options_mock.called)"},{"line_number":438,"context_line":"            self.assertFalse(pxe_prepare_ramdisk_mock.called)"},{"line_number":439,"context_line":"            self.assertFalse(pxe_prepare_instance_mock.called)"},{"line_number":440,"context_line":"            self.assertFalse(add_provisioning_net_mock.called)"},{"line_number":441,"context_line":"            self.assertTrue(storage_driver_info_mock.called)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_43795b2d","line":438,"updated":"2017-07-08 20:25:52.000000000","message":"this does get called, only networking calls are disabled in your change","commit_id":"a3c6763df8f4c583d07a2c132e0662b5252dc9ba"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"2b64ea9beec17c22dc3372f4f2878f4887a101fc","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":"            self.assertFalse(build_instance_info_mock.called)"},{"line_number":437,"context_line":"            self.assertFalse(build_options_mock.called)"},{"line_number":438,"context_line":"            self.assertFalse(pxe_prepare_ramdisk_mock.called)"},{"line_number":439,"context_line":"            self.assertFalse(pxe_prepare_instance_mock.called)"},{"line_number":440,"context_line":"            self.assertFalse(add_provisioning_net_mock.called)"},{"line_number":441,"context_line":"            self.assertTrue(storage_driver_info_mock.called)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_7b80dcbf","line":438,"in_reply_to":"3f1d235d_43795b2d","updated":"2017-07-18 13:04:56.000000000","message":"Yeah, it should have been assertTrue all along.  Yay for my local python being weirdly broken :(","commit_id":"a3c6763df8f4c583d07a2c132e0662b5252dc9ba"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c2fa43450eca528a433b8a7ef62ed0def185343c","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            self.assertTrue(storage_driver_info_mock.called)"},{"line_number":408,"context_line":"            self.assertFalse(storage_attach_volumes_mock.called)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027should_write_image\u0027,"},{"line_number":411,"context_line":"                       autospec\u003dTrue)"},{"line_number":412,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027attach_volumes\u0027,"},{"line_number":413,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_8397bc48","line":410,"updated":"2017-07-18 23:57:52.000000000","message":"Can this be done like in test_pxe.py and use a lambda?","commit_id":"715d5c57c07e82f41441444d6d74b677c500d830"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"25d5725f6bae2f2966e4aec75644b6fe11560bc5","unresolved":false,"context_lines":[{"line_number":407,"context_line":"            self.assertTrue(storage_driver_info_mock.called)"},{"line_number":408,"context_line":"            self.assertFalse(storage_attach_volumes_mock.called)"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027should_write_image\u0027,"},{"line_number":411,"context_line":"                       autospec\u003dTrue)"},{"line_number":412,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027attach_volumes\u0027,"},{"line_number":413,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_498651bb","line":410,"in_reply_to":"1f1a1f67_8397bc48","updated":"2017-07-19 12:40:31.000000000","message":"We verify call count, so I don\u0027t think we really can without giving up the call count.  Having the call count at least allows us to state/verify expectations during test runs.","commit_id":"715d5c57c07e82f41441444d6d74b677c500d830"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c2fa43450eca528a433b8a7ef62ed0def185343c","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                       autospec\u003dTrue)"},{"line_number":412,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027attach_volumes\u0027,"},{"line_number":413,"context_line":"                       autospec\u003dTrue)"},{"line_number":414,"context_line":"    @mock.patch.object(deploy_utils, \u0027populate_storage_driver_internal_info\u0027)"},{"line_number":415,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.\u0027"},{"line_number":416,"context_line":"                \u0027add_provisioning_network\u0027, autospec\u003dTrue)"},{"line_number":417,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_c3db744c","line":414,"updated":"2017-07-18 23:57:52.000000000","message":"Is there a reason can\u0027t use autospec\u003dTrue?","commit_id":"715d5c57c07e82f41441444d6d74b677c500d830"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c2fa43450eca528a433b8a7ef62ed0def185343c","unresolved":false,"context_lines":[{"line_number":416,"context_line":"                \u0027add_provisioning_network\u0027, autospec\u003dTrue)"},{"line_number":417,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.\u0027"},{"line_number":418,"context_line":"                \u0027unconfigure_tenant_networks\u0027, autospec\u003dTrue)"},{"line_number":419,"context_line":"    @mock.patch.object(pxe.PXEBoot, \u0027prepare_instance\u0027)"},{"line_number":420,"context_line":"    @mock.patch.object(pxe.PXEBoot, \u0027prepare_ramdisk\u0027)"},{"line_number":421,"context_line":"    @mock.patch.object(deploy_utils, \u0027build_agent_options\u0027)"},{"line_number":422,"context_line":"    @mock.patch.object(deploy_utils, \u0027build_instance_info_for_deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_23ea28d7","line":419,"updated":"2017-07-18 23:57:52.000000000","message":"Is there a reason these four lines can\u0027t use autospec\u003dTrue? If not could it be set to \u0027autospec\u003dFalse\u0027?","commit_id":"715d5c57c07e82f41441444d6d74b677c500d830"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"b2e99d871aee77f19b09a3253ff7eaf3f48c4f77","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                       autospec\u003dTrue)"},{"line_number":414,"context_line":"    @mock.patch.object(deploy_utils, \u0027populate_storage_driver_internal_info\u0027,"},{"line_number":415,"context_line":"                       autospec\u003dTrue)"},{"line_number":416,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.\u0027"},{"line_number":417,"context_line":"                \u0027add_provisioning_network\u0027, autospec\u003dTrue)"},{"line_number":418,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.\u0027"},{"line_number":419,"context_line":"                \u0027unconfigure_tenant_networks\u0027, autospec\u003dTrue)"},{"line_number":420,"context_line":"    @mock.patch.object(pxe.PXEBoot, \u0027prepare_instance\u0027, autospec\u003dTrue)"},{"line_number":421,"context_line":"    @mock.patch.object(pxe.PXEBoot, \u0027prepare_ramdisk\u0027, autospec\u003dTrue)"},{"line_number":422,"context_line":"    @mock.patch.object(deploy_utils, \u0027build_agent_options\u0027, autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff346bd7_71e5f208","line":419,"range":{"start_line":416,"start_character":0,"end_line":419,"end_character":61},"updated":"2017-07-26 15:41:43.000000000","message":"nit: Should use use mock.patch.object() for consistency with other mocks.","commit_id":"e247e28d3481baafd864ac4897175b6711871c79"}],"ironic/tests/unit/drivers/modules/test_iscsi_deploy.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c2fa43450eca528a433b8a7ef62ed0def185343c","unresolved":false,"context_lines":[{"line_number":654,"context_line":"            storage_attach_volumes_mock.assert_called_once_with("},{"line_number":655,"context_line":"                task.driver.storage, task)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027should_write_image\u0027,"},{"line_number":658,"context_line":"                       autospec\u003dTrue)"},{"line_number":659,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027attach_volumes\u0027,"},{"line_number":660,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_038dec30","line":657,"updated":"2017-07-18 23:57:52.000000000","message":"Can this be done like in test_pxe.py and use a lambda?","commit_id":"715d5c57c07e82f41441444d6d74b677c500d830"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"25d5725f6bae2f2966e4aec75644b6fe11560bc5","unresolved":false,"context_lines":[{"line_number":654,"context_line":"            storage_attach_volumes_mock.assert_called_once_with("},{"line_number":655,"context_line":"                task.driver.storage, task)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027should_write_image\u0027,"},{"line_number":658,"context_line":"                       autospec\u003dTrue)"},{"line_number":659,"context_line":"    @mock.patch.object(noop_storage.NoopStorage, \u0027attach_volumes\u0027,"},{"line_number":660,"context_line":"                       autospec\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_09de19d9","line":657,"in_reply_to":"1f1a1f67_038dec30","updated":"2017-07-19 12:40:31.000000000","message":"We do test that it gets called, and that is in part verification of expectations, thus I think using lambda does not fit.","commit_id":"715d5c57c07e82f41441444d6d74b677c500d830"},{"author":{"_account_id":18320,"name":"Dao Cong Tien","email":"tiendc@vn.fujitsu.com","username":"TienDC"},"change_message_id":"b2e99d871aee77f19b09a3253ff7eaf3f48c4f77","unresolved":false,"context_lines":[{"line_number":662,"context_line":"                       autospec\u003dTrue)"},{"line_number":663,"context_line":"    @mock.patch.object(deploy_utils, \u0027build_agent_options\u0027, autospec\u003dTrue)"},{"line_number":664,"context_line":"    @mock.patch.object(pxe.PXEBoot, \u0027prepare_ramdisk\u0027, autospec\u003dTrue)"},{"line_number":665,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.\u0027"},{"line_number":666,"context_line":"                \u0027add_provisioning_network\u0027, spec_set\u003dTrue, autospec\u003dTrue)"},{"line_number":667,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.\u0027"},{"line_number":668,"context_line":"                \u0027unconfigure_tenant_networks\u0027, spec_set\u003dTrue, autospec\u003dTrue)"},{"line_number":669,"context_line":"    def test_prepare_node_deploying_storage_should_write_false("},{"line_number":670,"context_line":"            self, unconfigure_tenant_net_mock, add_provisioning_net_mock,"},{"line_number":671,"context_line":"            mock_prepare_ramdisk, mock_agent_options,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff346bd7_f13d628f","line":668,"range":{"start_line":665,"start_character":0,"end_line":668,"end_character":76},"updated":"2017-07-26 15:41:43.000000000","message":"nit: Should use use mock.patch.object() for consistency with above mocks.","commit_id":"e247e28d3481baafd864ac4897175b6711871c79"}]}
