)]}'
{"nova/cells/messaging.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"9a4f443b9866024f8356f29e3bd9bb2ee07c8c15","unresolved":false,"context_lines":[{"line_number":668,"context_line":"        # 1st arg is instance_uuid that we need to turn into the"},{"line_number":669,"context_line":"        # instance object."},{"line_number":670,"context_line":"        instance_uuid \u003d args[0]"},{"line_number":671,"context_line":"        expected_attrs \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027]"},{"line_number":672,"context_line":"        if method in [\u0027shelve\u0027, \u0027unshelve\u0027]:"},{"line_number":673,"context_line":"            expected_attrs.append(\u0027info_cache\u0027)"},{"line_number":674,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa963961_d0a01393","line":671,"updated":"2015-03-27 01:24:11.000000000","message":"Why always set these as expected? Because they are commonly needed or because this opens up to every method and not just the EXPECTS_OBJECTS ones? (Just noting that they weren\u0027t being pulled before)","commit_id":"4a32524b90ad7612dfc364dec62141e443aaf862"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3405895974ab53a5286127ad3323117b325f07c0","unresolved":false,"context_lines":[{"line_number":668,"context_line":"        # 1st arg is instance_uuid that we need to turn into the"},{"line_number":669,"context_line":"        # instance object."},{"line_number":670,"context_line":"        instance_uuid \u003d args[0]"},{"line_number":671,"context_line":"        expected_attrs \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027]"},{"line_number":672,"context_line":"        if method in [\u0027shelve\u0027, \u0027unshelve\u0027]:"},{"line_number":673,"context_line":"            expected_attrs.append(\u0027info_cache\u0027)"},{"line_number":674,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_006a8e80","line":671,"in_reply_to":"fa963961_d0a01393","updated":"2015-03-30 19:16:08.000000000","message":"They are commonly needed, but at this point I\u0027m not sure why I added this.  I\u0027ll dig into this and either remove it or add a comment explaining.","commit_id":"4a32524b90ad7612dfc364dec62141e443aaf862"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ae701481d99aaff02476ce690806adc49ab19c12","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        # cell, but instances typically have the following attrs loaded from"},{"line_number":673,"context_line":"        # the API so we\u0027ll be optimistic."},{"line_number":674,"context_line":"        expected_attrs \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027, \u0027security_groups\u0027,"},{"line_number":675,"context_line":"                          \u0027info_cache\u0027]"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"        try:"},{"line_number":678,"context_line":"            instance \u003d objects.Instance.get_by_uuid(message.ctxt,"}],"source_content_type":"text/x-python","patch_set":3,"id":"dac4157f_35a6e253","line":675,"updated":"2015-04-21 14:53:49.000000000","message":"Seems tempting to just let them lazy load and just leave expected_attrs as the default, but maybe this is safer.","commit_id":"320b3282011fa8d7c3fd1e736ebe70f938329ee7"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"c97b2215b10fb7debc5e3e57dd1dd12326e7e4fd","unresolved":false,"context_lines":[{"line_number":672,"context_line":"        # cell, but instances typically have the following attrs loaded from"},{"line_number":673,"context_line":"        # the API so we\u0027ll be optimistic."},{"line_number":674,"context_line":"        expected_attrs \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027, \u0027security_groups\u0027,"},{"line_number":675,"context_line":"                          \u0027info_cache\u0027]"},{"line_number":676,"context_line":""},{"line_number":677,"context_line":"        try:"},{"line_number":678,"context_line":"            instance \u003d objects.Instance.get_by_uuid(message.ctxt,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3acd31a7_1b1e860c","line":675,"in_reply_to":"dac4157f_35a6e253","updated":"2015-04-30 20:41:38.000000000","message":"I revised the comment in a later PS, but this is what\u0027s loaded by the compute.api:get() method used by the API so a good portion of instances would have had these loaded.","commit_id":"320b3282011fa8d7c3fd1e736ebe70f938329ee7"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"47c2d5131f93b470bf8de375f53c4aed2341c364","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        # NOTE: compute/api.py loads these when retrieving an instance for an"},{"line_number":672,"context_line":"        # API request, so there\u0027s a good chance that this is what was loaded."},{"line_number":673,"context_line":"        expected_attrs \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027, \u0027security_groups\u0027,"},{"line_number":674,"context_line":"                          \u0027info_cache\u0027]"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        try:"},{"line_number":677,"context_line":"            instance \u003d objects.Instance.get_by_uuid(message.ctxt,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_d320154c","line":674,"updated":"2015-05-06 15:37:22.000000000","message":"I guess we should evolve this at some point, but this is cool for now.","commit_id":"3aab20c8f2f1c1cbef84dead80327d6c4b2405d1"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"9aff014be969fad174da8d16a840ec1589363d7d","unresolved":false,"context_lines":[{"line_number":671,"context_line":"        # NOTE: compute/api.py loads these when retrieving an instance for an"},{"line_number":672,"context_line":"        # API request, so there\u0027s a good chance that this is what was loaded."},{"line_number":673,"context_line":"        expected_attrs \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027, \u0027security_groups\u0027,"},{"line_number":674,"context_line":"                          \u0027info_cache\u0027]"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        try:"},{"line_number":677,"context_line":"            instance \u003d objects.Instance.get_by_uuid(message.ctxt,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1aca2d91_d986eab8","line":674,"in_reply_to":"1aca2d91_d320154c","updated":"2015-05-06 20:35:30.000000000","message":"I think the next logical step is to pass down instance objects and refresh at this point.","commit_id":"3aab20c8f2f1c1cbef84dead80327d6c4b2405d1"}],"nova/tests/unit/cells/test_cells_messaging.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"9a4f443b9866024f8356f29e3bd9bb2ee07c8c15","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                       \u0027method_args\u0027: (instance.uuid, 2, 3),"},{"line_number":677,"context_line":"                       \u0027method_kwargs\u0027: {\u0027arg1\u0027: \u0027val1\u0027, \u0027arg2\u0027: \u0027val2\u0027}}"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        with contextlib.nested("},{"line_number":680,"context_line":"                mock.patch.object(self.tgt_compute_api, method_name,"},{"line_number":681,"context_line":"                    return_value\u003d\u0027fake-result\u0027),"},{"line_number":682,"context_line":"                mock.patch.object(objects.Instance, \u0027get_by_uuid\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa963961_70a147a9","line":679,"updated":"2015-03-27 01:24:11.000000000","message":"If you have to respin, it\u0027s preferred to decorate a nested function in here and then just call it, instead of using the nested context manager.","commit_id":"4a32524b90ad7612dfc364dec62141e443aaf862"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"3405895974ab53a5286127ad3323117b325f07c0","unresolved":false,"context_lines":[{"line_number":676,"context_line":"                       \u0027method_args\u0027: (instance.uuid, 2, 3),"},{"line_number":677,"context_line":"                       \u0027method_kwargs\u0027: {\u0027arg1\u0027: \u0027val1\u0027, \u0027arg2\u0027: \u0027val2\u0027}}"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        with contextlib.nested("},{"line_number":680,"context_line":"                mock.patch.object(self.tgt_compute_api, method_name,"},{"line_number":681,"context_line":"                    return_value\u003d\u0027fake-result\u0027),"},{"line_number":682,"context_line":"                mock.patch.object(objects.Instance, \u0027get_by_uuid\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da9b358b_00016eae","line":679,"in_reply_to":"fa963961_70a147a9","updated":"2015-03-30 19:16:08.000000000","message":"Can do.","commit_id":"4a32524b90ad7612dfc364dec62141e443aaf862"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"8c6b6e950c8bdc440bf82622d389656284da778a","unresolved":false,"context_lines":[{"line_number":696,"context_line":"                return_value\u003d\u0027fake-result\u0027)"},{"line_number":697,"context_line":"        @mock.patch.object(objects.Instance, \u0027get_by_uuid\u0027,"},{"line_number":698,"context_line":"                return_value\u003dinstance)"},{"line_number":699,"context_line":"        def run_method(mock_get_by_uuid, mock_method):"},{"line_number":700,"context_line":"            response \u003d self.src_msg_runner.run_compute_api_method("},{"line_number":701,"context_line":"                    self.ctxt,"},{"line_number":702,"context_line":"                    self.tgt_cell_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_cf9f05b3","line":699,"updated":"2015-05-03 18:14:35.000000000","message":"what exactly is the purpose of having this nested method? You can just have this method\u0027s body in the normal method\u0027s body.","commit_id":"09b08cdd0a22680550a3af4450e38d03ad3f3d13"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"36fabb22c4bbeccae24468b2c9df0869ac7423b4","unresolved":false,"context_lines":[{"line_number":696,"context_line":"                return_value\u003d\u0027fake-result\u0027)"},{"line_number":697,"context_line":"        @mock.patch.object(objects.Instance, \u0027get_by_uuid\u0027,"},{"line_number":698,"context_line":"                return_value\u003dinstance)"},{"line_number":699,"context_line":"        def run_method(mock_get_by_uuid, mock_method):"},{"line_number":700,"context_line":"            response \u003d self.src_msg_runner.run_compute_api_method("},{"line_number":701,"context_line":"                    self.ctxt,"},{"line_number":702,"context_line":"                    self.tgt_cell_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_9d158341","line":699,"in_reply_to":"3acd31a7_689fb2b4","updated":"2015-05-05 20:00:54.000000000","message":"Yep.  It avoids the deprecated contextlib.nested and the horrible multiple with statement syntax.","commit_id":"09b08cdd0a22680550a3af4450e38d03ad3f3d13"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"59666444af3d4457f997eb4d3ead7fe0fad2ead5","unresolved":false,"context_lines":[{"line_number":696,"context_line":"                return_value\u003d\u0027fake-result\u0027)"},{"line_number":697,"context_line":"        @mock.patch.object(objects.Instance, \u0027get_by_uuid\u0027,"},{"line_number":698,"context_line":"                return_value\u003dinstance)"},{"line_number":699,"context_line":"        def run_method(mock_get_by_uuid, mock_method):"},{"line_number":700,"context_line":"            response \u003d self.src_msg_runner.run_compute_api_method("},{"line_number":701,"context_line":"                    self.ctxt,"},{"line_number":702,"context_line":"                    self.tgt_cell_name,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3acd31a7_689fb2b4","line":699,"in_reply_to":"3acd31a7_cf9f05b3","updated":"2015-05-04 18:16:00.000000000","message":"It\u0027s for the mock decorators. You either have to use a nested function or use a nested context manager (for the mocks), and this way is preferred.","commit_id":"09b08cdd0a22680550a3af4450e38d03ad3f3d13"}]}
