)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This is a driver feature parity blueprint."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implementation is straightforward and consist in providing the"},{"line_number":15,"context_line":"virt driver\u0027s class attach_interface and detach_interface methods."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements: blueprint hyper-v-vnic-hot-plug"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a961159_d717e043","line":14,"updated":"2015-01-12 18:44:46.000000000","message":"consists*","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This is a driver feature parity blueprint."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implementation is straightforward and consist in providing the"},{"line_number":15,"context_line":"virt driver\u0027s class attach_interface and detach_interface methods."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements: blueprint hyper-v-vnic-hot-plug"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a961159_df1d1dc0","line":14,"in_reply_to":"3a961159_d717e043","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"}],"nova/tests/unit/virt/hyperv/test_vmops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    def _test_attach_interface(self,"},{"line_number":716,"context_line":"                               vm_generation,"},{"line_number":717,"context_line":"                               vm_power_state,"},{"line_number":718,"context_line":"                               fake_get_vm_state):"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        fake_vm \u003d mock.MagicMock()"},{"line_number":721,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_f7713cac","line":718,"updated":"2015-01-12 18:44:46.000000000","message":"the order of the arguments is wrong. You always put the arguments from @mock decorators first, since mock will apply the arguments in order. Also, IMO, mock_get_vm_state would be better, but that\u0027s just me.","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":715,"context_line":"    def _test_attach_interface(self,"},{"line_number":716,"context_line":"                               vm_generation,"},{"line_number":717,"context_line":"                               vm_power_state,"},{"line_number":718,"context_line":"                               fake_get_vm_state):"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        fake_vm \u003d mock.MagicMock()"},{"line_number":721,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_9f3c7532","line":718,"in_reply_to":"3a961159_f7713cac","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                               vm_power_state,"},{"line_number":718,"context_line":"                               fake_get_vm_state):"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        fake_vm \u003d mock.MagicMock()"},{"line_number":721,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"},{"line_number":722,"context_line":"        fake_vm.uuid \u003d mock.sentinel.FAKE_VM_UUID"},{"line_number":723,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_77654ce1","line":720,"updated":"2015-01-12 18:44:46.000000000","message":"for fake vms / instances, consider this line instead, as seen on L653 and other lines:\n\n    instance \u003d fake_instance.fake_instance_obj(self.context)","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":717,"context_line":"                               vm_power_state,"},{"line_number":718,"context_line":"                               fake_get_vm_state):"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"        fake_vm \u003d mock.MagicMock()"},{"line_number":721,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"},{"line_number":722,"context_line":"        fake_vm.uuid \u003d mock.sentinel.FAKE_VM_UUID"},{"line_number":723,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_bf37714a","line":720,"in_reply_to":"3a961159_77654ce1","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":721,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"},{"line_number":722,"context_line":"        fake_vm.uuid \u003d mock.sentinel.FAKE_VM_UUID"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        fake_vif \u003d dict()"},{"line_number":725,"context_line":"        fake_vif[\u0027id\u0027] \u003d mock.sentinel.FAKE_VIF_ID"},{"line_number":726,"context_line":"        fake_vif[\u0027address\u0027] \u003d mock.sentinel.FAKE_VIF_ADDRESS"},{"line_number":727,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_577f7066","line":724,"updated":"2015-01-12 18:44:46.000000000","message":"how about using nova.tests.unit.objects.test_virtual_interface.fake_vif?","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":721,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"},{"line_number":722,"context_line":"        fake_vm.uuid \u003d mock.sentinel.FAKE_VM_UUID"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"        fake_vif \u003d dict()"},{"line_number":725,"context_line":"        fake_vif[\u0027id\u0027] \u003d mock.sentinel.FAKE_VIF_ID"},{"line_number":726,"context_line":"        fake_vif[\u0027address\u0027] \u003d mock.sentinel.FAKE_VIF_ADDRESS"},{"line_number":727,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_df46fdbf","line":724,"in_reply_to":"3a961159_577f7066","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                              fake_vm, fake_vif)"},{"line_number":740,"context_line":"        else:"},{"line_number":741,"context_line":"            self._vmops.attach_interface(fake_vm, fake_vif)"},{"line_number":742,"context_line":"            self._vmops._vmutils.create_nic.assert_called_with("},{"line_number":743,"context_line":"                                                mock.sentinel.FAKE_VM_NAME,"},{"line_number":744,"context_line":"                                                mock.sentinel.FAKE_VIF_ID,"},{"line_number":745,"context_line":"                                                mock.sentinel.FAKE_VIF_ADDRESS)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_d7e1a02b","line":742,"updated":"2015-01-12 18:44:46.000000000","message":"assert_called_once_with","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                              fake_vm, fake_vif)"},{"line_number":740,"context_line":"        else:"},{"line_number":741,"context_line":"            self._vmops.attach_interface(fake_vm, fake_vif)"},{"line_number":742,"context_line":"            self._vmops._vmutils.create_nic.assert_called_with("},{"line_number":743,"context_line":"                                                mock.sentinel.FAKE_VM_NAME,"},{"line_number":744,"context_line":"                                                mock.sentinel.FAKE_VIF_ID,"},{"line_number":745,"context_line":"                                                mock.sentinel.FAKE_VIF_ADDRESS)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ff41f9a6","line":742,"in_reply_to":"3a961159_d7e1a02b","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":743,"context_line":"                                                mock.sentinel.FAKE_VM_NAME,"},{"line_number":744,"context_line":"                                                mock.sentinel.FAKE_VIF_ID,"},{"line_number":745,"context_line":"                                                mock.sentinel.FAKE_VIF_ADDRESS)"},{"line_number":746,"context_line":"            fake_vif_plug.assert_called_with(fake_vm, fake_vif)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def test_attach_interface_exception(self):"},{"line_number":749,"context_line":"        self._test_attach_interface(constants.VM_GEN_1,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_17d32860","line":746,"updated":"2015-01-12 18:44:46.000000000","message":"ditto","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":743,"context_line":"                                                mock.sentinel.FAKE_VM_NAME,"},{"line_number":744,"context_line":"                                                mock.sentinel.FAKE_VIF_ID,"},{"line_number":745,"context_line":"                                                mock.sentinel.FAKE_VIF_ADDRESS)"},{"line_number":746,"context_line":"            fake_vif_plug.assert_called_with(fake_vm, fake_vif)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def test_attach_interface_exception(self):"},{"line_number":749,"context_line":"        self._test_attach_interface(constants.VM_GEN_1,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_1f1085aa","line":746,"in_reply_to":"3a961159_17d32860","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def test_attach_interface_exception(self):"},{"line_number":749,"context_line":"        self._test_attach_interface(constants.VM_GEN_1,"},{"line_number":750,"context_line":"                                    constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"    def test_attach_interface_generation2_vm_enabled(self):"},{"line_number":753,"context_line":"        self._test_attach_interface(constants.VM_GEN_2,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_57f690fa","line":750,"updated":"2015-01-12 18:44:46.000000000","message":"_test_attach_interface has a @mock decorator. Calling it with like this will override the mocked argument. Call with key-value arguments instead.","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":747,"context_line":""},{"line_number":748,"context_line":"    def test_attach_interface_exception(self):"},{"line_number":749,"context_line":"        self._test_attach_interface(constants.VM_GEN_1,"},{"line_number":750,"context_line":"                                    constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":751,"context_line":""},{"line_number":752,"context_line":"    def test_attach_interface_generation2_vm_enabled(self):"},{"line_number":753,"context_line":"        self._test_attach_interface(constants.VM_GEN_2,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_5f0a0d7a","line":750,"in_reply_to":"3a961159_57f690fa","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":767,"context_line":"                               vm_power_state,"},{"line_number":768,"context_line":"                               fake_get_vm_state):"},{"line_number":769,"context_line":""},{"line_number":770,"context_line":"        fake_vm \u003d mock.MagicMock()"},{"line_number":771,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"},{"line_number":772,"context_line":"        fake_vm.uuid \u003d mock.sentinel.FAKE_VM_UUID"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_97be38ff","line":770,"updated":"2015-01-12 18:44:46.000000000","message":"ditto _test_attach_interface method","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":767,"context_line":"                               vm_power_state,"},{"line_number":768,"context_line":"                               fake_get_vm_state):"},{"line_number":769,"context_line":""},{"line_number":770,"context_line":"        fake_vm \u003d mock.MagicMock()"},{"line_number":771,"context_line":"        fake_vm.name \u003d mock.sentinel.FAKE_VM_NAME"},{"line_number":772,"context_line":"        fake_vm.uuid \u003d mock.sentinel.FAKE_VM_UUID"},{"line_number":773,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_7f0d098f","line":770,"in_reply_to":"3a961159_97be38ff","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f16a068655d53731db9e414f3a2d074e8274846","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        else:"},{"line_number":745,"context_line":"            self._vmops.attach_interface(fake_vm, fake_vif)"},{"line_number":746,"context_line":"            self._vmops._vmutils.create_nic.assert_called_once_with("},{"line_number":747,"context_line":"                                                fake_vm[\u0027name\u0027],"},{"line_number":748,"context_line":"                                                fake_vif[\u0027id\u0027],"},{"line_number":749,"context_line":"                                                fake_vif[\u0027address\u0027])"},{"line_number":750,"context_line":"            fake_vif_plug.assert_called_once_with(fake_vm, fake_vif)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_2c962695","line":747,"updated":"2015-01-21 21:21:10.000000000","message":"fake_vm.name","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"a45847bea43ea3c2e86890aee4777c26554d4131","unresolved":false,"context_lines":[{"line_number":744,"context_line":"        else:"},{"line_number":745,"context_line":"            self._vmops.attach_interface(fake_vm, fake_vif)"},{"line_number":746,"context_line":"            self._vmops._vmutils.create_nic.assert_called_once_with("},{"line_number":747,"context_line":"                                                fake_vm[\u0027name\u0027],"},{"line_number":748,"context_line":"                                                fake_vif[\u0027id\u0027],"},{"line_number":749,"context_line":"                                                fake_vif[\u0027address\u0027])"},{"line_number":750,"context_line":"            fake_vif_plug.assert_called_once_with(fake_vm, fake_vif)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_0d2ac48f","line":747,"in_reply_to":"1a930d6b_2c962695","updated":"2015-01-26 15:13:13.000000000","message":"Done","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f16a068655d53731db9e414f3a2d074e8274846","unresolved":false,"context_lines":[{"line_number":791,"context_line":""},{"line_number":792,"context_line":"            fake_vif_unplug.assert_called_once_with(fake_vm, fake_vif)"},{"line_number":793,"context_line":"            self._vmops._vmutils.destroy_nic.assert_called_once_with("},{"line_number":794,"context_line":"                                                fake_vm[\u0027name\u0027],"},{"line_number":795,"context_line":"                                                fake_vif[\u0027id\u0027])"},{"line_number":796,"context_line":""},{"line_number":797,"context_line":"    def test_detach_interface_exception(self):"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_4c9372a3","line":794,"updated":"2015-01-21 21:21:10.000000000","message":"fake_vm.name","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2250da4826c53ab5ff7fc4c8cec46a47e3faa8c1","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"            vm_state\u003dconstants.HYPERV_VM_STATE_ENABLED)"},{"line_number":1098,"context_line":""},{"line_number":1099,"context_line":"    def test_check_if_hotplug_is_available_win_6_4(self):"},{"line_number":1100,"context_line":"        self._test_check_hotplug_is_available(vm_gen\u003dconstants.VM_GEN_2,"},{"line_number":1101,"context_line":"            windows_version\u003dself._WIN_VERSION_6_4,"},{"line_number":1102,"context_line":"            vm_state\u003dconstants.HYPERV_VM_STATE_ENABLED)"},{"line_number":1103,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_16e98d14","line":1100,"updated":"2015-05-04 09:13:31.000000000","message":"What\u0027s the difference between this and the above test? I see exactly the same call.","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"591e56d3f2f58bed4cc1b8c454c6636b8092f687","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"            vm_state\u003dconstants.HYPERV_VM_STATE_ENABLED)"},{"line_number":1098,"context_line":""},{"line_number":1099,"context_line":"    def test_check_if_hotplug_is_available_win_6_4(self):"},{"line_number":1100,"context_line":"        self._test_check_hotplug_is_available(vm_gen\u003dconstants.VM_GEN_2,"},{"line_number":1101,"context_line":"            windows_version\u003dself._WIN_VERSION_6_4,"},{"line_number":1102,"context_line":"            vm_state\u003dconstants.HYPERV_VM_STATE_ENABLED)"},{"line_number":1103,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_4ce9b8e5","line":1100,"in_reply_to":"3acd31a7_16e98d14","updated":"2015-05-04 11:26:27.000000000","message":"Done","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2250da4826c53ab5ff7fc4c8cec46a47e3faa8c1","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_create_and_attach_interface\u0027)"},{"line_number":1140,"context_line":"    def _test_attach_interface(self, mock_create_and_attach_interface,"},{"line_number":1141,"context_line":"                               mock_check_hotplug_is_available, vm_state):"},{"line_number":1142,"context_line":"        fake_vm \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":1143,"context_line":"        fake_vif \u003d test_virtual_interface.fake_vif"},{"line_number":1144,"context_line":"        fake_vif[\u0027type\u0027] \u003d mock.sentinel.VIF_TYPE"},{"line_number":1145,"context_line":"        if vm_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_b6d41947","line":1142,"updated":"2015-05-04 09:13:31.000000000","message":"Is the vif type used anywhere in the method being tested?\n\nYou can use sentinels for the vif as well as instance objects.","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"591e56d3f2f58bed4cc1b8c454c6636b8092f687","unresolved":false,"context_lines":[{"line_number":1139,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_create_and_attach_interface\u0027)"},{"line_number":1140,"context_line":"    def _test_attach_interface(self, mock_create_and_attach_interface,"},{"line_number":1141,"context_line":"                               mock_check_hotplug_is_available, vm_state):"},{"line_number":1142,"context_line":"        fake_vm \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":1143,"context_line":"        fake_vif \u003d test_virtual_interface.fake_vif"},{"line_number":1144,"context_line":"        fake_vif[\u0027type\u0027] \u003d mock.sentinel.VIF_TYPE"},{"line_number":1145,"context_line":"        if vm_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_cc2708b5","line":1142,"in_reply_to":"3acd31a7_b6d41947","updated":"2015-05-04 11:26:27.000000000","message":"Done","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2250da4826c53ab5ff7fc4c8cec46a47e3faa8c1","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"    def test_detach_and_destroy_interface(self, mock_get_vif_driver):"},{"line_number":1165,"context_line":"        fake_vm \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":1166,"context_line":"        fake_vif \u003d test_virtual_interface.fake_vif"},{"line_number":1167,"context_line":"        fake_vif[\u0027type\u0027] \u003d mock.sentinel.VIF_TYPE"},{"line_number":1168,"context_line":"        fake_vif_driver \u003d mock_get_vif_driver.return_value"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"        self._vmops._detach_and_destroy_interface(fake_vm, fake_vif)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_76ce81b5","line":1167,"updated":"2015-05-04 09:13:31.000000000","message":"Ditto.","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"591e56d3f2f58bed4cc1b8c454c6636b8092f687","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"    def test_detach_and_destroy_interface(self, mock_get_vif_driver):"},{"line_number":1165,"context_line":"        fake_vm \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":1166,"context_line":"        fake_vif \u003d test_virtual_interface.fake_vif"},{"line_number":1167,"context_line":"        fake_vif[\u0027type\u0027] \u003d mock.sentinel.VIF_TYPE"},{"line_number":1168,"context_line":"        fake_vif_driver \u003d mock_get_vif_driver.return_value"},{"line_number":1169,"context_line":""},{"line_number":1170,"context_line":"        self._vmops._detach_and_destroy_interface(fake_vm, fake_vif)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_2ccb1c74","line":1167,"in_reply_to":"3acd31a7_76ce81b5","updated":"2015-05-04 11:26:27.000000000","message":"vif[\u0027type\u0027] is being used in L736 in vmops.py","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2250da4826c53ab5ff7fc4c8cec46a47e3faa8c1","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1176,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_detach_and_destroy_interface\u0027)"},{"line_number":1177,"context_line":"    def test_detach_interface(self, mock_detach_and_destroy_interface,"},{"line_number":1178,"context_line":"                               mock_check_hotplug_is_available):"},{"line_number":1179,"context_line":"        fake_vm \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":1180,"context_line":"        fake_vif \u003d test_virtual_interface.fake_vif"},{"line_number":1181,"context_line":"        fake_vif[\u0027type\u0027] \u003d mock.sentinel.VIF_TYPE"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_96cb5da5","line":1178,"updated":"2015-05-04 09:13:31.000000000","message":"Indentation is off here.","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"591e56d3f2f58bed4cc1b8c454c6636b8092f687","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1176,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_detach_and_destroy_interface\u0027)"},{"line_number":1177,"context_line":"    def test_detach_interface(self, mock_detach_and_destroy_interface,"},{"line_number":1178,"context_line":"                               mock_check_hotplug_is_available):"},{"line_number":1179,"context_line":"        fake_vm \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":1180,"context_line":"        fake_vif \u003d test_virtual_interface.fake_vif"},{"line_number":1181,"context_line":"        fake_vif[\u0027type\u0027] \u003d mock.sentinel.VIF_TYPE"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_0cf3c0d7","line":1178,"in_reply_to":"3acd31a7_96cb5da5","updated":"2015-05-04 11:26:27.000000000","message":"Done","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"883301aa321c0f872185a56b313192b61add6c17","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"        self._vmops._detach_and_destroy_interface(fake_vm, fake_vif)"},{"line_number":1158,"context_line":"        fake_vif_driver.unplug.assert_called_once_with(fake_vm, fake_vif)"},{"line_number":1159,"context_line":"        self._vmops._vmutils.destroy_nic.assert_called_once_with(fake_vm.name,"},{"line_number":1160,"context_line":"            fake_vif[\u0027id\u0027])"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1163,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_detach_and_destroy_interface\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_f2217afc","line":1160,"updated":"2015-05-04 13:12:20.000000000","message":"match indentation with fake_vm","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"3afd2902a0913f63bad257b4baa6998be65f4662","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"        self._vmops._detach_and_destroy_interface(fake_vm, fake_vif)"},{"line_number":1158,"context_line":"        fake_vif_driver.unplug.assert_called_once_with(fake_vm, fake_vif)"},{"line_number":1159,"context_line":"        self._vmops._vmutils.destroy_nic.assert_called_once_with(fake_vm.name,"},{"line_number":1160,"context_line":"            fake_vif[\u0027id\u0027])"},{"line_number":1161,"context_line":""},{"line_number":1162,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1163,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_detach_and_destroy_interface\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_983027a0","line":1160,"in_reply_to":"3acd31a7_f2217afc","updated":"2015-05-04 13:30:56.000000000","message":"Done","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"a8647e245f1181a67d91239b2dc2d28d3c674e54","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"            vm_state\u003dconstants.HYPERV_VM_STATE_ENABLED)"},{"line_number":1088,"context_line":""},{"line_number":1089,"context_line":"    def test_check_if_hotplug_is_available_gen2(self):"},{"line_number":1090,"context_line":"        self._test_check_hotplug_is_available(vm_gen\u003dconstants.VM_GEN_2,"},{"line_number":1091,"context_line":"            windows_version\u003dself._WIN_VERSION_6_4,"},{"line_number":1092,"context_line":"            vm_state\u003dconstants.HYPERV_VM_STATE_ENABLED)"},{"line_number":1093,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3acd31a7_f54a6725","line":1090,"updated":"2015-05-05 07:41:06.000000000","message":"This is equivalent with test_check_if_hotplug_is_available_win_6_4. There is no benefit in running the same test w/ a different name.","commit_id":"7a276087762038781042b183d924317b72ffbcc0"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"5fdcf38dd4352d293fccb60687972d12ed846d10","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"        if windows_version \u003d\u003d self._WIN_VERSION_6_3:"},{"line_number":1109,"context_line":"            fake_check_win_vers.return_value \u003d False"},{"line_number":1110,"context_line":"        else:"},{"line_number":1111,"context_line":"            fake_check_win_vers.return_value \u003d True"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"        if (windows_version \u003d\u003d self._WIN_VERSION_6_3 or"},{"line_number":1114,"context_line":"                vm_gen \u003d\u003d constants.VM_GEN_1):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3afb71cf_487e98e5","line":1111,"updated":"2015-06-05 18:37:07.000000000","message":"this could be written as:\n\n    fake_check_win_vers.return_value \u003d windows_version \u003d\u003d self._WIN_VERSION_6_4\n\nself._WIN_VERSION_6_4 in order to maintain the same logic as the if-else.","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"882986a496dec969e6b7ba3ba67c2abddcd8d1e3","unresolved":false,"context_lines":[{"line_number":1108,"context_line":"        if windows_version \u003d\u003d self._WIN_VERSION_6_3:"},{"line_number":1109,"context_line":"            fake_check_win_vers.return_value \u003d False"},{"line_number":1110,"context_line":"        else:"},{"line_number":1111,"context_line":"            fake_check_win_vers.return_value \u003d True"},{"line_number":1112,"context_line":""},{"line_number":1113,"context_line":"        if (windows_version \u003d\u003d self._WIN_VERSION_6_3 or"},{"line_number":1114,"context_line":"                vm_gen \u003d\u003d constants.VM_GEN_1):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a50d1a3_0dc6fa67","line":1111,"in_reply_to":"3afb71cf_487e98e5","updated":"2015-07-22 14:27:19.000000000","message":"Done","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"5fdcf38dd4352d293fccb60687972d12ed846d10","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        self._vmops._detach_and_destroy_interface(fake_vm, fake_vif)"},{"line_number":1211,"context_line":"        fake_vif_driver.unplug.assert_called_once_with(fake_vm, fake_vif)"},{"line_number":1212,"context_line":"        self._vmops._vmutils.destroy_nic.assert_called_once_with(fake_vm.name,"},{"line_number":1213,"context_line":"            fake_vif[\u0027id\u0027])"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1216,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_detach_and_destroy_interface\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"3afb71cf_c8d848f2","line":1213,"range":{"start_line":1213,"start_character":22,"end_line":1213,"end_character":24},"updated":"2015-06-05 18:37:07.000000000","message":"nit: either indent this to match fake_vm.name, either put fake_vm.name on a new line to match fake_vif[\u0027id\u0027]","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"882986a496dec969e6b7ba3ba67c2abddcd8d1e3","unresolved":false,"context_lines":[{"line_number":1210,"context_line":"        self._vmops._detach_and_destroy_interface(fake_vm, fake_vif)"},{"line_number":1211,"context_line":"        fake_vif_driver.unplug.assert_called_once_with(fake_vm, fake_vif)"},{"line_number":1212,"context_line":"        self._vmops._vmutils.destroy_nic.assert_called_once_with(fake_vm.name,"},{"line_number":1213,"context_line":"            fake_vif[\u0027id\u0027])"},{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1216,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_detach_and_destroy_interface\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a50d1a3_2dc3b658","line":1213,"range":{"start_line":1213,"start_character":22,"end_line":1213,"end_character":24},"in_reply_to":"3afb71cf_c8d848f2","updated":"2015-07-22 14:27:19.000000000","message":"Done","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"06d75ece5e79f4a22f5517b4622f6e2125de5e63","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"        mock_get_vif_driver.assert_called_once_with(mock.sentinel.VIF_TYPE)"},{"line_number":1176,"context_line":"        fake_vif_driver.plug.assert_called_once_with(fake_vm, fake_vif)"},{"line_number":1177,"context_line":"        if vm_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"},{"line_number":1178,"context_line":"                fake_vif_driver.post_start.assert_called_once_with(fake_vm,"},{"line_number":1179,"context_line":"                                                                   fake_vif)"},{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"    def test_create_and_attach_interface_vm_enabled(self):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a50d1a3_6998601c","line":1178,"updated":"2015-07-30 12:40:25.000000000","message":"overindented without any reason.","commit_id":"8250440a68a851393664505c28c6276d0017873c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"06d75ece5e79f4a22f5517b4622f6e2125de5e63","unresolved":false,"context_lines":[{"line_number":1180,"context_line":""},{"line_number":1181,"context_line":"    def test_create_and_attach_interface_vm_enabled(self):"},{"line_number":1182,"context_line":"        self._test_create_and_attach_interface("},{"line_number":1183,"context_line":"                vm_state \u003d constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"    def test_create_and_attach_interface_vm_disabled(self):"},{"line_number":1186,"context_line":"        self._test_create_and_attach_interface("}],"source_content_type":"text/x-python","patch_set":24,"id":"3a50d1a3_099d1c0a","line":1183,"updated":"2015-07-30 12:40:25.000000000","message":"overindented without any reason.","commit_id":"8250440a68a851393664505c28c6276d0017873c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"06d75ece5e79f4a22f5517b4622f6e2125de5e63","unresolved":false,"context_lines":[{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"    def test_create_and_attach_interface_vm_disabled(self):"},{"line_number":1186,"context_line":"        self._test_create_and_attach_interface("},{"line_number":1187,"context_line":"                vm_state \u003d constants.HYPERV_VM_STATE_DISABLED)"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1190,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_create_and_attach_interface\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a50d1a3_a9f74858","line":1187,"updated":"2015-07-30 12:40:25.000000000","message":"overindented without any reason.","commit_id":"8250440a68a851393664505c28c6276d0017873c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"06d75ece5e79f4a22f5517b4622f6e2125de5e63","unresolved":false,"context_lines":[{"line_number":1226,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_check_hotplug_is_available\u0027)"},{"line_number":1227,"context_line":"    @mock.patch.object(vmops.VMOps, \u0027_detach_and_destroy_interface\u0027)"},{"line_number":1228,"context_line":"    def test_detach_interface(self, mock_detach_and_destroy_interface,"},{"line_number":1229,"context_line":"                               mock_check_hotplug_is_available):"},{"line_number":1230,"context_line":"        fake_vm \u003d fake_instance.fake_instance_obj(self.context)"},{"line_number":1231,"context_line":"        fake_vif \u003d test_virtual_interface.fake_vif"},{"line_number":1232,"context_line":"        fake_vif[\u0027type\u0027] \u003d mock.sentinel.VIF_TYPE"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a50d1a3_c9d974f6","line":1229,"updated":"2015-07-30 12:40:25.000000000","message":"one too many spaces here. it doesn\u0027t align with self.. :)","commit_id":"8250440a68a851393664505c28c6276d0017873c"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"db155c3d1bda5096619b47e24779df45803598b1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    FAKE_CONFIG_DRIVE_VHD \u003d \u0027configdrive.vhd\u0027"},{"line_number":47,"context_line":"    FAKE_UUID \u003d \u00274f54fb69-d3a2-45b7-bb9b-b6e6b3d893b3\u0027"},{"line_number":48,"context_line":"    FAKE_LOG \u003d \u0027fake_log\u0027"},{"line_number":49,"context_line":"    _WIN_VERSION_6_3 \u003d \u00276.3.0\u0027"},{"line_number":50,"context_line":"    _WIN_VERSION_6_4 \u003d \u00276.4.0\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    _WIN_VERSION_6_3 \u003d \u00276.3.0\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"da85f559_3c27b365","line":49,"updated":"2015-11-10 14:36:28.000000000","message":"already exists.","commit_id":"062733c856486233b53f8cb82658090ddabd5021"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"db155c3d1bda5096619b47e24779df45803598b1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    FAKE_UUID \u003d \u00274f54fb69-d3a2-45b7-bb9b-b6e6b3d893b3\u0027"},{"line_number":48,"context_line":"    FAKE_LOG \u003d \u0027fake_log\u0027"},{"line_number":49,"context_line":"    _WIN_VERSION_6_3 \u003d \u00276.3.0\u0027"},{"line_number":50,"context_line":"    _WIN_VERSION_6_4 \u003d \u00276.4.0\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    _WIN_VERSION_6_3 \u003d \u00276.3.0\u0027"},{"line_number":53,"context_line":"    _WIN_VERSION_10 \u003d \u002710.0\u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"da85f559_dc16a7f0","line":50,"updated":"2015-11-10 14:36:28.000000000","message":"unused.","commit_id":"062733c856486233b53f8cb82658090ddabd5021"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"db155c3d1bda5096619b47e24779df45803598b1","unresolved":false,"context_lines":[{"line_number":1161,"context_line":"        self._test_check_hotplug_available("},{"line_number":1162,"context_line":"            expected_result\u003dFalse, vm_gen\u003dconstants.VM_GEN_1)"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"    def test_check_if_hotplug_is_available_gen2(self):"},{"line_number":1165,"context_line":"        self._test_check_hotplug_available("},{"line_number":1166,"context_line":"            expected_result\u003dTrue, vm_gen\u003dconstants.VM_GEN_2)"},{"line_number":1167,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"da85f559_1cc18f80","line":1164,"updated":"2015-11-10 14:36:28.000000000","message":"test already exists: test_check_if_hotplug_available - VM_GEN_2 is the default argument.","commit_id":"062733c856486233b53f8cb82658090ddabd5021"}],"nova/tests/unit/virt/hyperv/test_vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        mock_get_nic_data_by_name.return_value \u003d fake_nic_data"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        with mock.patch.object(self._vmutils,"},{"line_number":401,"context_line":"            \u0027_remove_virt_resource\u0027) as mock_remove_virt_res:"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            self._vmutils.destroy_nic(self._FAKE_VM_NAME,"},{"line_number":404,"context_line":"                                      self._FAKE_NIC_NAME)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_d74fe032","line":401,"updated":"2015-01-12 18:44:46.000000000","message":"indent this once, so it is distinguishable from the code block. This way the empty line below is not necessary.","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":398,"context_line":"        mock_get_nic_data_by_name.return_value \u003d fake_nic_data"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        with mock.patch.object(self._vmutils,"},{"line_number":401,"context_line":"            \u0027_remove_virt_resource\u0027) as mock_remove_virt_res:"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            self._vmutils.destroy_nic(self._FAKE_VM_NAME,"},{"line_number":404,"context_line":"                                      self._FAKE_NIC_NAME)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_9ff55586","line":401,"in_reply_to":"3a961159_d74fe032","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":401,"context_line":"            \u0027_remove_virt_resource\u0027) as mock_remove_virt_res:"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            self._vmutils.destroy_nic(self._FAKE_VM_NAME,"},{"line_number":404,"context_line":"                                      self._FAKE_NIC_NAME)"},{"line_number":405,"context_line":"            mock_remove_virt_res.assert_called_with(fake_nic_data,"},{"line_number":406,"context_line":"                self._FAKE_VM_PATH)"},{"line_number":407,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_d7eb60da","line":404,"updated":"2015-01-12 18:44:46.000000000","message":"let\u0027s use mock.sentinel instead, we will have to get rid of self._FAKE_STUFF.","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":401,"context_line":"            \u0027_remove_virt_resource\u0027) as mock_remove_virt_res:"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            self._vmutils.destroy_nic(self._FAKE_VM_NAME,"},{"line_number":404,"context_line":"                                      self._FAKE_NIC_NAME)"},{"line_number":405,"context_line":"            mock_remove_virt_res.assert_called_with(fake_nic_data,"},{"line_number":406,"context_line":"                self._FAKE_VM_PATH)"},{"line_number":407,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_bff05193","line":404,"in_reply_to":"3a961159_d7eb60da","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"dafe6d85eeed035dc6ac997ff5d5b3375f1d3e04","unresolved":false,"context_lines":[{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            self._vmutils.destroy_nic(self._FAKE_VM_NAME,"},{"line_number":404,"context_line":"                                      self._FAKE_NIC_NAME)"},{"line_number":405,"context_line":"            mock_remove_virt_res.assert_called_with(fake_nic_data,"},{"line_number":406,"context_line":"                self._FAKE_VM_PATH)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def test_set_vm_state(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_b769748e","line":405,"updated":"2015-01-12 18:44:46.000000000","message":"assert_called_once_with. Also, align the self._FAKE_VM_PATH below, so the arguments align.","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"44013d747d697f6356392b98f741027e053fbca7","unresolved":false,"context_lines":[{"line_number":402,"context_line":""},{"line_number":403,"context_line":"            self._vmutils.destroy_nic(self._FAKE_VM_NAME,"},{"line_number":404,"context_line":"                                      self._FAKE_NIC_NAME)"},{"line_number":405,"context_line":"            mock_remove_virt_res.assert_called_with(fake_nic_data,"},{"line_number":406,"context_line":"                self._FAKE_VM_PATH)"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    def test_set_vm_state(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a961159_ffead99e","line":405,"in_reply_to":"3a961159_b769748e","updated":"2015-01-13 12:41:30.000000000","message":"Done","commit_id":"b62dae3974d3e3373a88f09ba84476b17b4c6169"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f16a068655d53731db9e414f3a2d074e8274846","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        vm_gen_string \u003d \"Microsoft:Hyper-V:SubType:\" + str(vm_gen)"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":"        mock_vssd \u003d mock.MagicMock()"},{"line_number":800,"context_line":"        mock_vssd.VirtualSystemSubType \u003d vm_gen_string"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"        self._vmutils._conn.Msvm_VirtualSystemSettingData.return_value \u003d ["},{"line_number":803,"context_line":"            mock_vssd]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_4c48d22d","line":800,"updated":"2015-01-21 21:21:10.000000000","message":"just a suggestion, you can also use:\n\n    mock_vssd \u003d mock.MagicMock(VirtualSystemSubType\u003dvm_gen_string)","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"a45847bea43ea3c2e86890aee4777c26554d4131","unresolved":false,"context_lines":[{"line_number":797,"context_line":"        vm_gen_string \u003d \"Microsoft:Hyper-V:SubType:\" + str(vm_gen)"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":"        mock_vssd \u003d mock.MagicMock()"},{"line_number":800,"context_line":"        mock_vssd.VirtualSystemSubType \u003d vm_gen_string"},{"line_number":801,"context_line":""},{"line_number":802,"context_line":"        self._vmutils._conn.Msvm_VirtualSystemSettingData.return_value \u003d ["},{"line_number":803,"context_line":"            mock_vssd]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_4d1f6c6c","line":800,"in_reply_to":"1a930d6b_4c48d22d","updated":"2015-01-26 15:13:13.000000000","message":"Done","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"f877123fc04283eaece4145eb54d1d85236bfb84","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        self._lookup_vm()"},{"line_number":396,"context_line":"        fake_nic_data \u003d mock.MagicMock()"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        mock_get_nic_data_by_name.return_value \u003d fake_nic_data"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        with mock.patch.object(self._vmutils,"},{"line_number":401,"context_line":"                               \u0027_remove_virt_resource\u0027) as mock_rem_virt_res:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3acd31a7_f6aabf18","line":398,"updated":"2015-04-30 21:38:27.000000000","message":"Or even better:\nfake_nic_data \u003d mock_get_nic_data_by_name.return_value","commit_id":"0de299afd5f617558e8c6db69e7bbfce8b3b78cd"}],"nova/virt/hyperv/constants.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f16a068655d53731db9e414f3a2d074e8274846","unresolved":false,"context_lines":[{"line_number":66,"context_line":"VM_SUMMARY_ENABLED_STATE \u003d 100"},{"line_number":67,"context_line":"VM_SUMMARY_MEMORY_USAGE \u003d 103"},{"line_number":68,"context_line":"VM_SUMMARY_UPTIME \u003d 105"},{"line_number":69,"context_line":"VM_SUMMARY_SUBTYPE \u003d 135"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"CTRL_TYPE_IDE \u003d \"IDE\""},{"line_number":72,"context_line":"CTRL_TYPE_SCSI \u003d \"SCSI\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_2cf9c6c8","line":69,"updated":"2015-01-21 21:21:10.000000000","message":"I can\u0027t seem to find this being used anywhere?","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"a45847bea43ea3c2e86890aee4777c26554d4131","unresolved":false,"context_lines":[{"line_number":66,"context_line":"VM_SUMMARY_ENABLED_STATE \u003d 100"},{"line_number":67,"context_line":"VM_SUMMARY_MEMORY_USAGE \u003d 103"},{"line_number":68,"context_line":"VM_SUMMARY_UPTIME \u003d 105"},{"line_number":69,"context_line":"VM_SUMMARY_SUBTYPE \u003d 135"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"CTRL_TYPE_IDE \u003d \"IDE\""},{"line_number":72,"context_line":"CTRL_TYPE_SCSI \u003d \"SCSI\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_b1066a1b","line":69,"in_reply_to":"1a930d6b_2cf9c6c8","updated":"2015-01-26 15:13:13.000000000","message":"Indeed. Missed that one, thanks","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"9cea58f1b527e80f5be40ef6c65499b44972f8c9","unresolved":false,"context_lines":[{"line_number":687,"context_line":"        if (self._vmutils.get_vm_generation(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":688,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":689,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":690,"context_line":"            LOG.error(_(\"Cannot not remove nic to a first generation vm\""},{"line_number":691,"context_line":"                        \"while it is running\"))"},{"line_number":692,"context_line":"            raise exception.InterfaceAttachFailed("},{"line_number":693,"context_line":"                instance_uuid\u003dinstance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_2e6e5f96","line":690,"updated":"2014-12-04 13:37:43.000000000","message":"Please use `_LE` here.","commit_id":"683c6e82e58b75131f7703d77499522af0bec903"},{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"9cea58f1b527e80f5be40ef6c65499b44972f8c9","unresolved":false,"context_lines":[{"line_number":701,"context_line":"        if (self._vmutils.get_vm_generation(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":702,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":703,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":704,"context_line":"            LOG.error(_(\"Cannot not remove nic to a first generation vm\""},{"line_number":705,"context_line":"                        \"while it is running\"))"},{"line_number":706,"context_line":"            raise exception.InterfaceDetachFailed("},{"line_number":707,"context_line":"                instance_uuid\u003dinstance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_0efa83bc","line":704,"updated":"2014-12-04 13:37:43.000000000","message":"ditto","commit_id":"683c6e82e58b75131f7703d77499522af0bec903"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"875569516473b58770f56a8f85c3ba301a3d85d8","unresolved":false,"context_lines":[{"line_number":683,"context_line":"                self.log_vm_serial_output(instance_name, instance_uuid)"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"    def attach_interface(self, instance, vif):"},{"line_number":686,"context_line":"        if (self._vmutils.get_vm_generation(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":687,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":688,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":689,"context_line":"            LOG.error(_LE(\"Cannot not remove nic to a first generation vm\""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_4324b6ae","line":686,"updated":"2014-12-11 12:07:39.000000000","message":"instance is an object here - can you please use instance.whatever instead of instance[\u0027whatever\u0027]","commit_id":"e855a8b0eb30674f960b8a0a99b32b9ba1f93263"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"875569516473b58770f56a8f85c3ba301a3d85d8","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        if (self._vmutils.get_vm_generation(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":687,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":688,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":689,"context_line":"            LOG.error(_LE(\"Cannot not remove nic to a first generation vm\""},{"line_number":690,"context_line":"                          \"while it is running\"))"},{"line_number":691,"context_line":"            raise exception.InterfaceAttachFailed("},{"line_number":692,"context_line":"                instance_uuid\u003dinstance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_a332baef","line":689,"updated":"2014-12-11 12:07:39.000000000","message":"missing space","commit_id":"e855a8b0eb30674f960b8a0a99b32b9ba1f93263"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"875569516473b58770f56a8f85c3ba301a3d85d8","unresolved":false,"context_lines":[{"line_number":689,"context_line":"            LOG.error(_LE(\"Cannot not remove nic to a first generation vm\""},{"line_number":690,"context_line":"                          \"while it is running\"))"},{"line_number":691,"context_line":"            raise exception.InterfaceAttachFailed("},{"line_number":692,"context_line":"                instance_uuid\u003dinstance[\u0027uuid\u0027])"},{"line_number":693,"context_line":"        else:"},{"line_number":694,"context_line":"            self._vmutils.create_nic(instance[\u0027name\u0027],"},{"line_number":695,"context_line":"                                     vif[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_032e2e92","line":692,"updated":"2014-12-11 12:07:39.000000000","message":"this should be an instance object - please use instance.uuid","commit_id":"e855a8b0eb30674f960b8a0a99b32b9ba1f93263"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"875569516473b58770f56a8f85c3ba301a3d85d8","unresolved":false,"context_lines":[{"line_number":700,"context_line":"        if (self._vmutils.get_vm_generation(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":701,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance[\u0027name\u0027]) \u003d\u003d"},{"line_number":702,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":703,"context_line":"            LOG.error(_LE(\"Cannot not remove nic to a first generation vm\""},{"line_number":704,"context_line":"                          \"while it is running\"))"},{"line_number":705,"context_line":"            raise exception.InterfaceDetachFailed("},{"line_number":706,"context_line":"                instance_uuid\u003dinstance[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a961159_c32fc686","line":703,"updated":"2014-12-11 12:07:39.000000000","message":"missing space","commit_id":"e855a8b0eb30674f960b8a0a99b32b9ba1f93263"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f16a068655d53731db9e414f3a2d074e8274846","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":690,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance.name) \u003d\u003d"},{"line_number":691,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":692,"context_line":"            LOG.error(_LE(\"Cannot not remove nic to a first generation vm \""},{"line_number":693,"context_line":"                          \"while it is running\"))"},{"line_number":694,"context_line":"            raise exception.InterfaceAttachFailed("},{"line_number":695,"context_line":"                instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_ccd84256","line":692,"updated":"2015-01-21 21:21:10.000000000","message":"Ahem, double negative is fun. :D\n\nCannot not remove NIC... :D\n\nAlso, this is attach_interface, so no removing.\n\nAlso, I think uppercased NIC and VM would look better, since they\u0027re acronyms. :)","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"a45847bea43ea3c2e86890aee4777c26554d4131","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":690,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance.name) \u003d\u003d"},{"line_number":691,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":692,"context_line":"            LOG.error(_LE(\"Cannot not remove nic to a first generation vm \""},{"line_number":693,"context_line":"                          \"while it is running\"))"},{"line_number":694,"context_line":"            raise exception.InterfaceAttachFailed("},{"line_number":695,"context_line":"                instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_97f6c3f7","line":692,"in_reply_to":"1a930d6b_ccd84256","updated":"2015-01-26 15:13:13.000000000","message":"Yes, the old copy and paste routine :)","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2f16a068655d53731db9e414f3a2d074e8274846","unresolved":false,"context_lines":[{"line_number":703,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":704,"context_line":"                constants.VM_GEN_1 and self._get_vm_state(instance.name) \u003d\u003d"},{"line_number":705,"context_line":"                constants.HYPERV_VM_STATE_ENABLED):"},{"line_number":706,"context_line":"            LOG.error(_LE(\"Cannot not remove nic to a first generation vm \""},{"line_number":707,"context_line":"                          \"while it is running\"))"},{"line_number":708,"context_line":"            raise exception.InterfaceDetachFailed("},{"line_number":709,"context_line":"                instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a930d6b_0ce32a08","line":706,"updated":"2015-01-21 21:21:10.000000000","message":"Ditto.","commit_id":"d49484f7578b9a9b39963ec30b695b01d16f0b6a"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"f877123fc04283eaece4145eb54d1d85236bfb84","unresolved":false,"context_lines":[{"line_number":709,"context_line":"                    self._vmutils.create_nic(instance.name,"},{"line_number":710,"context_line":"                                     vif[\u0027id\u0027],"},{"line_number":711,"context_line":"                                     vif[\u0027address\u0027])"},{"line_number":712,"context_line":"                    vif_driver \u003d self._get_vif_driver(vif.get(\u0027type\u0027))"},{"line_number":713,"context_line":"                    vif_driver.plug(instance, vif)"},{"line_number":714,"context_line":"                    vif_driver.post_start(instance, vif)"},{"line_number":715,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3acd31a7_56a4d355","line":712,"updated":"2015-04-30 21:38:27.000000000","message":"Lots of duplicated code and if conditions here making it painful to follow. Why not create some helper methods to avoid this? For example, you could have something like _ensure_hot_plug_is_available, thus greatly simplifying the code.\n\nThis will also simplify a lot the related unit tests.","commit_id":"0de299afd5f617558e8c6db69e7bbfce8b3b78cd"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2250da4826c53ab5ff7fc4c8cec46a47e3faa8c1","unresolved":false,"context_lines":[{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":710,"context_line":"                constants.VM_GEN_1):"},{"line_number":711,"context_line":"                LOG.error(_LE(\"Cannot hot plug vNIC to a first generation \""},{"line_number":712,"context_line":"                              \"VM.\"))"},{"line_number":713,"context_line":"                raise exception.InterfaceAttachFailed("},{"line_number":714,"context_line":"                    instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_36c12981","line":711,"updated":"2015-05-04 09:13:31.000000000","message":"Indentation is off.","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"591e56d3f2f58bed4cc1b8c454c6636b8092f687","unresolved":false,"context_lines":[{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":710,"context_line":"                constants.VM_GEN_1):"},{"line_number":711,"context_line":"                LOG.error(_LE(\"Cannot hot plug vNIC to a first generation \""},{"line_number":712,"context_line":"                              \"VM.\"))"},{"line_number":713,"context_line":"                raise exception.InterfaceAttachFailed("},{"line_number":714,"context_line":"                    instance_uuid\u003dinstance.uuid)"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_2c655ce0","line":711,"in_reply_to":"3acd31a7_36c12981","updated":"2015-05-04 11:26:27.000000000","message":"Done","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"2250da4826c53ab5ff7fc4c8cec46a47e3faa8c1","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        return True"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"    def attach_interface(self, instance, vif):"},{"line_number":719,"context_line":"        if self._check_hotplug_is_available(instance):"},{"line_number":720,"context_line":"            self._create_and_attach_interface(instance, vif,"},{"line_number":721,"context_line":"                constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":722,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_d638b5a2","line":719,"updated":"2015-05-04 09:13:31.000000000","message":"How about something like hot_plug \u003d self._check_hot_plug_is_available and pass this to _create_and_attach_interface. This way you get rid of the if check.","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"591e56d3f2f58bed4cc1b8c454c6636b8092f687","unresolved":false,"context_lines":[{"line_number":716,"context_line":"        return True"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"    def attach_interface(self, instance, vif):"},{"line_number":719,"context_line":"        if self._check_hotplug_is_available(instance):"},{"line_number":720,"context_line":"            self._create_and_attach_interface(instance, vif,"},{"line_number":721,"context_line":"                constants.HYPERV_VM_STATE_ENABLED)"},{"line_number":722,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3acd31a7_6ce114fe","line":719,"in_reply_to":"3acd31a7_d638b5a2","updated":"2015-05-04 11:26:27.000000000","message":"Done","commit_id":"8ef5998da198494171a859916b548f7eb9290364"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"883301aa321c0f872185a56b313192b61add6c17","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"    def _check_hotplug_is_available(self, instance):"},{"line_number":699,"context_line":"        if (self._get_vm_state(instance.name) \u003d\u003d"},{"line_number":700,"context_line":"            constants.HYPERV_VM_STATE_DISABLED):"},{"line_number":701,"context_line":"            return False"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"        if not self._hostutils.check_min_windows_version(6, 4):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_d2bafe09","line":700,"updated":"2015-05-04 13:12:20.000000000","message":"this line could be indented, so it can be distinguished from the return.","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"3afd2902a0913f63bad257b4baa6998be65f4662","unresolved":false,"context_lines":[{"line_number":697,"context_line":""},{"line_number":698,"context_line":"    def _check_hotplug_is_available(self, instance):"},{"line_number":699,"context_line":"        if (self._get_vm_state(instance.name) \u003d\u003d"},{"line_number":700,"context_line":"            constants.HYPERV_VM_STATE_DISABLED):"},{"line_number":701,"context_line":"            return False"},{"line_number":702,"context_line":""},{"line_number":703,"context_line":"        if not self._hostutils.check_min_windows_version(6, 4):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_18f657d7","line":700,"in_reply_to":"3acd31a7_d2bafe09","updated":"2015-05-04 13:30:56.000000000","message":"Done","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"883301aa321c0f872185a56b313192b61add6c17","unresolved":false,"context_lines":[{"line_number":707,"context_line":"                instance_uuid\u003dinstance.uuid)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":710,"context_line":"            constants.VM_GEN_1):"},{"line_number":711,"context_line":"            LOG.error(_LE(\"Cannot hot plug vNIC to a first generation \""},{"line_number":712,"context_line":"                          \"VM.\"))"},{"line_number":713,"context_line":"            raise exception.InterfaceAttachFailed("}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_d251ded9","line":710,"updated":"2015-05-04 13:12:20.000000000","message":"ditto","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"3afd2902a0913f63bad257b4baa6998be65f4662","unresolved":false,"context_lines":[{"line_number":707,"context_line":"                instance_uuid\u003dinstance.uuid)"},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"},{"line_number":710,"context_line":"            constants.VM_GEN_1):"},{"line_number":711,"context_line":"            LOG.error(_LE(\"Cannot hot plug vNIC to a first generation \""},{"line_number":712,"context_line":"                          \"VM.\"))"},{"line_number":713,"context_line":"            raise exception.InterfaceAttachFailed("}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_f804bbc0","line":710,"in_reply_to":"3acd31a7_d251ded9","updated":"2015-05-04 13:30:56.000000000","message":"Done","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"883301aa321c0f872185a56b313192b61add6c17","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    def _create_and_attach_interface(self, instance, vif, hot_plug):"},{"line_number":723,"context_line":"        self._vmutils.create_nic(instance.name,"},{"line_number":724,"context_line":"                           vif[\u0027id\u0027],"},{"line_number":725,"context_line":"                           vif[\u0027address\u0027])"},{"line_number":726,"context_line":"        vif_driver \u003d self._get_vif_driver(vif.get(\u0027type\u0027))"},{"line_number":727,"context_line":"        vif_driver.plug(instance, vif)"},{"line_number":728,"context_line":"        if hot_plug:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_f204dac0","line":725,"updated":"2015-05-04 13:12:20.000000000","message":"you could indent those lines to match the indentation of instance.name","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":12604,"name":"Adelina Tuvenie","email":"atuvenie@cloudbasesolutions.com","username":"atuvenie"},"change_message_id":"3afd2902a0913f63bad257b4baa6998be65f4662","unresolved":false,"context_lines":[{"line_number":722,"context_line":"    def _create_and_attach_interface(self, instance, vif, hot_plug):"},{"line_number":723,"context_line":"        self._vmutils.create_nic(instance.name,"},{"line_number":724,"context_line":"                           vif[\u0027id\u0027],"},{"line_number":725,"context_line":"                           vif[\u0027address\u0027])"},{"line_number":726,"context_line":"        vif_driver \u003d self._get_vif_driver(vif.get(\u0027type\u0027))"},{"line_number":727,"context_line":"        vif_driver.plug(instance, vif)"},{"line_number":728,"context_line":"        if hot_plug:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3acd31a7_d8ffbfa8","line":725,"in_reply_to":"3acd31a7_f204dac0","updated":"2015-05-04 13:30:56.000000000","message":"Done","commit_id":"0fd3fe73cf20bb35b1c3388c831aa1916346e84e"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"5fdcf38dd4352d293fccb60687972d12ed846d10","unresolved":false,"context_lines":[{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def _check_hotplug_is_available(self, instance):"},{"line_number":708,"context_line":"        if (self._get_vm_state(instance.name) \u003d\u003d"},{"line_number":709,"context_line":"            constants.HYPERV_VM_STATE_DISABLED):"},{"line_number":710,"context_line":"            return False"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if not self._hostutils.check_min_windows_version(6, 4):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3afb71cf_68883423","line":709,"updated":"2015-06-05 18:37:07.000000000","message":"nit: indent once? So it is distinguishable from the next line?","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"882986a496dec969e6b7ba3ba67c2abddcd8d1e3","unresolved":false,"context_lines":[{"line_number":706,"context_line":""},{"line_number":707,"context_line":"    def _check_hotplug_is_available(self, instance):"},{"line_number":708,"context_line":"        if (self._get_vm_state(instance.name) \u003d\u003d"},{"line_number":709,"context_line":"            constants.HYPERV_VM_STATE_DISABLED):"},{"line_number":710,"context_line":"            return False"},{"line_number":711,"context_line":""},{"line_number":712,"context_line":"        if not self._hostutils.check_min_windows_version(6, 4):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a50d1a3_adad869c","line":709,"in_reply_to":"3afb71cf_68883423","updated":"2015-07-22 14:27:19.000000000","message":"Done","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"5fdcf38dd4352d293fccb60687972d12ed846d10","unresolved":false,"context_lines":[{"line_number":735,"context_line":"    def _create_and_attach_interface(self, instance, vif, vm_state):"},{"line_number":736,"context_line":"        self._vmutils.create_nic(instance.name,"},{"line_number":737,"context_line":"                           vif[\u0027id\u0027],"},{"line_number":738,"context_line":"                           vif[\u0027address\u0027])"},{"line_number":739,"context_line":"        vif_driver \u003d self._get_vif_driver(vif.get(\u0027type\u0027))"},{"line_number":740,"context_line":"        vif_driver.plug(instance, vif)"},{"line_number":741,"context_line":"        if vm_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"}],"source_content_type":"text/x-python","patch_set":22,"id":"3afb71cf_08878010","line":738,"range":{"start_line":738,"start_character":32,"end_line":738,"end_character":39},"updated":"2015-06-05 18:37:07.000000000","message":"nit: indent to match the same indentation as instance.name","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"882986a496dec969e6b7ba3ba67c2abddcd8d1e3","unresolved":false,"context_lines":[{"line_number":735,"context_line":"    def _create_and_attach_interface(self, instance, vif, vm_state):"},{"line_number":736,"context_line":"        self._vmutils.create_nic(instance.name,"},{"line_number":737,"context_line":"                           vif[\u0027id\u0027],"},{"line_number":738,"context_line":"                           vif[\u0027address\u0027])"},{"line_number":739,"context_line":"        vif_driver \u003d self._get_vif_driver(vif.get(\u0027type\u0027))"},{"line_number":740,"context_line":"        vif_driver.plug(instance, vif)"},{"line_number":741,"context_line":"        if vm_state \u003d\u003d constants.HYPERV_VM_STATE_ENABLED:"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a50d1a3_0d9d9a65","line":738,"range":{"start_line":738,"start_character":32,"end_line":738,"end_character":39},"in_reply_to":"3afb71cf_08878010","updated":"2015-07-22 14:27:19.000000000","message":"Done","commit_id":"b46dba86f665fc1969698baa9817b4b79f4b639b"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"db155c3d1bda5096619b47e24779df45803598b1","unresolved":false,"context_lines":[{"line_number":741,"context_line":"            LOG.debug(\"Cannot hot plug vNIC to a first generation VM.\","},{"line_number":742,"context_line":"                      instance\u003dinstance)"},{"line_number":743,"context_line":"            return False"},{"line_number":744,"context_line":""},{"line_number":745,"context_line":"        return True"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"    def attach_interface(self, instance, vif):"}],"source_content_type":"text/x-python","patch_set":28,"id":"da85f559_9c9fbfb3","side":"PARENT","line":744,"updated":"2015-11-10 14:36:28.000000000","message":"unrelated change.","commit_id":"366169aac66cefc32caf7ca81434649b2c25beae"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"db155c3d1bda5096619b47e24779df45803598b1","unresolved":false,"context_lines":[{"line_number":732,"context_line":"        if not self._hostutils.check_min_windows_version(10, 0):"},{"line_number":733,"context_line":"            # TODO(claudiub): add set log level to error after string freeze."},{"line_number":734,"context_line":"            LOG.debug(\"vNIC hot plugging is supported only in versions \""},{"line_number":735,"context_line":"                      \"newer than Windows Hyper-V / Server 2012 R2.\")"},{"line_number":736,"context_line":"            return False"},{"line_number":737,"context_line":""},{"line_number":738,"context_line":"        if (self._vmutils.get_vm_generation(instance.name) \u003d\u003d"}],"source_content_type":"text/x-python","patch_set":28,"id":"da85f559_bcbac321","line":735,"updated":"2015-11-10 14:36:28.000000000","message":"unrelated change.","commit_id":"062733c856486233b53f8cb82658090ddabd5021"}],"nova/virt/hyperv/vmutilsv2.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"06d75ece5e79f4a22f5517b4622f6e2125de5e63","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    def get_vm_generation(self, vm_name):"},{"line_number":332,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":333,"context_line":"        vssd \u003d self._get_vm_setting_data(vm)"},{"line_number":334,"context_line":"        vm_gen \u003d vssd.VirtualSystemSubType"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":"        return int(vm_gen.split(\u0027:\u0027)[-1])"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a50d1a3_89184c20","line":334,"updated":"2015-07-30 12:40:25.000000000","message":"this doesn\u0027t work on Windows Server 2012. VirtualSystemSubType was introduced in 2012 R2. Check Lucian\u0027s nova rescue commit.","commit_id":"8250440a68a851393664505c28c6276d0017873c"}]}
