)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"981e534334b27b6c2235373fd764f6cb2519a725","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Expose driver_block_device fields consistently"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently only _proxy_as_attr fields are available as attributes, and"},{"line_number":10,"context_line":"they are not available as dict values. Other values are available as"},{"line_number":11,"context_line":"both. This is inconsistent. This change ensures all fields are exposed"},{"line_number":12,"context_line":"as both dict values and attributes, so the caller doesn\u0027t have to"},{"line_number":13,"context_line":"remember which type of attribute they\u0027re accessing."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Part of bp local-disk-serial-numbers"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"5f7c97a3_be41eb0d","line":13,"range":{"start_line":9,"start_character":0,"end_line":13,"end_character":51},"updated":"2018-05-09 17:56:52.000000000","message":"This has always been a thorn in my side, see:\n\nhttps://review.openstack.org/#/c/541420/5/nova/virt/block_device.py@731\n\n_update_on_save is also confusing:\n\nhttps://review.openstack.org/#/c/541420/5/nova/virt/block_device.py@255","commit_id":"b958bf1126aea8b88ccebb43a330fc1a44717145"}],"nova/tests/unit/virt/test_block_device.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a01d1f5ef49471bd4f95db5a183e32018db499a2","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            self.assertEqual(getattr(test_bdm, field), value)"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"            test_value \u003d mock.sentinel.value"},{"line_number":277,"context_line":"            if field in test_bdm._proxy_as_attr:"},{"line_number":278,"context_line":"                # We can\u0027t set a versioned object field to a sentinel because"},{"line_number":279,"context_line":"                # it\u0027s an invalid type. It\u0027s not worth creating valid example"},{"line_number":280,"context_line":"                # values for all possible field types just for this, so we just"},{"line_number":281,"context_line":"                # test setting it to its current value. This at least"},{"line_number":282,"context_line":"                # exercises the code path without being a maintenance burden."},{"line_number":283,"context_line":"                test_value \u003d value"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"            # Test that we can set values via either attribute or dict"},{"line_number":286,"context_line":"            test_bdm[field] \u003d test_value"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_5eef77af","line":283,"range":{"start_line":277,"start_character":12,"end_line":283,"end_character":34},"updated":"2018-05-09 18:09:13.000000000","message":"This isn\u0027t necessary as far as I can tell. I pulled this change down, commented this all out, and nothing failed.","commit_id":"b958bf1126aea8b88ccebb43a330fc1a44717145"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"981e534334b27b6c2235373fd764f6cb2519a725","unresolved":false,"context_lines":[{"line_number":286,"context_line":"            test_bdm[field] \u003d test_value"},{"line_number":287,"context_line":"            self.assertEqual(getattr(test_bdm, field), test_value)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"            setattr(test_bdm, field, value)"},{"line_number":290,"context_line":"            self.assertEqual(test_bdm[field], value)"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"            # Reset the value"},{"line_number":293,"context_line":"            test_bdm[field] \u003d value"}],"source_content_type":"text/x-python","patch_set":14,"id":"5f7c97a3_7ef913c6","line":290,"range":{"start_line":289,"start_character":12,"end_line":290,"end_character":52},"updated":"2018-05-09 17:56:52.000000000","message":"Shouldn\u0027t you reset the value between this and the assertion above?","commit_id":"b958bf1126aea8b88ccebb43a330fc1a44717145"}],"nova/virt/block_device.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fcbbde9332a2eddb26ac948fff79c7521e7b8ef","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            return getattr(self._bdm_obj, name)"},{"line_number":147,"context_line":"        elif name in self._fields:"},{"line_number":148,"context_line":"            return self[name]"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            return super(DriverBlockDevice, self).__getattr__(name)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def __setattr__(self, name, value):"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f93b717_6900b568","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":12},"updated":"2018-01-26 14:37:16.000000000","message":"nit: Don\u0027t need the else here, really","commit_id":"84603b234343947afaca53dbe299cad5d98fd7ce"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6fcbbde9332a2eddb26ac948fff79c7521e7b8ef","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        elif name in self._fields:"},{"line_number":148,"context_line":"            return self[name]"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            return super(DriverBlockDevice, self).__getattr__(name)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def __setattr__(self, name, value):"},{"line_number":153,"context_line":"        if name in self._proxy_as_attr:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5f93b717_a906bd85","line":150,"range":{"start_line":150,"start_character":12,"end_line":150,"end_character":19},"updated":"2018-01-26 14:37:16.000000000","message":"I\u0027m guessing this was a latent bug. If so, do we actually need this fallthrough?","commit_id":"84603b234343947afaca53dbe299cad5d98fd7ce"}]}
