)]}'
{"cinder/tests/unit/test_hpelefthand.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"b8827a00f30b81e741a557b34a9385fd316fe53b","unresolved":false,"context_lines":[{"line_number":1939,"context_line":"            \u0027name\u0027: \u0027replicated\u0027,"},{"line_number":1940,"context_line":"            \u0027extra_specs\u0027: {"},{"line_number":1941,"context_line":"                \u0027replication_enabled\u0027: \u0027\u003cis\u003e True\u0027}}"},{"line_number":1942,"context_line":""},{"line_number":1943,"context_line":"        with mock.patch.object("},{"line_number":1944,"context_line":"                hpe_lefthand_iscsi.HPELeftHandISCSIDriver,"},{"line_number":1945,"context_line":"                \u0027_create_client\u0027) as mock_do_setup, \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa69d971_663d83dc","line":1942,"updated":"2016-01-10 15:06:25.000000000","message":"Does this patching need to be done with a context manager, or can it be done using the mock.patch method decorator (would just be more readable).","commit_id":"c4cf3c1a16ee0f37fac805910089e8a063a7cc57"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9fd2e199d946fea85527979952331e34776bf9a1","unresolved":false,"context_lines":[{"line_number":1935,"context_line":""},{"line_number":1936,"context_line":"    @mock.patch(\u0027hpelefthandclient.version\u0027, \"2.0.1\")"},{"line_number":1937,"context_line":"    @mock.patch.object(volume_types, \u0027get_volume_type\u0027)"},{"line_number":1938,"context_line":"    def test_create_volume_replicated_unmanaged(self, _mock_get_volume_type):"},{"line_number":1939,"context_line":"        # set up driver with default config"},{"line_number":1940,"context_line":"        conf \u003d self.default_mock_conf()"},{"line_number":1941,"context_line":"        conf.replication_device \u003d self.repl_targets_unmgd"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_315e4b77","line":1938,"updated":"2016-02-02 21:18:39.000000000","message":"This test looks identical to test_create_volume_replicated_managed except for one line when replication_device was defined.  Can you use ddt to combine these two test cases?  There are examples under tests/unit.  It will remove lots of redundant code.","commit_id":"aba098e575ba9da2715980f2f197aa67752684cb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9fd2e199d946fea85527979952331e34776bf9a1","unresolved":false,"context_lines":[{"line_number":2036,"context_line":"                                                     _mock_get_volume_type):"},{"line_number":2037,"context_line":"        # set up driver with default config"},{"line_number":2038,"context_line":"        conf \u003d self.default_mock_conf()"},{"line_number":2039,"context_line":"        conf.replication_device \u003d self.repl_targets"},{"line_number":2040,"context_line":"        mock_client \u003d self.setup_driver(config\u003dconf)"},{"line_number":2041,"context_line":"        mock_client.doesRemoteSnapshotScheduleExist.return_value \u003d False"},{"line_number":2042,"context_line":"        mock_replicated_client \u003d self.setup_driver(config\u003dconf)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_519427e7","line":2039,"updated":"2016-02-02 21:18:39.000000000","message":"Using ddt, you can easily make this test work for self.repl_targets_unmgd.","commit_id":"aba098e575ba9da2715980f2f197aa67752684cb"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9fd2e199d946fea85527979952331e34776bf9a1","unresolved":false,"context_lines":[{"line_number":2127,"context_line":"    def test_replication_disable(self, _mock_get_volume_type):"},{"line_number":2128,"context_line":"        # set up driver with default config"},{"line_number":2129,"context_line":"        conf \u003d self.default_mock_conf()"},{"line_number":2130,"context_line":"        conf.replication_device \u003d self.repl_targets"},{"line_number":2131,"context_line":"        mock_client \u003d self.setup_driver(config\u003dconf)"},{"line_number":2132,"context_line":"        mock_replicated_client \u003d self.setup_driver(config\u003dconf)"},{"line_number":2133,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_f18513ad","line":2130,"updated":"2016-02-02 21:18:39.000000000","message":"Same here.","commit_id":"aba098e575ba9da2715980f2f197aa67752684cb"}],"cinder/volume/drivers/hpe/hpe_lefthand_iscsi.py":[{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"b8827a00f30b81e741a557b34a9385fd316fe53b","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _login(self, volume\u003dNone, timeout\u003dNone):"},{"line_number":185,"context_line":"        conf \u003d self._get_lefthand_config(volume)"},{"line_number":186,"context_line":"        if conf:"},{"line_number":187,"context_line":"            self._client_conf[\u0027hpelefthand_username\u0027] \u003d ("},{"line_number":188,"context_line":"                conf[\u0027hpelefthand_username\u0027])"},{"line_number":189,"context_line":"            self._client_conf[\u0027hpelefthand_password\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":11,"id":"fa69d971_a8002902","line":186,"updated":"2016-01-10 15:06:25.000000000","message":"Optionally could reduce the lines of similar code by doing something like\n\nconf_keys \u003d [\u0027kpelefthand_username\u0027,....]\nfor key in conf_keys:\n   if conf:\n      conf_val \u003d conf[key]\n   else:\n      conf_val \u003d client_conf[key]\n\n    self._client_conf[key] \u003d conf_val","commit_id":"c4cf3c1a16ee0f37fac805910089e8a063a7cc57"},{"author":{"_account_id":8912,"name":"Ryan McNair","email":"rdmcnair@us.ibm.com","username":"rdmcnair"},"change_message_id":"b8827a00f30b81e741a557b34a9385fd316fe53b","unresolved":false,"context_lines":[{"line_number":1509,"context_line":"            rep_data \u003d volume.get(\u0027replication_driver_data\u0027)"},{"line_number":1510,"context_line":"            if rep_data:"},{"line_number":1511,"context_line":"                rep_data \u003d json.loads(rep_data)"},{"line_number":1512,"context_line":"                rep_location \u003d rep_data.get(\u0027location\u0027)"},{"line_number":1513,"context_line":"            if rep_location:"},{"line_number":1514,"context_line":"                for target in self._replication_targets:"},{"line_number":1515,"context_line":"                    if target[\u0027hpelefthand_api_url\u0027] \u003d\u003d rep_location:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa69d971_681d5161","line":1512,"updated":"2016-01-10 15:06:25.000000000","message":"Could indent this if check one more since rep_location is always None if rep_data isn\u0027t truthee.","commit_id":"c4cf3c1a16ee0f37fac805910089e8a063a7cc57"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bfa1df743f736dddcd5b63b4fc4577af17a445c0","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def check_replication_flags(self, options, required_flags):"},{"line_number":352,"context_line":"        for flag in required_flags:"},{"line_number":353,"context_line":"            if not options.get(flag, None):"},{"line_number":354,"context_line":"                msg \u003d _(\u0027%s is not set and is required for the replicaiton \u0027"},{"line_number":355,"context_line":"                        \u0027device to be valid.\u0027) % flag"},{"line_number":356,"context_line":"                LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_0576923e","line":353,"range":{"start_line":353,"start_character":37,"end_line":353,"end_character":41},"updated":"2016-02-02 23:26:08.000000000","message":"None is redundant here as that\u0027s the default anyway.","commit_id":"aba098e575ba9da2715980f2f197aa67752684cb"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"bfa1df743f736dddcd5b63b4fc4577af17a445c0","unresolved":false,"context_lines":[{"line_number":351,"context_line":"    def check_replication_flags(self, options, required_flags):"},{"line_number":352,"context_line":"        for flag in required_flags:"},{"line_number":353,"context_line":"            if not options.get(flag, None):"},{"line_number":354,"context_line":"                msg \u003d _(\u0027%s is not set and is required for the replicaiton \u0027"},{"line_number":355,"context_line":"                        \u0027device to be valid.\u0027) % flag"},{"line_number":356,"context_line":"                LOG.error(msg)"},{"line_number":357,"context_line":"                raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a5ae5dd_e5ba56c0","line":354,"range":{"start_line":354,"start_character":63,"end_line":354,"end_character":74},"updated":"2016-02-02 23:26:08.000000000","message":"/replicaiton/replication/","commit_id":"aba098e575ba9da2715980f2f197aa67752684cb"}]}
