)]}'
{"nova/tests/unit/api/openstack/compute/test_hosts.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"1335dc9d69060961d2ac6d8bdabe9ab24f70ca77","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":143,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":144,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":145,"context_line":"        set_host_enabled_patcher \u003d mock.patch.object("},{"line_number":146,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":147,"context_line":"            side_effect\u003dstub_set_host_enabled)"},{"line_number":148,"context_line":"        self.addCleanup(set_host_enabled_patcher.stop)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_4cbb91e4","line":145,"updated":"2018-04-06 16:08:57.000000000","message":"This is fine.\n\nBut FYI, if you\n\n import fixtures\n\nthere\u0027s a convenience wrapper that reduces 3LOC down to one for each patch:\n\n fixtures.MockPatchObject(self.hosts_api, \u0027set_host_enabled\u0027, side_effect\u003dstub_set_host_enabled)\n\netc.","commit_id":"4443235cd556248fc18e3af6e60cf5aa8cedd262"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"5bcee87cb257d691bcf1153c4cf70078c7e45523","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":143,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":144,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":145,"context_line":"        set_host_enabled_patcher \u003d mock.patch.object("},{"line_number":146,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":147,"context_line":"            side_effect\u003dstub_set_host_enabled)"},{"line_number":148,"context_line":"        self.addCleanup(set_host_enabled_patcher.stop)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_55645ee5","line":145,"in_reply_to":"bf659307_4cbb91e4","updated":"2018-04-09 02:55:31.000000000","message":"Done","commit_id":"4443235cd556248fc18e3af6e60cf5aa8cedd262"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7517fca44e4d1cbc811437d3743329d686c389e9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":144,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":145,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":146,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":147,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":148,"context_line":"            side_effect\u003dstub_set_host_enabled))"},{"line_number":149,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_05cc5cba","line":146,"updated":"2018-04-09 23:51:28.000000000","message":"Why not use self.stub_out for these like the ones above? Because it\u0027s on an object rather than the class?","commit_id":"51f57886318ab0941f4ffcd2dbe497bd5869a671"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"9aad7b9249f632a886017a4e2996f57adf663b6e","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":144,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":145,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":146,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":147,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":148,"context_line":"            side_effect\u003dstub_set_host_enabled))"},{"line_number":149,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_f6febc36","line":146,"in_reply_to":"bf659307_05cc5cba","updated":"2018-04-10 04:05:06.000000000","message":"self.hosts_api can be one of the following classes.\n(cell v1 function has not been removed yet.)\n\n* nova.compute.api.HostAPI\n* nova.compute.cells_api.HostAPI\n\nSo \u0027stub_out\u0027 is not used here.","commit_id":"51f57886318ab0941f4ffcd2dbe497bd5869a671"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"72ecd577027d5d8269928dcd79efff3c51632a87","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":144,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":145,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":146,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":147,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":148,"context_line":"            side_effect\u003dstub_set_host_enabled))"},{"line_number":149,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_57cc2669","line":146,"in_reply_to":"bf659307_14e9de18","updated":"2018-04-11 02:37:09.000000000","message":"\u003e Where is this ever nova.compute.cells_api.HostAPI? I don\u0027t see another test extending this one and overriding that variable.\n\nMatt, you are right.\nSo I changed it to \u0027stub_out\u0027.","commit_id":"51f57886318ab0941f4ffcd2dbe497bd5869a671"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e9bfc0c78fe16d756f96ecb74cff4788cf12d975","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":144,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":145,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":146,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":147,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":148,"context_line":"            side_effect\u003dstub_set_host_enabled))"},{"line_number":149,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_421b181a","line":146,"in_reply_to":"bf659307_14e9de18","updated":"2018-04-10 14:26:15.000000000","message":"stub_out takes a string like mock.patch.  These *might* be able to be changed to that form, but this way stays closer to the original by using the mock.patch.object form.","commit_id":"51f57886318ab0941f4ffcd2dbe497bd5869a671"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd1041275f6fa4be972ca595a512493979cce5df","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":144,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":145,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":146,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":147,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":148,"context_line":"            side_effect\u003dstub_set_host_enabled))"},{"line_number":149,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_97cdde31","line":146,"in_reply_to":"bf659307_57cc2669","updated":"2018-04-11 02:57:10.000000000","message":"Okay, I was going to go all pedantic (which I\u0027m still going to do - see below) and approve this anyway.  But not if stub_out requires us to add the `self` param like you\u0027ve done.\n\n\u003cPedantic\u003e\nMonkey patching via fixture (which is what stub_out does) and mock.patch.object do different things.  The latter replaces the symbol *just* in the object you pass; the former replaces the symbol as it\u0027s invoked via *any* path.  For example, if you created a new instance of HostAPI, and that init invoked the stubbed symbol, with stub_out you would get the stubbed behavior, whereas with mock.patch.object(old_host_api_object, ...) you would get the original.   In many cases (as here), either one will work.  But they\u0027re not the same.\n\u003c/Pedantic\u003e","commit_id":"51f57886318ab0941f4ffcd2dbe497bd5869a671"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7687d3cddab1a4147f3e7b4c4ab02c9134ece801","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        self.stub_out(\u0027nova.db.service_get_by_host_and_binary\u0027,"},{"line_number":144,"context_line":"                      stub_service_get_by_host_and_binary)"},{"line_number":145,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":146,"context_line":"        self.useFixture(fixtures.MockPatchObject("},{"line_number":147,"context_line":"            self.hosts_api, \u0027set_host_enabled\u0027,"},{"line_number":148,"context_line":"            side_effect\u003dstub_set_host_enabled))"},{"line_number":149,"context_line":"        # \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_14e9de18","line":146,"in_reply_to":"bf659307_f6febc36","updated":"2018-04-10 13:01:19.000000000","message":"Where is this ever nova.compute.cells_api.HostAPI? I don\u0027t see another test extending this one and overriding that variable.","commit_id":"51f57886318ab0941f4ffcd2dbe497bd5869a671"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd1041275f6fa4be972ca595a512493979cce5df","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        return results[enabled]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def stub_set_host_maintenance(self, context, host_name, mode):"},{"line_number":69,"context_line":"    # We\u0027ll simulate success and failure by assuming"},{"line_number":70,"context_line":"    # that \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":71,"context_line":"    # always fails"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_b736e250","line":68,"range":{"start_line":68,"start_character":30,"end_line":68,"end_character":34},"updated":"2018-04-11 02:57:10.000000000","message":"Oh, ew.  If you used mock.patch.object, did you not have to add this param?  A `self` param in a module-level method is ew ew ew.","commit_id":"98ad8187d0b4084d32fb1d199ad0fb8bdc9058c0"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"8a21c591837200f07117c13098e3c7924c52c7f6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        return results[enabled]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def stub_set_host_maintenance(self, context, host_name, mode):"},{"line_number":69,"context_line":"    # We\u0027ll simulate success and failure by assuming"},{"line_number":70,"context_line":"    # that \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":71,"context_line":"    # always fails"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_dcab32d3","line":68,"range":{"start_line":68,"start_character":30,"end_line":68,"end_character":34},"in_reply_to":"bf659307_b736e250","updated":"2018-04-13 07:17:01.000000000","message":"@Eric, there are many examples.\n\ne.g.:\nhttps://github.com/openstack/nova/blob/6846d995b7bb66bb79b17680317a7751e1d70ed7/nova/tests/unit/api/openstack/compute/test_attach_interfaces.py#L85-L112\n\nIt is not strange.","commit_id":"98ad8187d0b4084d32fb1d199ad0fb8bdc9058c0"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"468b4e9702aa10a27fab30e063e9cd88786e9845","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        return results[enabled]"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def stub_set_host_maintenance(self, context, host_name, mode):"},{"line_number":69,"context_line":"    # We\u0027ll simulate success and failure by assuming"},{"line_number":70,"context_line":"    # that \u0027host_c1\u0027 always succeeds, and \u0027host_c2\u0027"},{"line_number":71,"context_line":"    # always fails"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf659307_1f33d2ac","line":68,"range":{"start_line":68,"start_character":30,"end_line":68,"end_character":34},"in_reply_to":"bf659307_dcab32d3","updated":"2018-04-13 14:50:04.000000000","message":"Precedent doesn\u0027t make it right.\n\nI\u0027ll back off and see what mriedem thinks.  I\u0027m still of the opinion that mock.patch.object in some form is closer to the original intent.  There\u0027s also stub_object proposed [1], which might make all of us happy.\n\n[1] https://review.openstack.org/#/c/560683/","commit_id":"98ad8187d0b4084d32fb1d199ad0fb8bdc9058c0"}]}
