)]}'
{"nova/tests/unit/virt/hyperv/test_pathutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.fake_instance_dir \u003d os.path.join(\u0027C:\u0027, \u0027fake_instance_dir\u0027)"},{"line_number":29,"context_line":"        self.fake_instance_name \u003d \u0027fake_instance_name\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        pathutils.PathUtils.__init__ \u003d lambda x: None"},{"line_number":32,"context_line":"        self._pathutils \u003d pathutils.PathUtils()"},{"line_number":33,"context_line":"        self._pathutils.smb_conn \u003d mock.MagicMock()"},{"line_number":34,"context_line":"        super(PathUtilsTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_34dc1146","line":31,"updated":"2014-11-25 12:00:41.000000000","message":"this looks unsafe. You replace the constructor with a lambda and you don\u0027t do any cleanup. Try using a mock.patch.object. :)","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.fake_instance_dir \u003d os.path.join(\u0027C:\u0027, \u0027fake_instance_dir\u0027)"},{"line_number":29,"context_line":"        self.fake_instance_name \u003d \u0027fake_instance_name\u0027"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        pathutils.PathUtils.__init__ \u003d lambda x: None"},{"line_number":32,"context_line":"        self._pathutils \u003d pathutils.PathUtils()"},{"line_number":33,"context_line":"        self._pathutils.smb_conn \u003d mock.MagicMock()"},{"line_number":34,"context_line":"        super(PathUtilsTestCase, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_b279f130","line":31,"in_reply_to":"5a890539_34dc1146","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"}],"nova/tests/unit/virt/hyperv/test_vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        fake_drive \u003d mock.MagicMock()"},{"line_number":254,"context_line":"        type(fake_drive).AddressOnParent \u003d mock.PropertyMock("},{"line_number":255,"context_line":"            side_effect\u003dxrange(constants.SCSI_CONTROLLER_SLOTS_NUMBER))"},{"line_number":256,"context_line":"        fake_scsi_controller_path \u003d \u0027fake_scsi_controller_path\u0027"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        with mock.patch.object(self._vmutils,"},{"line_number":259,"context_line":"                \u0027get_attached_disks\u0027) as fake_get_attached_disks:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_f491a947","line":256,"updated":"2014-11-25 12:00:41.000000000","message":"why not a sentinel?","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        fake_drive \u003d mock.MagicMock()"},{"line_number":254,"context_line":"        type(fake_drive).AddressOnParent \u003d mock.PropertyMock("},{"line_number":255,"context_line":"            side_effect\u003dxrange(constants.SCSI_CONTROLLER_SLOTS_NUMBER))"},{"line_number":256,"context_line":"        fake_scsi_controller_path \u003d \u0027fake_scsi_controller_path\u0027"},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"        with mock.patch.object(self._vmutils,"},{"line_number":259,"context_line":"                \u0027get_attached_disks\u0027) as fake_get_attached_disks:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_f2bd39b2","line":256,"in_reply_to":"5a890539_f491a947","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"}],"nova/tests/virt/hyperv/test_volumeops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#  Copyright 2014 Cloudbase Solutions Srl"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_94cea558","line":1,"updated":"2014-11-25 12:00:41.000000000","message":"this is probably the most nit-picking I\u0027ve ever done, but, there are two spaces between # and Copyright. :)\n\nremove one. :D","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#  Copyright 2014 Cloudbase Solutions Srl"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_b2ce5158","line":1,"in_reply_to":"5a890539_94cea558","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        super(VolumeOpsTestCase, self).setUp()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_volume_driver_exception(self):"},{"line_number":44,"context_line":"        fake_conn_info \u003d {\u0027driver_volume_type\u0027: \u0027gluster\u0027}"},{"line_number":45,"context_line":"        self.assertRaises(exception.VolumeDriverNotFound,"},{"line_number":46,"context_line":"                          self.volumeops._get_volume_driver,"},{"line_number":47,"context_line":"                          fake_conn_info)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_340b317e","line":44,"updated":"2014-11-25 12:00:41.000000000","message":"this should be a constant.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        super(VolumeOpsTestCase, self).setUp()"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def test_get_volume_driver_exception(self):"},{"line_number":44,"context_line":"        fake_conn_info \u003d {\u0027driver_volume_type\u0027: \u0027gluster\u0027}"},{"line_number":45,"context_line":"        self.assertRaises(exception.VolumeDriverNotFound,"},{"line_number":46,"context_line":"                          self.volumeops._get_volume_driver,"},{"line_number":47,"context_line":"                          fake_conn_info)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_f24299a9","line":44,"in_reply_to":"5a890539_340b317e","updated":"2014-11-25 13:15:31.000000000","message":"I don\u0027t get it. Which should be a constant? This is only used once, asserting that using an unexisting/unsupported volume driver will raise an exception.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            mock.patch.object(self.volumeops,"},{"line_number":59,"context_line":"                              \u0027ebs_root_in_block_devices\u0027)"},{"line_number":60,"context_line":"            ) as (mock_get_volume_driver,"},{"line_number":61,"context_line":"                  mock_ebs_in_block_devices):"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"            fake_vol_driver \u003d mock_get_volume_driver.return_value"},{"line_number":64,"context_line":"            mock_ebs_in_block_devices.return_value \u003d False"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_74605901","line":61,"updated":"2014-11-25 12:00:41.000000000","message":"Looks good to me, so no changes are necessary, but maybe it looks better:\n\n   mock_get_vol_driver \u003d mock.MagicMock()\n   mock_ebs_in_block_devs \u003d mock.MagicMock(return_value\u003dFalse)\n\n   with mock.patch.multiple(self.volumeops, _get_volume_driver\u003dmock_get_vol_driver,  ebs_root_in_block_devices\u003dmock_ebs_in_block_devs):\n\n       fake_vol_driver \u003d mock_get_vol_driver.return_value","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            if is_mounted:"},{"line_number":292,"context_line":"                self.assertFalse("},{"line_number":293,"context_line":"                    mock_mount_smb_share.call_count)"},{"line_number":294,"context_line":"            else:"},{"line_number":295,"context_line":"                mock_mount_smb_share.assert_called_once_with("},{"line_number":296,"context_line":"                    self._FAKE_SHARE_NORMALIZED,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_377b337c","line":293,"updated":"2014-11-25 12:00:41.000000000","message":"self.assertFalse(mock_mount_smb_share.called)","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":"            if is_mounted:"},{"line_number":292,"context_line":"                self.assertFalse("},{"line_number":293,"context_line":"                    mock_mount_smb_share.call_count)"},{"line_number":294,"context_line":"            else:"},{"line_number":295,"context_line":"                mock_mount_smb_share.assert_called_once_with("},{"line_number":296,"context_line":"                    self._FAKE_SHARE_NORMALIZED,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_725ce97d","line":293,"in_reply_to":"5a890539_377b337c","updated":"2014-11-25 13:15:31.000000000","message":"Same result, but sure, will use it.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"}],"nova/virt/hyperv/basevolumeutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6b239fa4df11679e8b96456216d60125fef1036d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        LOG.debug(\"block_device_list %s\", block_device_list)"},{"line_number":94,"context_line":"        return block_device.strip_dev(mount_device) in block_device_list"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def group_block_devices_by_type(self, block_device_mapping):"},{"line_number":97,"context_line":"        block_devices \u003d collections.defaultdict(list)"},{"line_number":98,"context_line":"        for volume in block_device_mapping:"},{"line_number":99,"context_line":"            connection_info \u003d volume[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_bdd82f54","line":96,"updated":"2014-12-02 13:50:34.000000000","message":"I\u0027m not sure why is this here. It doesn\u0027t seem to do anything to hyper-v, it\u0027s just creating a map for block devices. This looks like a meethod for volumeops to me, since it is only used there.","commit_id":"54d485b38edacc84e51b8ce7a44ba8d3f748e247"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"0e0ce528eb20f4c07cf3926d911a1e2636ee9b40","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        LOG.debug(\"block_device_list %s\", block_device_list)"},{"line_number":94,"context_line":"        return block_device.strip_dev(mount_device) in block_device_list"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def group_block_devices_by_type(self, block_device_mapping):"},{"line_number":97,"context_line":"        block_devices \u003d collections.defaultdict(list)"},{"line_number":98,"context_line":"        for volume in block_device_mapping:"},{"line_number":99,"context_line":"            connection_info \u003d volume[\u0027connection_info\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_e0a76cba","line":96,"in_reply_to":"5a890539_bdd82f54","updated":"2014-12-02 14:14:31.000000000","message":"Well, the method above does not directly interact w/ hyper-v either, for which reason I thought about putting this here. Anyway, I can move it.","commit_id":"54d485b38edacc84e51b8ce7a44ba8d3f748e247"}],"nova/virt/hyperv/livemigrationops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6b239fa4df11679e8b96456216d60125fef1036d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                                                dest)"},{"line_number":71,"context_line":"            for target_iqn, target_luns_count in iscsi_targets.items():"},{"line_number":72,"context_line":"                self._volumeops.logout_storage_target(target_iqn,"},{"line_number":73,"context_line":"                                                      target_luns_count)"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":76,"context_line":"                LOG.debug(\"Calling live migration recover_method \""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_658aaf65","side":"PARENT","line":73,"updated":"2014-12-02 13:50:34.000000000","message":"this has moved to driver.py, which makes sense and it\u0027s easier this way.","commit_id":"1c06a0e945f9a0ecb294b68c65a49941bbd2d064"}],"nova/virt/hyperv/pathutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        mappings \u003d self.smb_conn.query(\"SELECT * FROM \""},{"line_number":186,"context_line":"                                       \"MSFT_SmbMapping \""},{"line_number":187,"context_line":"                                       \"WHERE RemotePath\u003d\u0027%s\u0027\" %"},{"line_number":188,"context_line":"                                       smbfs_share)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if len(mappings) \u003e 0:"},{"line_number":191,"context_line":"            if os.path.exists(smbfs_share):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_b7bc8307","line":188,"updated":"2014-11-25 12:00:41.000000000","message":"you should escape \u0027 characters.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        mappings \u003d self.smb_conn.query(\"SELECT * FROM \""},{"line_number":186,"context_line":"                                       \"MSFT_SmbMapping \""},{"line_number":187,"context_line":"                                       \"WHERE RemotePath\u003d\u0027%s\u0027\" %"},{"line_number":188,"context_line":"                                       smbfs_share)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if len(mappings) \u003e 0:"},{"line_number":191,"context_line":"            if os.path.exists(smbfs_share):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_f247f9a0","line":188,"in_reply_to":"5a890539_b7bc8307","updated":"2014-11-25 13:15:31.000000000","message":"Whops, I\u0027ll just use filters here.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if len(mappings) \u003e 0:"},{"line_number":191,"context_line":"            if os.path.exists(smbfs_share):"},{"line_number":192,"context_line":"                LOG.debug(\u0027Share already mounted: %s\u0027 % smbfs_share)"},{"line_number":193,"context_line":"                return True"},{"line_number":194,"context_line":"            else:"},{"line_number":195,"context_line":"                LOG.debug(\u0027Share exists but is unavailable: %s \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_173d578f","line":192,"updated":"2014-11-25 12:00:41.000000000","message":"LOG.debug(message, smbfs_share)","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        if len(mappings) \u003e 0:"},{"line_number":191,"context_line":"            if os.path.exists(smbfs_share):"},{"line_number":192,"context_line":"                LOG.debug(\u0027Share already mounted: %s\u0027 % smbfs_share)"},{"line_number":193,"context_line":"                return True"},{"line_number":194,"context_line":"            else:"},{"line_number":195,"context_line":"                LOG.debug(\u0027Share exists but is unavailable: %s \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_52d0cdc8","line":192,"in_reply_to":"5a890539_173d578f","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                return True"},{"line_number":194,"context_line":"            else:"},{"line_number":195,"context_line":"                LOG.debug(\u0027Share exists but is unavailable: %s \u0027"},{"line_number":196,"context_line":"                          % smbfs_share)"},{"line_number":197,"context_line":"                for mapping in mappings:"},{"line_number":198,"context_line":"                    # Due to a bug in the WMI module, getting the output of"},{"line_number":199,"context_line":"                    # methods returning None will raise an AttributeError"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_57435f12","line":196,"updated":"2014-11-25 12:00:41.000000000","message":"ditto","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":193,"context_line":"                return True"},{"line_number":194,"context_line":"            else:"},{"line_number":195,"context_line":"                LOG.debug(\u0027Share exists but is unavailable: %s \u0027"},{"line_number":196,"context_line":"                          % smbfs_share)"},{"line_number":197,"context_line":"                for mapping in mappings:"},{"line_number":198,"context_line":"                    # Due to a bug in the WMI module, getting the output of"},{"line_number":199,"context_line":"                    # methods returning None will raise an AttributeError"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_f2de19d9","line":196,"in_reply_to":"5a890539_57435f12","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def mount_smb_share(self, smbfs_share, username\u003dNone, password\u003dNone):"},{"line_number":207,"context_line":"        try:"},{"line_number":208,"context_line":"            LOG.debug(\u0027Mounting share: %s\u0027 % smbfs_share)"},{"line_number":209,"context_line":"            self.smb_conn.Msft_SmbMapping.Create(RemotePath\u003dsmbfs_share,"},{"line_number":210,"context_line":"                                                 UserName\u003dusername,"},{"line_number":211,"context_line":"                                                 Password\u003dpassword)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_f760cba6","line":208,"updated":"2014-11-25 12:00:41.000000000","message":"ditto","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def mount_smb_share(self, smbfs_share, username\u003dNone, password\u003dNone):"},{"line_number":207,"context_line":"        try:"},{"line_number":208,"context_line":"            LOG.debug(\u0027Mounting share: %s\u0027 % smbfs_share)"},{"line_number":209,"context_line":"            self.smb_conn.Msft_SmbMapping.Create(RemotePath\u003dsmbfs_share,"},{"line_number":210,"context_line":"                                                 UserName\u003dusername,"},{"line_number":211,"context_line":"                                                 Password\u003dpassword)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_12f1e56a","line":208,"in_reply_to":"5a890539_f760cba6","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6b239fa4df11679e8b96456216d60125fef1036d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def check_smb_mapping(self, smbfs_share):"},{"line_number":185,"context_line":"        mappings \u003d self._smb_conn.Msft_SmbMapping(RemotePath\u003dsmbfs_share)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if mappings:"},{"line_number":188,"context_line":"            if os.path.exists(smbfs_share):"},{"line_number":189,"context_line":"                LOG.debug(\u0027Share already mounted: %s\u0027, smbfs_share)"},{"line_number":190,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_5d9bcb72","line":187,"updated":"2014-12-02 13:50:34.000000000","message":"hmm, I think it might look better:\n\n    if not mappings:\n        return False\n\n    if os.path.exists(smbfs_share):\n         ...","commit_id":"54d485b38edacc84e51b8ce7a44ba8d3f748e247"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"0e0ce528eb20f4c07cf3926d911a1e2636ee9b40","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    def check_smb_mapping(self, smbfs_share):"},{"line_number":185,"context_line":"        mappings \u003d self._smb_conn.Msft_SmbMapping(RemotePath\u003dsmbfs_share)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if mappings:"},{"line_number":188,"context_line":"            if os.path.exists(smbfs_share):"},{"line_number":189,"context_line":"                LOG.debug(\u0027Share already mounted: %s\u0027, smbfs_share)"},{"line_number":190,"context_line":"                return True"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_030ba224","line":187,"in_reply_to":"5a890539_5d9bcb72","updated":"2014-12-02 14:14:31.000000000","message":"Done","commit_id":"54d485b38edacc84e51b8ce7a44ba8d3f748e247"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6c217e5067c0f1cbbda8b563616618291ae39905","unresolved":false,"context_lines":[{"line_number":48,"context_line":"class PathUtils(object):"},{"line_number":49,"context_line":"    def __init__(self):"},{"line_number":50,"context_line":"        if sys.platform \u003d\u003d \u0027win32\u0027:"},{"line_number":51,"context_line":"            self._smb_conn \u003d wmi.WMI(moniker\u003dr\"root\\Microsoft\\Windows\\SMB\")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def open(self, path, mode):"},{"line_number":54,"context_line":"        \"\"\"Wrapper on __builtin__.open used to simplify unit testing.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_564ed896","line":51,"updated":"2014-12-04 20:40:18.000000000","message":"I guess this is just to prevent someone who accidentally ran this from getting a nasty error?\n\nIf this is just to make the unit tests run on non-Windows OSes, wouldn\u0027t it be better to just mock out that module globally with a fake implementation? Surely something later is going to crash if self._smb_conn isn\u0027t set anyway...","commit_id":"a2feaafecd28addd84826adf0d8ecae9d0fa26ad"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"9a0d8a39117a43a3539a674ced90d4d1dd593b53","unresolved":false,"context_lines":[{"line_number":48,"context_line":"class PathUtils(object):"},{"line_number":49,"context_line":"    def __init__(self):"},{"line_number":50,"context_line":"        if sys.platform \u003d\u003d \u0027win32\u0027:"},{"line_number":51,"context_line":"            self._smb_conn \u003d wmi.WMI(moniker\u003dr\"root\\Microsoft\\Windows\\SMB\")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def open(self, path, mode):"},{"line_number":54,"context_line":"        \"\"\"Wrapper on __builtin__.open used to simplify unit testing.\"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_70b11700","line":51,"in_reply_to":"5a890539_564ed896","updated":"2014-12-04 21:55:07.000000000","message":"yeah, this is just for the unit tests and yes, we were planning to patch it with mock, removing all those \"if is win32\" allover the driver (there are everywhere) as soon as the driver refactoring BP merges completely.","commit_id":"a2feaafecd28addd84826adf0d8ecae9d0fa26ad"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6c217e5067c0f1cbbda8b563616618291ae39905","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        return console_log_path, console_log_path + \u0027.1\u0027"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def check_smb_mapping(self, smbfs_share):"},{"line_number":185,"context_line":"        mappings \u003d self._smb_conn.Msft_SmbMapping(RemotePath\u003dsmbfs_share)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if not mappings:"},{"line_number":188,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_f6542423","line":185,"updated":"2014-12-04 20:40:18.000000000","message":"...like this :)","commit_id":"a2feaafecd28addd84826adf0d8ecae9d0fa26ad"},{"author":{"_account_id":3185,"name":"Alessandro Pilotti","email":"apilotti@cloudbasesolutions.com","username":"alexpilotti"},"change_message_id":"9a0d8a39117a43a3539a674ced90d4d1dd593b53","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        return console_log_path, console_log_path + \u0027.1\u0027"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def check_smb_mapping(self, smbfs_share):"},{"line_number":185,"context_line":"        mappings \u003d self._smb_conn.Msft_SmbMapping(RemotePath\u003dsmbfs_share)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if not mappings:"},{"line_number":188,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_90b4c3f1","line":185,"in_reply_to":"5a890539_f6542423","updated":"2014-12-04 21:55:07.000000000","message":"see above","commit_id":"a2feaafecd28addd84826adf0d8ecae9d0fa26ad"}],"nova/virt/hyperv/vmops.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                (disk_files, volume_drives) \u003d storage"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"                self._vmutils.destroy_vm(instance_name)"},{"line_number":413,"context_line":"                self._volumeops.volume_drivers[\u0027iscsi\u0027].disconnect_volumes("},{"line_number":414,"context_line":"                    volume_drives)"},{"line_number":415,"context_line":"            else:"},{"line_number":416,"context_line":"                LOG.debug(\"Instance not found\", instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_d7658faf","line":413,"updated":"2014-11-25 12:00:41.000000000","message":"so, smb volumes do not need to be disconnected?","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                (disk_files, volume_drives) \u003d storage"},{"line_number":411,"context_line":""},{"line_number":412,"context_line":"                self._vmutils.destroy_vm(instance_name)"},{"line_number":413,"context_line":"                self._volumeops.volume_drivers[\u0027iscsi\u0027].disconnect_volumes("},{"line_number":414,"context_line":"                    volume_drives)"},{"line_number":415,"context_line":"            else:"},{"line_number":416,"context_line":"                LOG.debug(\"Instance not found\", instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_cd325cf1","line":413,"in_reply_to":"5a890539_d7658faf","updated":"2014-11-25 13:15:31.000000000","message":"You mean unmounting the SMB shares, right? Well, I think the share may be unmounted if there are no active connections.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"}],"nova/virt/hyperv/vmutils.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":645,"context_line":"                self._remove_virt_resource(parent, vm.path_())"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    def _get_mounted_disk_resource_from_path(self, disk_path,"},{"line_number":648,"context_line":"                                             is_physical\u003dTrue):"},{"line_number":649,"context_line":"        if is_physical:"},{"line_number":650,"context_line":"            class_name \u003d self._RESOURCE_ALLOC_SETTING_DATA_CLASS"},{"line_number":651,"context_line":"            res_sub_type \u003d self._PHYS_DISK_RES_SUB_TYPE"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_17bc77ba","line":648,"updated":"2014-11-25 12:00:41.000000000","message":"this is called in just one place. is_physical is already passed, so default value is not necessary.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":645,"context_line":"                self._remove_virt_resource(parent, vm.path_())"},{"line_number":646,"context_line":""},{"line_number":647,"context_line":"    def _get_mounted_disk_resource_from_path(self, disk_path,"},{"line_number":648,"context_line":"                                             is_physical\u003dTrue):"},{"line_number":649,"context_line":"        if is_physical:"},{"line_number":650,"context_line":"            class_name \u003d self._RESOURCE_ALLOC_SETTING_DATA_CLASS"},{"line_number":651,"context_line":"            res_sub_type \u003d self._PHYS_DISK_RES_SUB_TYPE"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_68b6b6fa","line":648,"in_reply_to":"5a890539_17bc77ba","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":694,"context_line":"        for slot in xrange(constants.SCSI_CONTROLLER_SLOTS_NUMBER):"},{"line_number":695,"context_line":"            if slot not in used_slots:"},{"line_number":696,"context_line":"                return slot"},{"line_number":697,"context_line":"        raise HyperVException(\"Exceeded the maximum number of slots\")"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def enable_vm_metrics_collection(self, vm_name):"},{"line_number":700,"context_line":"        raise NotImplementedError(_(\"Metrics collection is not supported on \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_37b3330b","line":697,"updated":"2014-11-25 12:00:41.000000000","message":"HyperVException(_(...))","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":694,"context_line":"        for slot in xrange(constants.SCSI_CONTROLLER_SLOTS_NUMBER):"},{"line_number":695,"context_line":"            if slot not in used_slots:"},{"line_number":696,"context_line":"                return slot"},{"line_number":697,"context_line":"        raise HyperVException(\"Exceeded the maximum number of slots\")"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    def enable_vm_metrics_collection(self, vm_name):"},{"line_number":700,"context_line":"        raise NotImplementedError(_(\"Metrics collection is not supported on \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_68add69a","line":697,"in_reply_to":"5a890539_37b3330b","updated":"2014-11-25 13:15:31.000000000","message":"This was simply moved from volumeops, but sure, I can add that.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"6b239fa4df11679e8b96456216d60125fef1036d","unresolved":false,"context_lines":[{"line_number":651,"context_line":"            snapshot_path)"},{"line_number":652,"context_line":"        self.check_ret_val(ret_val, job_path)"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"    def detach_vm_disk(self, vm_name, disk_path, is_physical\u003dTrue):"},{"line_number":655,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":656,"context_line":"        disk_resource \u003d self._get_mounted_disk_resource_from_path(disk_path,"},{"line_number":657,"context_line":"                                                                  is_physical)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_9d31b30d","line":654,"updated":"2014-12-02 13:50:34.000000000","message":"hmm, so, I have a suggestion.. since this is only used by volumeops and it\u0027s would be best to keep the logic of utils classes as low as possible.. how about this:\n\n    def detach_vm_physical_disk(...):\n        self._get_mounted_disk_resource_from_path(path, class_name, res_sub_type)\n        ...\n\n    def detach_vm_hard_disk(...):\n        ....\n\nSo, ISCSIDriver will call detach_vm_physical_disk and SMBDriver will call detach_vm_hard_disk.","commit_id":"54d485b38edacc84e51b8ce7a44ba8d3f748e247"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"0e0ce528eb20f4c07cf3926d911a1e2636ee9b40","unresolved":false,"context_lines":[{"line_number":651,"context_line":"            snapshot_path)"},{"line_number":652,"context_line":"        self.check_ret_val(ret_val, job_path)"},{"line_number":653,"context_line":""},{"line_number":654,"context_line":"    def detach_vm_disk(self, vm_name, disk_path, is_physical\u003dTrue):"},{"line_number":655,"context_line":"        vm \u003d self._lookup_vm_check(vm_name)"},{"line_number":656,"context_line":"        disk_resource \u003d self._get_mounted_disk_resource_from_path(disk_path,"},{"line_number":657,"context_line":"                                                                  is_physical)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a890539_2072547c","line":654,"in_reply_to":"5a890539_9d31b30d","updated":"2014-12-02 14:14:31.000000000","message":"This will lead to quite some duplicated code, which IMO is not desired.","commit_id":"54d485b38edacc84e51b8ce7a44ba8d3f748e247"}],"nova/virt/hyperv/volumeops.py":[{"author":{"_account_id":8412,"name":"Mike Durnosvistov","email":"glacierr.dev@gmail.com","username":"mdurnosvistov"},"change_message_id":"9eeca91c11240ee5a9681f87a13bd18829b43ce9","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        if not self._initiator:"},{"line_number":124,"context_line":"            self._initiator \u003d self._volutils.get_iscsi_initiator()"},{"line_number":125,"context_line":"            if not self._initiator:"},{"line_number":126,"context_line":"                LOG.warn(_(\u0027Could not determine iscsi initiator name\u0027),"},{"line_number":127,"context_line":"                         instance\u003dinstance)"},{"line_number":128,"context_line":"        return {"},{"line_number":129,"context_line":"            \u0027ip\u0027: CONF.my_ip,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_a3bf56fa","line":126,"range":{"start_line":126,"start_character":16,"end_line":126,"end_character":27},"updated":"2014-10-22 10:20:48.000000000","message":"Please use `LOG.warning(_LW(`","commit_id":"4308b884bd3ddce55bfd56651398406c29ac702d"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"8ebf0f1d29577dda48f8f1753198e69ead387162","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        if not self._initiator:"},{"line_number":124,"context_line":"            self._initiator \u003d self._volutils.get_iscsi_initiator()"},{"line_number":125,"context_line":"            if not self._initiator:"},{"line_number":126,"context_line":"                LOG.warn(_(\u0027Could not determine iscsi initiator name\u0027),"},{"line_number":127,"context_line":"                         instance\u003dinstance)"},{"line_number":128,"context_line":"        return {"},{"line_number":129,"context_line":"            \u0027ip\u0027: CONF.my_ip,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_05ad7d9c","line":126,"in_reply_to":"9aa7fdbe_a3bf56fa","updated":"2014-10-22 15:32:12.000000000","message":"Thanks for pointing this out! This method was simply moved, but I\u0027m addiing _LW right now.","commit_id":"4308b884bd3ddce55bfd56651398406c29ac702d"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                                       ctrller_path,"},{"line_number":352,"context_line":"                                       slot)"},{"line_number":353,"context_line":"        except vmutils.HyperVException as exn:"},{"line_number":354,"context_line":"            LOG.exception(_(\u0027Attach volume failed: %s\u0027), exn)"},{"line_number":355,"context_line":"            raise vmutils.HyperVException(_(\u0027Unable to attach volume \u0027"},{"line_number":356,"context_line":"                                            \u0027to instance %s\u0027) % instance_name)"},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_9774e7cf","line":354,"updated":"2014-11-25 12:00:41.000000000","message":"_LE","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":351,"context_line":"                                       ctrller_path,"},{"line_number":352,"context_line":"                                       slot)"},{"line_number":353,"context_line":"        except vmutils.HyperVException as exn:"},{"line_number":354,"context_line":"            LOG.exception(_(\u0027Attach volume failed: %s\u0027), exn)"},{"line_number":355,"context_line":"            raise vmutils.HyperVException(_(\u0027Unable to attach volume \u0027"},{"line_number":356,"context_line":"                                            \u0027to instance %s\u0027) % instance_name)"},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_c89dea67","line":354,"in_reply_to":"5a890539_9774e7cf","updated":"2014-11-25 13:15:31.000000000","message":"Done","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        except vmutils.HyperVException as exn:"},{"line_number":354,"context_line":"            LOG.exception(_(\u0027Attach volume failed: %s\u0027), exn)"},{"line_number":355,"context_line":"            raise vmutils.HyperVException(_(\u0027Unable to attach volume \u0027"},{"line_number":356,"context_line":"                                            \u0027to instance %s\u0027) % instance_name)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def detach_volume(self, connection_info, instance_name):"},{"line_number":359,"context_line":"        LOG.debug(\"Detaching volume: %(connection_info)s \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_3743336d","line":356,"updated":"2014-11-25 12:00:41.000000000","message":"HyperVException(_(message), instance_name)","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        except vmutils.HyperVException as exn:"},{"line_number":354,"context_line":"            LOG.exception(_(\u0027Attach volume failed: %s\u0027), exn)"},{"line_number":355,"context_line":"            raise vmutils.HyperVException(_(\u0027Unable to attach volume \u0027"},{"line_number":356,"context_line":"                                            \u0027to instance %s\u0027) % instance_name)"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"    def detach_volume(self, connection_info, instance_name):"},{"line_number":359,"context_line":"        LOG.debug(\"Detaching volume: %(connection_info)s \""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_887e8217","line":356,"in_reply_to":"5a890539_3743336d","updated":"2014-11-25 13:15:31.000000000","message":"It\u0027s the same thing in case of exceptions, but why not.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                                            password\u003dpassword)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _parse_credentials(self, opts_str):"},{"line_number":388,"context_line":"        username \u003d password \u003d None"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        match \u003d self._username_regex.findall(opts_str)"},{"line_number":391,"context_line":"        if match:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_d7282f99","line":388,"updated":"2014-11-25 12:00:41.000000000","message":"conventionally, you should have them on separate lines:\n\nusername \u003d None\n\npassword \u003d None","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                                            password\u003dpassword)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _parse_credentials(self, opts_str):"},{"line_number":388,"context_line":"        username \u003d password \u003d None"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        match \u003d self._username_regex.findall(opts_str)"},{"line_number":391,"context_line":"        if match:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_a8a09e90","line":388,"in_reply_to":"5a890539_d7282f99","updated":"2014-11-25 13:15:31.000000000","message":"Nit picking at it\u0027s best :).","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        match \u003d self._username_regex.findall(opts_str)"},{"line_number":391,"context_line":"        if match:"},{"line_number":392,"context_line":"            username \u003d match[0] if match[0] !\u003d \u0027guest\u0027 else None"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        match \u003d self._password_regex.findall(opts_str)"},{"line_number":395,"context_line":"        if match:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_b7048318","line":392,"updated":"2014-11-25 12:00:41.000000000","message":"constant? :)\n\nalso,\n\nusername \u003d match[0] if match and match[0] !\u003d self._GUEST else None\n\nthis would make the initial username \u003d None obsolete. :)","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8543,"name":"Lucian Petrut","email":"lpetrut@cloudbasesolutions.com","username":"plucian"},"change_message_id":"b8ac4e9facdb53fb15974e2187711f4c53210771","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"        match \u003d self._username_regex.findall(opts_str)"},{"line_number":391,"context_line":"        if match:"},{"line_number":392,"context_line":"            username \u003d match[0] if match[0] !\u003d \u0027guest\u0027 else None"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        match \u003d self._password_regex.findall(opts_str)"},{"line_number":395,"context_line":"        if match:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_e8ff0600","line":392,"in_reply_to":"5a890539_b7048318","updated":"2014-11-25 13:15:31.000000000","message":"I don\u0027t actually think defining a constant is needed in this case. Anyway, the second thing is actually a good idea.","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8b6db538329ee8359f649cec4be166980b2178c8","unresolved":false,"context_lines":[{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        match \u003d self._password_regex.findall(opts_str)"},{"line_number":395,"context_line":"        if match:"},{"line_number":396,"context_line":"            password \u003d match[0]"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"        return username, password"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_92b15549","line":396,"updated":"2014-11-25 12:00:41.000000000","message":"password \u003d match[0] if match else None\n\nthis would make the initial password \u003d None obsolete. :)","commit_id":"9b9a475c850b0a048a883af7b4dad1f2cf7f7d7f"}]}
