)]}'
{"nova/compute/resource_tracker.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"58320d6bb4d8580836caf32a6be570f97bb5ae56","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        # just force it to empty string"},{"line_number":484,"context_line":"        if (\"cpu_info\" not in resources or"},{"line_number":485,"context_line":"            resources[\u0027cpu_info\u0027] is None):"},{"line_number":486,"context_line":"            resources[\u0027cpu_info\u0027] \u003d \u0027\u0027"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        self._verify_resources(resources)"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_3eac0b8b","line":486,"updated":"2016-02-08 18:48:28.000000000","message":"While I prefer single quotes too this sort of clouds the diff? A merge artifact?","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"b96c9fb392e5f3c942df6b764e01bb5f338256cf","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        # just force it to empty string"},{"line_number":484,"context_line":"        if (\"cpu_info\" not in resources or"},{"line_number":485,"context_line":"            resources[\u0027cpu_info\u0027] is None):"},{"line_number":486,"context_line":"            resources[\u0027cpu_info\u0027] \u003d \u0027\u0027"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        self._verify_resources(resources)"},{"line_number":489,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_c87b8628","line":486,"in_reply_to":"5a5ae5dd_3eac0b8b","updated":"2016-02-09 16:40:23.000000000","message":"It was part of the \"mass change everything that looks like a compute node\", and then I changed it back to a dict, but did single quotes instead of the original double quotes. Done.","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"}],"nova/scheduler/ironic_host_manager.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"58320d6bb4d8580836caf32a6be570f97bb5ae56","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":81,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":82,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":83,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":84,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":85,"context_line":"            return IronicNodeState(host, node)"},{"line_number":86,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_7ea603af","line":83,"updated":"2016-02-08 18:48:28.000000000","message":"Would getattr work here? ht \u003d getattr(compute, \u0027hypervisor_type\u0027, None)\n\nThere\u0027s a similar example in one of the other files.","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"b96c9fb392e5f3c942df6b764e01bb5f338256cf","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":81,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":82,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":83,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":84,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":85,"context_line":"            return IronicNodeState(host, node)"},{"line_number":86,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_ebabdcd4","line":83,"in_reply_to":"5a5ae5dd_7ea603af","updated":"2016-02-09 16:40:23.000000000","message":"So the unfortunate thing I\u0027ve noticed about having to do this a bunch of times... if the attribute isn\u0027t set on the object, it will raise NotImplementedError when trying to access it. Because getattr() needs AttributeError in order to return the default, your pattern doesn\u0027t work.\n\nThis mistake is what cause me to have to fix my Aggregates change: https://review.openstack.org/#/c/268712/","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3ec7d5be2cba64762cedfad08e0ac03ab1fa67bc","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":81,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":82,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":83,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":84,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":85,"context_line":"            return IronicNodeState(host, node)"},{"line_number":86,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_0b174fee","line":83,"in_reply_to":"5a5ae5dd_ebabdcd4","updated":"2016-02-09 16:52:18.000000000","message":"If you have an object that can\u0027t lazy-load things and you want to take the default for something in getattr() instead of trying to lazy load the thing, then you should make your obj_load_attr() exhibit that behavior.\n\nIf you haven\u0027t implemented lazy-loading, and you try to lazy load a thing, then .... NotImplementedError is the right behavior IMHO :)","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d1f46e318e251f40ce8a7493460434d8193022df","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":83,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":84,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":85,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":86,"context_line":"            return IronicNodeState(host, node)"},{"line_number":87,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_9807e31b","line":84,"range":{"start_line":84,"start_character":61,"end_line":84,"end_character":68},"updated":"2016-03-30 00:33:52.000000000","message":"You\u0027ve changed the order in which this is processed and if compute is None, kablammo!","commit_id":"74c699b0a1d3ffe8696320c88661f9c4005db743"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"d9d5618b791c29c05b465da07aa068b6471234ec","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":83,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":84,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":85,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":86,"context_line":"            return IronicNodeState(host, node)"},{"line_number":87,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_8bcbe8a4","line":84,"range":{"start_line":84,"start_character":61,"end_line":84,"end_character":68},"in_reply_to":"ba0121b8_75459115","updated":"2016-03-30 13:59:22.000000000","message":"The if is processed first here so \u0027compute.hypervisor_type\u0027 is not run if \u0027hypervisor_type\u0027 is not in compute. So this is correct as is.","commit_id":"74c699b0a1d3ffe8696320c88661f9c4005db743"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"0642ef2d01d3ab0da5b4f1d0fdf763f78043d28a","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":83,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":84,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":85,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":86,"context_line":"            return IronicNodeState(host, node)"},{"line_number":87,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_8eaf6f29","line":84,"range":{"start_line":84,"start_character":61,"end_line":84,"end_character":68},"in_reply_to":"ba0121b8_8bcbe8a4","updated":"2016-03-30 15:38:22.000000000","message":"But if compute is None, the in check blows up. My unit test that I wrote for this does actually blow up if I don\u0027t pass in compute","commit_id":"74c699b0a1d3ffe8696320c88661f9c4005db743"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3f932ea6f6708ed9a779f1f8270942dff95ce74b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":83,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":84,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":85,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":86,"context_line":"            return IronicNodeState(host, node)"},{"line_number":87,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_602db894","line":84,"range":{"start_line":84,"start_character":61,"end_line":84,"end_character":68},"in_reply_to":"ba0121b8_8eaf6f29","updated":"2016-03-30 20:53:45.000000000","message":"Oh. I was focusing on the order changing and missed that there\u0027s no \u0027if compute\u0027 type check.\n\n\"compute.hypervisor_type (if compute and \u0027hypervisor_type\u0027 in compute) else None\" should work. But your update is possibly more readable than that.","commit_id":"74c699b0a1d3ffe8696320c88661f9c4005db743"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"910d8c02446b5e4358bafa3dbd36f59745e345f3","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def host_state_cls(self, host, node, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Factory function/property to create a new HostState.\"\"\""},{"line_number":83,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":84,"context_line":"        ht \u003d compute.hypervisor_type if \u0027hypervisor_type\u0027 in compute else None"},{"line_number":85,"context_line":"        if compute and ht \u003d\u003d hv_type.IRONIC:"},{"line_number":86,"context_line":"            return IronicNodeState(host, node)"},{"line_number":87,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba0121b8_75459115","line":84,"range":{"start_line":84,"start_character":61,"end_line":84,"end_character":68},"in_reply_to":"ba0121b8_9807e31b","updated":"2016-03-30 13:46:39.000000000","message":"Good catch. I changed this into a lambda to defer the retrieval until after the compute node is checked for null. Let me know if that harms the readability. I also added a unit test to check for that scenario.","commit_id":"74c699b0a1d3ffe8696320c88661f9c4005db743"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9dbafa0f7c0604f64ce5c24fbe30fd3c00ea5583","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":84,"context_line":"        get_ht \u003d lambda c: (c.hypervisor_type if \u0027hypervisor_type\u0027 in c"},{"line_number":85,"context_line":"                            else None)"},{"line_number":86,"context_line":"        if compute and get_ht(compute) \u003d\u003d hv_type.IRONIC:"},{"line_number":87,"context_line":"            return IronicNodeState(host, node)"},{"line_number":88,"context_line":"        else:"},{"line_number":89,"context_line":"            return host_manager.HostState(host, node)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_8bb128e4","line":86,"updated":"2016-03-30 14:03:43.000000000","message":"What you had here in the previous patch was fine, but this works too.","commit_id":"8806ac9e4163af2265ba69fc24a0584de0e836df"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5248ddb631060f4e61503233ee6fa6e17f89fab2","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        compute \u003d kwargs.get(\u0027compute\u0027)"},{"line_number":84,"context_line":"        get_ht \u003d lambda c: (c.hypervisor_type if \u0027hypervisor_type\u0027 in c"},{"line_number":85,"context_line":"                            else None)"},{"line_number":86,"context_line":"        if compute and get_ht(compute) \u003d\u003d hv_type.IRONIC:"},{"line_number":87,"context_line":"            return IronicNodeState(host, node)"},{"line_number":88,"context_line":"        else:"},{"line_number":89,"context_line":"            return host_manager.HostState(host, node)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba0121b8_c9874cb3","line":86,"in_reply_to":"ba0121b8_8bb128e4","updated":"2016-04-01 02:11:12.000000000","message":"It wasn\u0027t, if \u0027hypervisor_type\u0027 in None blows up, but I think we\u0027ve established that.\n\nI\u0027m not a fan of lambda functions, but this isn\u0027t bad.","commit_id":"8806ac9e4163af2265ba69fc24a0584de0e836df"}],"nova/tests/unit/cells/test_cells_messaging.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7ccb0fd1edd974b69b0a710a70da06ff9a4f81f9","unresolved":false,"context_lines":[{"line_number":859,"context_line":"                \u0027fake_host\u0027, binary, params_to_update)"},{"line_number":860,"context_line":"        result \u003d response.value_or_raise()"},{"line_number":861,"context_line":"        self.assertIsInstance(result, objects.Service)"},{"line_number":862,"context_line":"        # NOTE(sbauza): As NovaObjects can\u0027t be comparated directly, we need to"},{"line_number":863,"context_line":"        # check the fields by primitiving them first"},{"line_number":864,"context_line":"        self.assertTrue(objects_base.obj_equal_prims(fake_service, result))"},{"line_number":865,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_1ed57242","line":862,"updated":"2016-01-18 21:22:56.000000000","message":"This comment should be removed.","commit_id":"be69beb51751c0c5f9d965f44b1c54b8e03ff5a0"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"80d1b1ad1ba6968924a0a42b5d889575039a0724","unresolved":false,"context_lines":[{"line_number":859,"context_line":"                \u0027fake_host\u0027, binary, params_to_update)"},{"line_number":860,"context_line":"        result \u003d response.value_or_raise()"},{"line_number":861,"context_line":"        self.assertIsInstance(result, objects.Service)"},{"line_number":862,"context_line":"        # NOTE(sbauza): As NovaObjects can\u0027t be comparated directly, we need to"},{"line_number":863,"context_line":"        # check the fields by primitiving them first"},{"line_number":864,"context_line":"        self.assertTrue(objects_base.obj_equal_prims(fake_service, result))"},{"line_number":865,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_5d83c6cc","line":862,"in_reply_to":"ba63e191_1ed57242","updated":"2016-02-01 15:19:35.000000000","message":"Since obj_equal_prims() does compare the primitiving, I figured the comment still applied, but yeah, I\u0027m cool with deleting it because using base.obj_equal_prims() is much more understandable than using jsonutils.to_primitive on the object. Done","commit_id":"be69beb51751c0c5f9d965f44b1c54b8e03ff5a0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"58320d6bb4d8580836caf32a6be570f97bb5ae56","unresolved":false,"context_lines":[{"line_number":859,"context_line":"                \u0027fake_host\u0027, binary, params_to_update)"},{"line_number":860,"context_line":"        result \u003d response.value_or_raise()"},{"line_number":861,"context_line":"        self.assertIsInstance(result, objects.Service)"},{"line_number":862,"context_line":"        self.assertTrue(objects_base.obj_equal_prims(fake_service, result))"},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"    def test_service_delete(self):"},{"line_number":865,"context_line":"        fake_service \u003d dict(id\u003d42, host\u003d\u0027fake_host\u0027, binary\u003d\u0027nova-compute\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_9ea17f96","line":862,"updated":"2016-02-08 18:48:28.000000000","message":"Yes, but unrelated to this specific commit?","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"b96c9fb392e5f3c942df6b764e01bb5f338256cf","unresolved":false,"context_lines":[{"line_number":859,"context_line":"                \u0027fake_host\u0027, binary, params_to_update)"},{"line_number":860,"context_line":"        result \u003d response.value_or_raise()"},{"line_number":861,"context_line":"        self.assertIsInstance(result, objects.Service)"},{"line_number":862,"context_line":"        self.assertTrue(objects_base.obj_equal_prims(fake_service, result))"},{"line_number":863,"context_line":""},{"line_number":864,"context_line":"    def test_service_delete(self):"},{"line_number":865,"context_line":"        fake_service \u003d dict(id\u003d42, host\u003d\u0027fake_host\u0027, binary\u003d\u0027nova-compute\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_28025a70","line":862,"in_reply_to":"5a5ae5dd_9ea17f96","updated":"2016-02-09 16:40:23.000000000","message":"It actually is related. Originally, the fake_service and result objects had ComputeNode-like dicts inside of them, so jsonutils.to_primitive() worked. Now that they\u0027re changed to ComputeNode objects, they were not getting serialized properly, and were failing the test.","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7ccb0fd1edd974b69b0a710a70da06ff9a4f81f9","unresolved":false,"context_lines":[{"line_number":630,"context_line":"            \u0027vcpu\u0027: vcpus,"},{"line_number":631,"context_line":"            \u0027numa_topology\u0027: numa_topology,"},{"line_number":632,"context_line":"        }"},{"line_number":633,"context_line":"        return vals"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"    def assertEqualNUMAHostTopology(self, expected, got):"},{"line_number":636,"context_line":"        attrs \u003d (\u0027cpuset\u0027, \u0027memory\u0027, \u0027id\u0027, \u0027cpu_usage\u0027, \u0027memory_usage\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_1e3c9292","line":633,"updated":"2016-01-18 21:22:56.000000000","message":"Was there a reason for this?","commit_id":"be69beb51751c0c5f9d965f44b1c54b8e03ff5a0"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"80d1b1ad1ba6968924a0a42b5d889575039a0724","unresolved":false,"context_lines":[{"line_number":630,"context_line":"            \u0027vcpu\u0027: vcpus,"},{"line_number":631,"context_line":"            \u0027numa_topology\u0027: numa_topology,"},{"line_number":632,"context_line":"        }"},{"line_number":633,"context_line":"        return vals"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"    def assertEqualNUMAHostTopology(self, expected, got):"},{"line_number":636,"context_line":"        attrs \u003d (\u0027cpuset\u0027, \u0027memory\u0027, \u0027id\u0027, \u0027cpu_usage\u0027, \u0027memory_usage\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_00a8851e","line":633,"in_reply_to":"ba63e191_1e3c9292","updated":"2016-02-01 15:19:35.000000000","message":"So at one time I was thinking this was a compute node, so I returned objects.ComputeNode(**vals), but it\u0027s a limit, so while it\u0027s similar to a compute node, it isn\u0027t.","commit_id":"be69beb51751c0c5f9d965f44b1c54b8e03ff5a0"}],"nova/tests/unit/scheduler/test_host_manager.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"58320d6bb4d8580836caf32a6be570f97bb5ae56","unresolved":false,"context_lines":[{"line_number":760,"context_line":"                                                  mock_get_all,"},{"line_number":761,"context_line":"                                                  mock_get_by_binary):"},{"line_number":762,"context_line":"        getter \u003d (lambda n: n.hypervisor_hostname"},{"line_number":763,"context_line":"                  if \u0027hypervisor_hostname\u0027 in n else None)"},{"line_number":764,"context_line":"        running_nodes \u003d [n for n in fakes.COMPUTE_NODES"},{"line_number":765,"context_line":"                         if getter(n) !\u003d \u0027node4\u0027]"},{"line_number":766,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_be979b38","line":763,"updated":"2016-02-08 18:48:28.000000000","message":"another change for getattr with a default?","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"}],"nova/tests/unit/virt/test_virt_drivers.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"7ccb0fd1edd974b69b0a710a70da06ff9a4f81f9","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            supported_instances \u003d jsonutils.loads(supported_instances)"},{"line_number":835,"context_line":"        except TypeError:"},{"line_number":836,"context_line":"            pass"},{"line_number":837,"context_line":"        self.assertTrue(any(hypervisor_type in x for x in supported_instances))"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"class LibvirtConnTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_beaf867c","side":"PARENT","line":837,"updated":"2016-01-18 21:22:56.000000000","message":"Any reason for this removal?  This is changing the check so that it will always be True if supported_instances is not an empty list.","commit_id":"e11f788ca76807cb1c723e1f1d3bb574ca12db87"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"80d1b1ad1ba6968924a0a42b5d889575039a0724","unresolved":false,"context_lines":[{"line_number":834,"context_line":"            supported_instances \u003d jsonutils.loads(supported_instances)"},{"line_number":835,"context_line":"        except TypeError:"},{"line_number":836,"context_line":"            pass"},{"line_number":837,"context_line":"        self.assertTrue(any(hypervisor_type in x for x in supported_instances))"},{"line_number":838,"context_line":""},{"line_number":839,"context_line":""},{"line_number":840,"context_line":"class LibvirtConnTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_81aea583","side":"PARENT","line":837,"in_reply_to":"ba63e191_beaf867c","updated":"2016-02-01 15:19:35.000000000","message":"Maybe at one time, but not anymore I guess.","commit_id":"e11f788ca76807cb1c723e1f1d3bb574ca12db87"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"58320d6bb4d8580836caf32a6be570f97bb5ae56","unresolved":false,"context_lines":[{"line_number":838,"context_line":"        except TypeError:"},{"line_number":839,"context_line":"            pass"},{"line_number":840,"context_line":"        self.assertTrue(any(hypervisor_type in x"},{"line_number":841,"context_line":"                            for x in supported_instances))"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"class LibvirtConnTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_de9a9761","line":841,"updated":"2016-02-08 18:48:28.000000000","message":"prettier, but not related?","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"b96c9fb392e5f3c942df6b764e01bb5f338256cf","unresolved":false,"context_lines":[{"line_number":838,"context_line":"        except TypeError:"},{"line_number":839,"context_line":"            pass"},{"line_number":840,"context_line":"        self.assertTrue(any(hypervisor_type in x"},{"line_number":841,"context_line":"                            for x in supported_instances))"},{"line_number":842,"context_line":""},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"class LibvirtConnTestCase(_VirtDriverTestCase, test.TestCase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a5ae5dd_8876ee04","line":841,"in_reply_to":"5a5ae5dd_de9a9761","updated":"2016-02-09 16:40:23.000000000","message":"Yep, another artifact of changing things that I think are compute nodes.","commit_id":"1d54720cb23c39d3edc9f156c9414121d154e744"}]}
