)]}'
{"nova/api/openstack/compute/security_groups.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d0bb89cbc125260f83d2d8cc7c08777983d93d7a","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                instance \u003d req.get_db_instance(server[\u0027id\u0027])"},{"line_number":448,"context_line":"                groups \u003d instance.get(key)"},{"line_number":449,"context_line":"                if groups:"},{"line_number":450,"context_line":"                    server[ATTRIBUTE_NAME] \u003d [{\"name\": group.name}"},{"line_number":451,"context_line":"                                              for group in groups]"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            # If method is a POST we get the security groups intended for an"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_2d3378f7","line":450,"range":{"start_line":450,"start_character":55,"end_line":450,"end_character":65},"updated":"2016-06-30 19:44:19.000000000","message":"I\u0027m not entirely sure I know this is an object.","commit_id":"c157201cf15049e6a97b2a12d47b297c17c68e8b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cf4d8b8a722177b52c0ec650c200890daa1f55bf","unresolved":false,"context_lines":[{"line_number":447,"context_line":"                instance \u003d req.get_db_instance(server[\u0027id\u0027])"},{"line_number":448,"context_line":"                groups \u003d instance.get(key)"},{"line_number":449,"context_line":"                if groups:"},{"line_number":450,"context_line":"                    server[ATTRIBUTE_NAME] \u003d [{\"name\": group.name}"},{"line_number":451,"context_line":"                                              for group in groups]"},{"line_number":452,"context_line":"        else:"},{"line_number":453,"context_line":"            # If method is a POST we get the security groups intended for an"}],"source_content_type":"text/x-python","patch_set":5,"id":"3aaa91ec_ed7e9017","line":450,"range":{"start_line":450,"start_character":55,"end_line":450,"end_character":65},"in_reply_to":"3aaa91ec_2d3378f7","updated":"2016-06-30 19:58:09.000000000","message":"But I guess it would have to be else this would fail.\n\nI think this is what sets it on the returned instance in the instances list, which gets cached in the req object:\n\nhttps://github.com/openstack/nova/blob/80e56adf65e9afb006d010ac38107e2b7a51d0cf/nova/compute/api.py#L1380","commit_id":"c157201cf15049e6a97b2a12d47b297c17c68e8b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0be4f8a24acfb362c5cccc0212cad0effc40942e","unresolved":false,"context_lines":[{"line_number":443,"context_line":"                instance \u003d req.get_db_instance(server[\u0027id\u0027])"},{"line_number":444,"context_line":"                groups \u003d instance.get(key)"},{"line_number":445,"context_line":"                if groups:"},{"line_number":446,"context_line":"                    server[ATTRIBUTE_NAME] \u003d [group[\"name\"]"},{"line_number":447,"context_line":"                                              for group in groups]"},{"line_number":448,"context_line":"        else:"},{"line_number":449,"context_line":"            # If method is a POST we get the security groups intended for an"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_e414b0a0","line":446,"updated":"2016-07-01 19:50:14.000000000","message":"This is an API change, I\u0027m not sure why this was changed anyway.","commit_id":"0ae7cad29e0ab7800035fe08c5f70c71e0bebdba"}],"nova/objects/security_group.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"24e1b0c1c446a2b9b20bfd3d00ca0d5bb90e193b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from nova.objects import fields"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":22,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class SecurityGroup(base.NovaPersistentObject, base.NovaObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_1bb5d1cc","line":21,"updated":"2016-05-27 14:04:40.000000000","message":"You forgot to delete the most important part :)","commit_id":"0123ec0ab2446f58779b427c98b81cd30978d6e8"},{"author":{"_account_id":20158,"name":"Andy Hsiang","email":"yh418t@att.com","username":"yh418t"},"change_message_id":"ee9e5ff66569422280812dc7e512fc3c7f3fd87a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from nova.objects import fields"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# TODO(berrange): Remove NovaObjectDictCompat"},{"line_number":22,"context_line":"@base.NovaObjectRegistry.register"},{"line_number":23,"context_line":"class SecurityGroup(base.NovaPersistentObject, base.NovaObject):"},{"line_number":24,"context_line":"    # Version 1.0: Initial version"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_763fd425","line":21,"in_reply_to":"9abb7d3a_1bb5d1cc","updated":"2016-05-27 14:13:46.000000000","message":"Done","commit_id":"0123ec0ab2446f58779b427c98b81cd30978d6e8"}],"nova/tests/unit/objects/test_security_group.py":[{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"24e1b0c1c446a2b9b20bfd3d00ca0d5bb90e193b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.mox.ReplayAll()"},{"line_number":45,"context_line":"        secgroup \u003d security_group.SecurityGroup.get(self.context, 1)"},{"line_number":46,"context_line":"        ovo_fixture.compare_obj(self, secgroup,"},{"line_number":47,"context_line":"                                self._fix_deleted(fake_secgroup))"},{"line_number":48,"context_line":"        self.assertEqual(secgroup.obj_what_changed(), set())"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_get_by_name(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_bbdbe51a","line":47,"updated":"2016-05-27 14:04:40.000000000","message":"Well done on using the fixture to compare them.","commit_id":"0123ec0ab2446f58779b427c98b81cd30978d6e8"},{"author":{"_account_id":20158,"name":"Andy Hsiang","email":"yh418t@att.com","username":"yh418t"},"change_message_id":"ee9e5ff66569422280812dc7e512fc3c7f3fd87a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.mox.ReplayAll()"},{"line_number":45,"context_line":"        secgroup \u003d security_group.SecurityGroup.get(self.context, 1)"},{"line_number":46,"context_line":"        ovo_fixture.compare_obj(self, secgroup,"},{"line_number":47,"context_line":"                                self._fix_deleted(fake_secgroup))"},{"line_number":48,"context_line":"        self.assertEqual(secgroup.obj_what_changed(), set())"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_get_by_name(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9abb7d3a_163ac836","line":47,"in_reply_to":"9abb7d3a_bbdbe51a","updated":"2016-05-27 14:13:46.000000000","message":"thanks! I learned from one of your implementation TBH, :)","commit_id":"0123ec0ab2446f58779b427c98b81cd30978d6e8"}]}
