)]}'
{"dragonflow/controller/sg_app.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"9901db88c474afe3ec87340986eaa70af0638470","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from dragonflow.controller.common import utils"},{"line_number":26,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":27,"context_line":"from dragonflow.db.models import constants as model_constants"},{"line_number":28,"context_line":"from dragonflow.db.models.secgroups import SecurityGroup"},{"line_number":29,"context_line":"from dragonflow.db.models.secgroups import SecurityGroupRule"},{"line_number":30,"context_line":"# from dragonflow.db import models"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a1ced50_20cbee54","line":29,"range":{"start_line":28,"start_character":0,"end_line":29,"end_character":60},"updated":"2017-03-20 08:33:32.000000000","message":"Imports should import whole modules rather than specific classes.","commit_id":"9ee16c37b039f3264ab8a97913600135af2be8e3"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6790832c7bf614adebb3ddececd81889770c4d50","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":27,"context_line":"from dragonflow.db.models import constants as model_constants"},{"line_number":28,"context_line":"from dragonflow.db.models import secgroups as sg_model"},{"line_number":29,"context_line":"# from dragonflow.db import models"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_934371ae","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":34},"updated":"2017-03-23 13:50:28.000000000","message":"To remove?","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from dragonflow.controller import df_base_app"},{"line_number":27,"context_line":"from dragonflow.db.models import constants as model_constants"},{"line_number":28,"context_line":"from dragonflow.db.models import secgroups as sg_model"},{"line_number":29,"context_line":"# from dragonflow.db import models"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_8f098c96","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":34},"in_reply_to":"1a1ced50_934371ae","updated":"2017-03-27 08:39:48.000000000","message":"Done","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6790832c7bf614adebb3ddececd81889770c4d50","unresolved":false,"context_lines":[{"line_number":520,"context_line":"            self._get_rule_flows_match_except_net_addresses(secgroup_rule)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        if secgroup_rule.ethertype \u003d\u003d n_const.IPv4:"},{"line_number":523,"context_line":"            if secgroup_rule.direction \u003d\u003d \u0027ingress\u0027:"},{"line_number":524,"context_line":"                table_id \u003d const.INGRESS_SECURITY_GROUP_TABLE"},{"line_number":525,"context_line":"                ipv4_match_item \u003d \"ipv4_src\""},{"line_number":526,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_d365e944","line":523,"range":{"start_line":523,"start_character":43,"end_line":523,"end_character":50},"updated":"2017-03-23 13:50:28.000000000","message":"Maybe use a constant?","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":520,"context_line":"            self._get_rule_flows_match_except_net_addresses(secgroup_rule)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        if secgroup_rule.ethertype \u003d\u003d n_const.IPv4:"},{"line_number":523,"context_line":"            if secgroup_rule.direction \u003d\u003d \u0027ingress\u0027:"},{"line_number":524,"context_line":"                table_id \u003d const.INGRESS_SECURITY_GROUP_TABLE"},{"line_number":525,"context_line":"                ipv4_match_item \u003d \"ipv4_src\""},{"line_number":526,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_32fae774","line":523,"range":{"start_line":523,"start_character":43,"end_line":523,"end_character":50},"in_reply_to":"1a1ced50_d365e944","updated":"2017-03-27 08:39:48.000000000","message":"Done","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"87f8db9dafda92d656ce51a8084e3271b6ad78ad","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"            if new_rule not in old_secgroup_rules:"},{"line_number":1059,"context_line":"                self.add_security_group_rule(new_secgroup, new_rule)"},{"line_number":1060,"context_line":"            else:"},{"line_number":1061,"context_line":"                old_secgroup_rules.remove(new_rule)"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        for old_rule in old_secgroup_rules:"},{"line_number":1064,"context_line":"            self.remove_security_group_rule(old_secgroup, old_rule)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_bfd28133","line":1061,"range":{"start_line":1061,"start_character":35,"end_line":1061,"end_character":41},"updated":"2017-04-24 08:37:23.000000000","message":"I think this mutates the list on the secgroup object (that is also in db_store)","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"96655019244b120489ef80724ead06d593f2abf9","unresolved":false,"context_lines":[{"line_number":1058,"context_line":"            if new_rule not in old_secgroup_rules:"},{"line_number":1059,"context_line":"                self.add_security_group_rule(new_secgroup, new_rule)"},{"line_number":1060,"context_line":"            else:"},{"line_number":1061,"context_line":"                old_secgroup_rules.remove(new_rule)"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        for old_rule in old_secgroup_rules:"},{"line_number":1064,"context_line":"            self.remove_security_group_rule(old_secgroup, old_rule)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_6d88cac5","line":1061,"range":{"start_line":1061,"start_character":35,"end_line":1061,"end_character":41},"in_reply_to":"5ff73747_bfd28133","updated":"2017-04-24 12:53:08.000000000","message":"Will fix","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f49a482678697bf042da386fad559487860e3a92","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"                                model_constants.EVENT_DELETED)"},{"line_number":1068,"context_line":"    def delete_security_group(self, secgroup):"},{"line_number":1069,"context_line":"        for new_rule in secgroup.rules:"},{"line_number":1070,"context_line":"            self.add_security_group_rule(secgroup, new_rule)"},{"line_number":1071,"context_line":""},{"line_number":1072,"context_line":"    @df_base_app.register_event(sg_model.SecurityGroupRule,"},{"line_number":1073,"context_line":"                                model_constants.EVENT_CREATED)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_8b7aec85","line":1070,"range":{"start_line":1070,"start_character":17,"end_line":1070,"end_character":40},"updated":"2017-04-24 03:19:08.000000000","message":"should this be remove_security_group_rule ?","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"214f95c5da11000c0b94c45be2f18f4ac557a23a","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"                                model_constants.EVENT_DELETED)"},{"line_number":1068,"context_line":"    def delete_security_group(self, secgroup):"},{"line_number":1069,"context_line":"        for new_rule in secgroup.rules:"},{"line_number":1070,"context_line":"            self.add_security_group_rule(secgroup, new_rule)"},{"line_number":1071,"context_line":""},{"line_number":1072,"context_line":"    @df_base_app.register_event(sg_model.SecurityGroupRule,"},{"line_number":1073,"context_line":"                                model_constants.EVENT_CREATED)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_df466d50","line":1070,"range":{"start_line":1070,"start_character":17,"end_line":1070,"end_character":40},"in_reply_to":"5ff73747_8b7aec85","updated":"2017-04-24 08:25:05.000000000","message":"Yes, thanks.\nI\u0027ll also add a test for it","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"96655019244b120489ef80724ead06d593f2abf9","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"                                model_constants.EVENT_DELETED)"},{"line_number":1068,"context_line":"    def delete_security_group(self, secgroup):"},{"line_number":1069,"context_line":"        for new_rule in secgroup.rules:"},{"line_number":1070,"context_line":"            self.add_security_group_rule(secgroup, new_rule)"},{"line_number":1071,"context_line":""},{"line_number":1072,"context_line":"    @df_base_app.register_event(sg_model.SecurityGroupRule,"},{"line_number":1073,"context_line":"                                model_constants.EVENT_CREATED)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_adfff265","line":1070,"range":{"start_line":1070,"start_character":17,"end_line":1070,"end_character":40},"in_reply_to":"5ff73747_df466d50","updated":"2017-04-24 12:53:08.000000000","message":"Actually this is not required at all. User cannot delete security group if it still assigned to a port","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6e40ee31add323128e7ad9a57f371455cfd92a60","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"    @df_base_app.register_event(sg_model.SecurityGroup,"},{"line_number":1054,"context_line":"                                model_constants.EVENT_UPDATED)"},{"line_number":1055,"context_line":"    def update_security_group(self, new_secgroup, old_secgroup):"},{"line_number":1056,"context_line":"        new_secgroup_rules \u003d copy.copy(new_secgroup.rules)"},{"line_number":1057,"context_line":"        old_secgroup_rules \u003d copy.copy(old_secgroup.rules)"},{"line_number":1058,"context_line":"        for new_rule in new_secgroup_rules:"},{"line_number":1059,"context_line":"            if new_rule not in old_secgroup_rules:"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_bbafdee1","line":1056,"range":{"start_line":1056,"start_character":29,"end_line":1056,"end_character":39},"updated":"2017-04-26 11:34:02.000000000","message":"nit: Not strictly needed","commit_id":"239b3b858fa097820167e2bc6326e48d6b10a0a1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6e40ee31add323128e7ad9a57f371455cfd92a60","unresolved":false,"context_lines":[{"line_number":1063,"context_line":""},{"line_number":1064,"context_line":"        for old_rule in old_secgroup_rules:"},{"line_number":1065,"context_line":"            self.remove_security_group_rule(old_secgroup, old_rule)"},{"line_number":1066,"context_line":""},{"line_number":1067,"context_line":"    @df_base_app.register_event(sg_model.SecurityGroupRule,"},{"line_number":1068,"context_line":"                                model_constants.EVENT_CREATED)"},{"line_number":1069,"context_line":"    def add_security_group_rule(self, secgroup, secgroup_rule):"},{"line_number":1070,"context_line":"        secgroup_id \u003d secgroup.id"},{"line_number":1071,"context_line":"        if self._is_sg_not_associated_with_local_port(secgroup_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_7bca766d","line":1068,"range":{"start_line":1066,"start_character":0,"end_line":1068,"end_character":62},"updated":"2017-04-26 11:34:02.000000000","message":"These events are not yet used (never emitted). Note that when they will be, this may cause a rule to be added twice.","commit_id":"239b3b858fa097820167e2bc6326e48d6b10a0a1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6e40ee31add323128e7ad9a57f371455cfd92a60","unresolved":false,"context_lines":[{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"        self._install_security_group_rule_flows(secgroup_id, secgroup_rule)"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":"    @df_base_app.register_event(sg_model.SecurityGroupRule,"},{"line_number":1093,"context_line":"                                model_constants.EVENT_DELETED)"},{"line_number":1094,"context_line":"    def remove_security_group_rule(self, secgroup, secgroup_rule):"},{"line_number":1095,"context_line":"        secgroup_id \u003d secgroup.id"},{"line_number":1096,"context_line":"        if self._is_sg_not_associated_with_local_port(secgroup_id):"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_1ba5b2b5","line":1093,"range":{"start_line":1092,"start_character":0,"end_line":1093,"end_character":62},"updated":"2017-04-26 11:34:02.000000000","message":"Same here","commit_id":"239b3b858fa097820167e2bc6326e48d6b10a0a1"}],"dragonflow/db/models/secgroups.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"99e867dbc2594f1e7b8b530d16c41fd72b87915c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"@mf.register_model"},{"line_number":21,"context_line":"@mf.construct_nb_db_model"},{"line_number":22,"context_line":"class SecurityGroupRule(mf.ModelBase, mixins.BasicEvents):"},{"line_number":23,"context_line":"    direction \u003d fields.StringField()"},{"line_number":24,"context_line":"    ethertype \u003d fields.StringField()"},{"line_number":25,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":26,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":27,"context_line":"    protocol \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a1ff146_c48c3338","line":24,"range":{"start_line":23,"start_character":5,"end_line":24,"end_character":36},"updated":"2017-03-14 17:36:59.000000000","message":"I think those can be enums","commit_id":"7ad4efd68be60d8dcb098b89e43ee3b3e8a319be"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"ecb170f69a44e2bfec4610a4ed6023d5e7531c4f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"@mf.register_model"},{"line_number":21,"context_line":"@mf.construct_nb_db_model"},{"line_number":22,"context_line":"class SecurityGroupRule(mf.ModelBase, mixins.BasicEvents):"},{"line_number":23,"context_line":"    direction \u003d fields.StringField()"},{"line_number":24,"context_line":"    ethertype \u003d fields.StringField()"},{"line_number":25,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":26,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":27,"context_line":"    protocol \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a1ff146_174742bc","line":24,"range":{"start_line":23,"start_character":5,"end_line":24,"end_character":36},"in_reply_to":"3a1ff146_c48c3338","updated":"2017-03-15 08:56:57.000000000","message":"Will fix","commit_id":"7ad4efd68be60d8dcb098b89e43ee3b3e8a319be"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"99e867dbc2594f1e7b8b530d16c41fd72b87915c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    ethertype \u003d fields.StringField()"},{"line_number":25,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":26,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":27,"context_line":"    protocol \u003d fields.StringField()"},{"line_number":28,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":29,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":30,"context_line":"    security_group_id \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a1ff146_e4984f6d","line":27,"range":{"start_line":27,"start_character":22,"end_line":27,"end_character":33},"updated":"2017-03-14 17:36:59.000000000","message":"Also enum","commit_id":"7ad4efd68be60d8dcb098b89e43ee3b3e8a319be"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"ecb170f69a44e2bfec4610a4ed6023d5e7531c4f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    ethertype \u003d fields.StringField()"},{"line_number":25,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":26,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":27,"context_line":"    protocol \u003d fields.StringField()"},{"line_number":28,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":29,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":30,"context_line":"    security_group_id \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a1ff146_d73cca31","line":27,"range":{"start_line":27,"start_character":22,"end_line":27,"end_character":33},"in_reply_to":"3a1ff146_e4984f6d","updated":"2017-03-15 08:56:57.000000000","message":"Will fix","commit_id":"7ad4efd68be60d8dcb098b89e43ee3b3e8a319be"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"99e867dbc2594f1e7b8b530d16c41fd72b87915c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":26,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":27,"context_line":"    protocol \u003d fields.StringField()"},{"line_number":28,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":29,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":30,"context_line":"    security_group_id \u003d fields.StringField()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a1ff146_64761f40","line":28,"range":{"start_line":28,"start_character":29,"end_line":28,"end_character":40},"updated":"2017-03-14 17:36:59.000000000","message":"Reference","commit_id":"7ad4efd68be60d8dcb098b89e43ee3b3e8a319be"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"ecb170f69a44e2bfec4610a4ed6023d5e7531c4f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":26,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":27,"context_line":"    protocol \u003d fields.StringField()"},{"line_number":28,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":29,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":30,"context_line":"    security_group_id \u003d fields.StringField()"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a1ff146_7735d644","line":28,"range":{"start_line":28,"start_character":29,"end_line":28,"end_character":40},"in_reply_to":"3a1ff146_64761f40","updated":"2017-03-15 08:56:57.000000000","message":"SecurityGroup already holds a list of SecurityGroupRule","commit_id":"7ad4efd68be60d8dcb098b89e43ee3b3e8a319be"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"71b9e56f7ca0a6c04a7181807d87a58bebbff5fb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    ethertype \u003d df_fields.EnumField(RULE_ETHERTYPE, required\u003dTrue)"},{"line_number":30,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":31,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":32,"context_line":"    protocol \u003d df_fields.EnumListField(RULE_PROTOCOL)"},{"line_number":33,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":34,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":35,"context_line":"    security_group_id \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_348419d3","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":38},"updated":"2017-03-19 18:39:54.000000000","message":"I think this should be EnumField, not EnumListField.","commit_id":"0a81e5cb31665c5777c85c4fb3cb768abfa0cd76"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"7780e19d308f6fc6ce632463c54cef4facda965d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    ethertype \u003d df_fields.EnumField(RULE_ETHERTYPE, required\u003dTrue)"},{"line_number":30,"context_line":"    port_range_max \u003d fields.IntField()"},{"line_number":31,"context_line":"    port_range_min \u003d fields.IntField()"},{"line_number":32,"context_line":"    protocol \u003d df_fields.EnumListField(RULE_PROTOCOL)"},{"line_number":33,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":34,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":35,"context_line":"    security_group_id \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a1ced50_543fd5d5","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":38},"in_reply_to":"1a1ced50_348419d3","updated":"2017-03-19 19:31:42.000000000","message":"+1.\n\nEnumField holds a string out of predefined values.\nEnumListField holds a list of strings of predefined values.","commit_id":"0a81e5cb31665c5777c85c4fb3cb768abfa0cd76"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"4c6f944fd92f1e67c7eb9f584c0ec951fa294d9e","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"RULE_DIRECTION \u003d (\u0027ingress\u0027, \u0027egress\u0027)"},{"line_number":21,"context_line":"RULE_ETHERTYPE \u003d (\u0027IPv4\u0027, \u0027IPv6\u0027)"},{"line_number":22,"context_line":"RULE_PROTOCOL \u003d (\u0027icmp\u0027, \u0027tcp\u0027, \u0027udp\u0027) #TODO: Suppport protocol number as protocol type"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_32d5c91b","line":22,"updated":"2017-03-21 10:55:30.000000000","message":"This will throw pep8 off. Also, please change TODO -\u003e TODO (lihi)","commit_id":"8dfa1937763844431694048e314ad4082b2b9f5d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"ecd0aee5bf6e526165afbd7f00ababa07c915630","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"RULE_DIRECTION \u003d (\u0027ingress\u0027, \u0027egress\u0027)"},{"line_number":21,"context_line":"RULE_ETHERTYPE \u003d (\u0027IPv4\u0027, \u0027IPv6\u0027)"},{"line_number":22,"context_line":"RULE_PROTOCOL \u003d (\u0027icmp\u0027, \u0027tcp\u0027, \u0027udp\u0027) #TODO: Suppport protocol number as protocol type"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_7279d3c7","line":22,"in_reply_to":"1a1ced50_32d5c91b","updated":"2017-03-22 08:39:59.000000000","message":"Done","commit_id":"8dfa1937763844431694048e314ad4082b2b9f5d"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"b154d724ab665fd65ec4a7b5b9b3ae00181be8d9","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    table_name \u003d \"secgroup\""},{"line_number":45,"context_line":"    rules \u003d fields.ListField(SecurityGroupRule)"},{"line_number":46,"context_line":"    id \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_b5282f34","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":29},"updated":"2017-03-26 11:46:51.000000000","message":"This is inherited from ModelBase","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    table_name \u003d \"secgroup\""},{"line_number":45,"context_line":"    rules \u003d fields.ListField(SecurityGroupRule)"},{"line_number":46,"context_line":"    id \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_1268031f","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":29},"in_reply_to":"ffe62b97_b5282f34","updated":"2017-03-27 08:39:48.000000000","message":"Removed","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f49a482678697bf042da386fad559487860e3a92","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":36,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":37,"context_line":"    security_group_id \u003d fields.StringField()"},{"line_number":38,"context_line":"    description \u003d fields.StringField()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_0b47fc1f","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":38},"updated":"2017-04-24 03:19:08.000000000","message":"though it was in old db model, I think it is not used and can be removed.","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"214f95c5da11000c0b94c45be2f18f4ac557a23a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":36,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":37,"context_line":"    security_group_id \u003d fields.StringField()"},{"line_number":38,"context_line":"    description \u003d fields.StringField()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_142efca4","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":38},"in_reply_to":"5ff73747_0b47fc1f","updated":"2017-04-24 08:25:05.000000000","message":"The field is part of the Neutron API for security groups\n\nhttps://developer.openstack.org/api-ref/networking/v2/?expanded\u003dcreate-security-group-rule-detail","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"87f8db9dafda92d656ce51a8084e3271b6ad78ad","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":36,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":37,"context_line":"    security_group_id \u003d fields.StringField()"},{"line_number":38,"context_line":"    description \u003d fields.StringField()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_bfbba1e3","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":38},"in_reply_to":"5ff73747_142efca4","updated":"2017-04-24 08:37:23.000000000","message":"I also agree we should remove it, as it is not needed in the north-bound database.\nThis can be done is a separate patch though if it modifies existing code in any way.","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"8b39f0a7b0ac26a84dd6a428d3ac7d803c90533f","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":36,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":37,"context_line":"    security_group_id \u003d fields.StringField()"},{"line_number":38,"context_line":"    description \u003d fields.StringField()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_7fe639eb","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":38},"in_reply_to":"5ff73747_142efca4","updated":"2017-04-24 08:39:33.000000000","message":"but we don\u0027t use it in df(do we?) If so, I feel it is safe to ignore it when translate neutron data to df data.\n\nActually, there are \u0027description\u0027 in many other neutron data, but we haven\u0027t added any of them to df now.","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"96655019244b120489ef80724ead06d593f2abf9","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    remote_group_id \u003d fields.StringField()"},{"line_number":36,"context_line":"    remote_ip_prefix \u003d df_fields.IpNetworkField()"},{"line_number":37,"context_line":"    security_group_id \u003d fields.StringField()"},{"line_number":38,"context_line":"    description \u003d fields.StringField()"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"@mf.register_model"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_c8510c11","line":38,"range":{"start_line":38,"start_character":0,"end_line":38,"end_character":38},"in_reply_to":"5ff73747_7fe639eb","updated":"2017-04-24 12:53:08.000000000","message":"It\u0027s not a big change. I\u0027ll remove it","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"f49a482678697bf042da386fad559487860e3a92","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    table_name \u003d \"secgroup\""},{"line_number":47,"context_line":"    rules \u003d fields.ListField(SecurityGroupRule)"},{"line_number":48,"context_line":"    description \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_cb50f4d7","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":38},"updated":"2017-04-24 03:19:08.000000000","message":"This is not in old db model, and I think it can be removed too.","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"87f8db9dafda92d656ce51a8084e3271b6ad78ad","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    table_name \u003d \"secgroup\""},{"line_number":47,"context_line":"    rules \u003d fields.ListField(SecurityGroupRule)"},{"line_number":48,"context_line":"    description \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_dfc54d5d","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":38},"in_reply_to":"5ff73747_5f5b7d2d","updated":"2017-04-24 08:37:23.000000000","message":"Same","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"214f95c5da11000c0b94c45be2f18f4ac557a23a","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    table_name \u003d \"secgroup\""},{"line_number":47,"context_line":"    rules \u003d fields.ListField(SecurityGroupRule)"},{"line_number":48,"context_line":"    description \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_5f5b7d2d","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":38},"in_reply_to":"5ff73747_cb50f4d7","updated":"2017-04-24 08:25:05.000000000","message":"This is also a part of the fields in the Neutron API\n\nhttps://developer.openstack.org/api-ref/networking/v2/?expanded\u003dcreate-security-group-rule-detail,create-security-group-detail#create-security-group","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"96655019244b120489ef80724ead06d593f2abf9","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    table_name \u003d \"secgroup\""},{"line_number":47,"context_line":"    rules \u003d fields.ListField(SecurityGroupRule)"},{"line_number":48,"context_line":"    description \u003d fields.StringField()"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_885b042d","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":38},"in_reply_to":"5ff73747_dfc54d5d","updated":"2017-04-24 12:53:08.000000000","message":"It\u0027s not a big change. I\u0027ll remove it","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"}],"dragonflow/neutron/ml2/mech_driver.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"78f72a8d48f5d63bc664d86ec868c5e8f6223d7c","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_SECURITY_GROUP)"},{"line_number":173,"context_line":"    def delete_security_group(self, resource, event, trigger, **kwargs):"},{"line_number":174,"context_line":"        sg \u003d kwargs[\u0027security_group\u0027]"},{"line_number":175,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg[\u0027id\u0027], topic\u003dsg[\u0027project_id\u0027])"},{"line_number":176,"context_line":"        self.nb_api.delete(sg_obj)"},{"line_number":177,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete security group %s\"), sg[\u0027id\u0027])"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_15a8898c","line":175,"range":{"start_line":175,"start_character":64,"end_line":175,"end_character":74},"updated":"2017-03-22 08:53:35.000000000","message":"in previous version it was \u0027tenant_id\u0027","commit_id":"150ff4dbc05874c25461d30bb05b43294c7ce81d"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"9f5cc3e66449a2dd7bd84cee62438c56e59c7294","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_SECURITY_GROUP)"},{"line_number":173,"context_line":"    def delete_security_group(self, resource, event, trigger, **kwargs):"},{"line_number":174,"context_line":"        sg \u003d kwargs[\u0027security_group\u0027]"},{"line_number":175,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg[\u0027id\u0027], topic\u003dsg[\u0027project_id\u0027])"},{"line_number":176,"context_line":"        self.nb_api.delete(sg_obj)"},{"line_number":177,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete security group %s\"), sg[\u0027id\u0027])"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_6b41dea8","line":175,"range":{"start_line":175,"start_character":64,"end_line":175,"end_character":74},"in_reply_to":"1a1ced50_15a8898c","updated":"2017-03-22 09:48:47.000000000","message":"Yes, but according to the docs tenant_id contains project_id now. We can change it in an independent patch though.","commit_id":"150ff4dbc05874c25461d30bb05b43294c7ce81d"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"1857a139e1d5ff8b74f6d1f6d8abda1fc2fc468f","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_SECURITY_GROUP)"},{"line_number":173,"context_line":"    def delete_security_group(self, resource, event, trigger, **kwargs):"},{"line_number":174,"context_line":"        sg \u003d kwargs[\u0027security_group\u0027]"},{"line_number":175,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg[\u0027id\u0027], topic\u003dsg[\u0027project_id\u0027])"},{"line_number":176,"context_line":"        self.nb_api.delete(sg_obj)"},{"line_number":177,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete security group %s\"), sg[\u0027id\u0027])"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_bb5cff7d","line":175,"range":{"start_line":175,"start_character":64,"end_line":175,"end_character":74},"in_reply_to":"1a1ced50_6b41dea8","updated":"2017-03-22 12:11:10.000000000","message":"Rest of the places keep using tent_id, so if to apply the change I suggest a separate patch","commit_id":"150ff4dbc05874c25461d30bb05b43294c7ce81d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"862f7886c64fd6ea613ff0e44a8886429f527b40","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    @lock_db.wrap_db_lock(lock_db.RESOURCE_ML2_SECURITY_GROUP)"},{"line_number":173,"context_line":"    def delete_security_group(self, resource, event, trigger, **kwargs):"},{"line_number":174,"context_line":"        sg \u003d kwargs[\u0027security_group\u0027]"},{"line_number":175,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg[\u0027id\u0027], topic\u003dsg[\u0027project_id\u0027])"},{"line_number":176,"context_line":"        self.nb_api.delete(sg_obj)"},{"line_number":177,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete security group %s\"), sg[\u0027id\u0027])"},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a1ced50_7c9974c3","line":175,"range":{"start_line":175,"start_character":64,"end_line":175,"end_character":74},"in_reply_to":"1a1ced50_bb5cff7d","updated":"2017-03-23 08:17:12.000000000","message":"I\u0027ll change it back. I will do it in a separate patch","commit_id":"150ff4dbc05874c25461d30bb05b43294c7ce81d"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6790832c7bf614adebb3ddececd81889770c4d50","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        for rule in rules:"},{"line_number":156,"context_line":"            rule[\u0027topic\u0027] \u003d rule.get(\u0027tenant_id\u0027)"},{"line_number":157,"context_line":"            del rule[\u0027tenant_id\u0027]"},{"line_number":158,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id,"},{"line_number":159,"context_line":"                                         topic\u003dtenant_id,"},{"line_number":160,"context_line":"                                         name\u003dsg_name,"},{"line_number":161,"context_line":"                                         rules\u003drules,"},{"line_number":162,"context_line":"                                         version\u003dsg_version)"},{"line_number":163,"context_line":"        if event \u003d\u003d events.AFTER_CREATE:"},{"line_number":164,"context_line":"            self.nb_api.create(sg_obj)"},{"line_number":165,"context_line":"            LOG.info(_LI(\"DFMechDriver: create security group %s\"), sg_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_53ae592e","line":162,"range":{"start_line":158,"start_character":0,"end_line":162,"end_character":60},"updated":"2017-03-23 13:50:28.000000000","message":"Why not use security_group_from_neutron_obj ?","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        for rule in rules:"},{"line_number":156,"context_line":"            rule[\u0027topic\u0027] \u003d rule.get(\u0027tenant_id\u0027)"},{"line_number":157,"context_line":"            del rule[\u0027tenant_id\u0027]"},{"line_number":158,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id,"},{"line_number":159,"context_line":"                                         topic\u003dtenant_id,"},{"line_number":160,"context_line":"                                         name\u003dsg_name,"},{"line_number":161,"context_line":"                                         rules\u003drules,"},{"line_number":162,"context_line":"                                         version\u003dsg_version)"},{"line_number":163,"context_line":"        if event \u003d\u003d events.AFTER_CREATE:"},{"line_number":164,"context_line":"            self.nb_api.create(sg_obj)"},{"line_number":165,"context_line":"            LOG.info(_LI(\"DFMechDriver: create security group %s\"), sg_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_65f3070c","line":162,"range":{"start_line":158,"start_character":0,"end_line":162,"end_character":60},"in_reply_to":"1a1ced50_53ae592e","updated":"2017-03-27 08:39:48.000000000","message":"Changed","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6790832c7bf614adebb3ddececd81889770c4d50","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        context \u003d kwargs[\u0027context\u0027]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        sg \u003d self.core_plugin.get_security_group(context, sg_id)"},{"line_number":187,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id,"},{"line_number":188,"context_line":"                                         topic\u003dtenant_id,"},{"line_number":189,"context_line":"                                         name\u003dsg[\u0027name\u0027],"},{"line_number":190,"context_line":"                                         rules\u003dsg[\u0027security_group_rules\u0027],"},{"line_number":191,"context_line":"                                         version\u003dsg[\u0027revision_number\u0027])"},{"line_number":192,"context_line":"        self.nb_api.update(sg_obj)"},{"line_number":193,"context_line":"        LOG.info(_LI(\"DFMechDriver: create security group rule in group %s\"),"},{"line_number":194,"context_line":"                 sg_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_937b71bd","line":191,"range":{"start_line":187,"start_character":0,"end_line":191,"end_character":71},"updated":"2017-03-23 13:50:28.000000000","message":"Same here (security_group_from_neutron_obj)","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        context \u003d kwargs[\u0027context\u0027]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        sg \u003d self.core_plugin.get_security_group(context, sg_id)"},{"line_number":187,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id,"},{"line_number":188,"context_line":"                                         topic\u003dtenant_id,"},{"line_number":189,"context_line":"                                         name\u003dsg[\u0027name\u0027],"},{"line_number":190,"context_line":"                                         rules\u003dsg[\u0027security_group_rules\u0027],"},{"line_number":191,"context_line":"                                         version\u003dsg[\u0027revision_number\u0027])"},{"line_number":192,"context_line":"        self.nb_api.update(sg_obj)"},{"line_number":193,"context_line":"        LOG.info(_LI(\"DFMechDriver: create security group rule in group %s\"),"},{"line_number":194,"context_line":"                 sg_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_a5d34f38","line":191,"range":{"start_line":187,"start_character":0,"end_line":191,"end_character":71},"in_reply_to":"1a1ced50_937b71bd","updated":"2017-03-27 08:39:48.000000000","message":"Changed","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6790832c7bf614adebb3ddececd81889770c4d50","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        sg_id \u003d kwargs[\u0027security_group_id\u0027]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        sg \u003d self.core_plugin.get_security_group(context, sg_id)"},{"line_number":204,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id,"},{"line_number":205,"context_line":"                                         topic\u003dsg[\u0027tenant_id\u0027],"},{"line_number":206,"context_line":"                                         name\u003dsg[\u0027name\u0027],"},{"line_number":207,"context_line":"                                         rules\u003dsg[\u0027security_group_rules\u0027],"},{"line_number":208,"context_line":"                                         version\u003dsg[\u0027revision_number\u0027])"},{"line_number":209,"context_line":"        self.nb_api.update(sg_obj)"},{"line_number":210,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete security group rule %s\"), sgr_id)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_d34fa98f","line":208,"range":{"start_line":204,"start_character":0,"end_line":208,"end_character":71},"updated":"2017-03-23 13:50:28.000000000","message":"And here (security_group_from_neutron_obj)","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        sg_id \u003d kwargs[\u0027security_group_id\u0027]"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        sg \u003d self.core_plugin.get_security_group(context, sg_id)"},{"line_number":204,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id,"},{"line_number":205,"context_line":"                                         topic\u003dsg[\u0027tenant_id\u0027],"},{"line_number":206,"context_line":"                                         name\u003dsg[\u0027name\u0027],"},{"line_number":207,"context_line":"                                         rules\u003dsg[\u0027security_group_rules\u0027],"},{"line_number":208,"context_line":"                                         version\u003dsg[\u0027revision_number\u0027])"},{"line_number":209,"context_line":"        self.nb_api.update(sg_obj)"},{"line_number":210,"context_line":"        LOG.info(_LI(\"DFMechDriver: delete security group rule %s\"), sgr_id)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_85d60b27","line":208,"range":{"start_line":204,"start_character":0,"end_line":208,"end_character":71},"in_reply_to":"1a1ced50_d34fa98f","updated":"2017-03-27 08:39:48.000000000","message":"Changed","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":22060,"name":"jingting","email":"kangjingting@huawei.com","username":"jingting"},"change_message_id":"edce371243931a4d64e6bb73c10ae05af4f2995b","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        sg \u003d self.core_plugin.get_security_group(context, sg_id)"},{"line_number":180,"context_line":"        sg_obj \u003d neutron_secgroups.security_group_from_neutron_obj(sg)"},{"line_number":181,"context_line":"        sg_obj \u003d neutron_secgroups.security_group_from_neutron_obj(sg)"},{"line_number":182,"context_line":"        self.nb_api.update(sg_obj)"},{"line_number":183,"context_line":"        LOG.info(_LI(\"DFMechDriver: create security group rule in group %s\"),"},{"line_number":184,"context_line":"                 sg_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffe62b97_8a44cfb8","line":181,"range":{"start_line":181,"start_character":7,"end_line":181,"end_character":70},"updated":"2017-03-27 11:08:23.000000000","message":"repeated","commit_id":"cab1edaa5f9bcdf82c87b983f93c3ca622fc2115"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"cfe9b1b9745ee96a363ea48e37fddf949ecb9195","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        sg \u003d self.core_plugin.get_security_group(context, sg_id)"},{"line_number":180,"context_line":"        sg_obj \u003d neutron_secgroups.security_group_from_neutron_obj(sg)"},{"line_number":181,"context_line":"        sg_obj \u003d neutron_secgroups.security_group_from_neutron_obj(sg)"},{"line_number":182,"context_line":"        self.nb_api.update(sg_obj)"},{"line_number":183,"context_line":"        LOG.info(_LI(\"DFMechDriver: create security group rule in group %s\"),"},{"line_number":184,"context_line":"                 sg_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ffe62b97_ddb980e9","line":181,"range":{"start_line":181,"start_character":7,"end_line":181,"end_character":70},"in_reply_to":"ffe62b97_8a44cfb8","updated":"2017-03-27 12:16:57.000000000","message":"Will fix. Thanks!","commit_id":"cab1edaa5f9bcdf82c87b983f93c3ca622fc2115"}],"dragonflow/tests/fullstack/test_neutron_api.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6e40ee31add323128e7ad9a57f371455cfd92a60","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        version1 \u003d self.nb_api.get(secgroup_obj).version"},{"line_number":295,"context_line":"        secgroup.update()"},{"line_number":296,"context_line":"        self.assertTrue(secgroup.exists())"},{"line_number":297,"context_line":"        secgroup_obj \u003d secgroups.SecurityGroup(id\u003dsg_id)"},{"line_number":298,"context_line":"        version2 \u003d self.nb_api.get(secgroup_obj).version"},{"line_number":299,"context_line":"        self.assertNotEqual(version1, version2)"},{"line_number":300,"context_line":"        secgroup.close()"}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_fb28c634","line":297,"range":{"start_line":297,"start_character":0,"end_line":297,"end_character":56},"updated":"2017-04-26 11:34:02.000000000","message":"nit: Not strictly needed","commit_id":"239b3b858fa097820167e2bc6326e48d6b10a0a1"}],"dragonflow/tests/fullstack/test_object_version.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6e40ee31add323128e7ad9a57f371455cfd92a60","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        secrule_id \u003d secgroup.rule_create()"},{"line_number":124,"context_line":"        self.assertTrue(secgroup.rule_exists(secrule_id))"},{"line_number":125,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id)"},{"line_number":126,"context_line":"        new_version \u003d self.nb_api.get(sg_obj).version"},{"line_number":127,"context_line":"        self.assertGreater(new_version, version)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_db2bca2d","line":125,"range":{"start_line":125,"start_character":0,"end_line":125,"end_character":50},"updated":"2017-04-26 11:34:02.000000000","message":"nit: Not strictly needed","commit_id":"239b3b858fa097820167e2bc6326e48d6b10a0a1"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6e40ee31add323128e7ad9a57f371455cfd92a60","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        secgroup.rule_delete(secrule_id)"},{"line_number":130,"context_line":"        self.assertFalse(secgroup.rule_exists(secrule_id))"},{"line_number":131,"context_line":"        version \u003d new_version"},{"line_number":132,"context_line":"        sg_obj \u003d secgroups.SecurityGroup(id\u003dsg_id)"},{"line_number":133,"context_line":"        new_version \u003d self.nb_api.get(sg_obj).version"},{"line_number":134,"context_line":"        self.assertGreater(new_version, version)"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5ff73747_5b17baee","line":132,"range":{"start_line":132,"start_character":0,"end_line":132,"end_character":50},"updated":"2017-04-26 11:34:02.000000000","message":"Same here","commit_id":"239b3b858fa097820167e2bc6326e48d6b10a0a1"}],"dragonflow/tests/unit/test_df_local_controller.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"6790832c7bf614adebb3ddececd81889770c4d50","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    apps_list \u003d \"l2_app.L2App\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _get_mock_secgroup(self, secgroup_id, rules):"},{"line_number":29,"context_line":"        secgroup \u003d mock.Mock()"},{"line_number":30,"context_line":"        secgroup.get_rules.return_value \u003d rules"},{"line_number":31,"context_line":"        secgroup.get_id.return_value \u003d secgroup_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_ee075c15","side":"PARENT","line":28,"updated":"2017-03-23 13:50:28.000000000","message":"Are these tests now relevant to sg_app, since that\u0027s where this code moved?","commit_id":"5c593b94947c257c6f9b5353c8f8124f52576845"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    apps_list \u003d \"l2_app.L2App\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def _get_mock_secgroup(self, secgroup_id, rules):"},{"line_number":29,"context_line":"        secgroup \u003d mock.Mock()"},{"line_number":30,"context_line":"        secgroup.get_rules.return_value \u003d rules"},{"line_number":31,"context_line":"        secgroup.get_id.return_value \u003d secgroup_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_a5dd8f15","side":"PARENT","line":28,"in_reply_to":"1a1ced50_ee075c15","updated":"2017-03-27 08:39:48.000000000","message":"sg_app already tests adding and removing secgroups and rules","commit_id":"5c593b94947c257c6f9b5353c8f8124f52576845"}],"dragonflow/tests/unit/test_df_qos_notification_driver.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"a10e96c1fbe860d48c253d1d9873e42e38be8197","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            network_id \u003d n[\u0027network\u0027][\u0027id\u0027]"},{"line_number":114,"context_line":"            self.assertTrue(nb_api.create.called)"},{"line_number":115,"context_line":"            # Excepted call order for nb_api.create:"},{"line_number":116,"context_line":"            # QosPolicy, SecuiryGroup, LogicalSwitch."},{"line_number":117,"context_line":"            # Expected index for LogicalSwitch is 2."},{"line_number":118,"context_line":"            called_args \u003d nb_api.create.call_args_list[2][0][0]"},{"line_number":119,"context_line":"            self.assertEqual(qos_obj[\u0027id\u0027], called_args.qos_policy.id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_9fb7ced9","line":116,"range":{"start_line":116,"start_character":24,"end_line":116,"end_character":37},"updated":"2017-04-23 11:24:25.000000000","message":"SecurityGroup","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"214f95c5da11000c0b94c45be2f18f4ac557a23a","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            network_id \u003d n[\u0027network\u0027][\u0027id\u0027]"},{"line_number":114,"context_line":"            self.assertTrue(nb_api.create.called)"},{"line_number":115,"context_line":"            # Excepted call order for nb_api.create:"},{"line_number":116,"context_line":"            # QosPolicy, SecuiryGroup, LogicalSwitch."},{"line_number":117,"context_line":"            # Expected index for LogicalSwitch is 2."},{"line_number":118,"context_line":"            called_args \u003d nb_api.create.call_args_list[2][0][0]"},{"line_number":119,"context_line":"            self.assertEqual(qos_obj[\u0027id\u0027], called_args.qos_policy.id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"5ff73747_5f749d99","line":116,"range":{"start_line":116,"start_character":24,"end_line":116,"end_character":37},"in_reply_to":"5ff73747_9fb7ced9","updated":"2017-04-24 08:25:05.000000000","message":"Will fix. Thanks","commit_id":"413bcd9b285e0807c9a095e8bbb62d3d71dae1f2"}],"dragonflow/tests/unit/test_mech_driver.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"3eb122f63dfeb05b8ff034c90fe73e6f3c5ae8e0","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from dragonflow.db.models import l2"},{"line_number":25,"context_line":"from dragonflow.db.models import secgroups"},{"line_number":26,"context_line":"from dragonflow.neutron.db.models import l2 as neutron_l2"},{"line_number":27,"context_line":"from dragonflow.neutron.db.models import secgroups as neutron_secgroups"},{"line_number":28,"context_line":"from dragonflow.tests.common import utils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_d55d3f48","line":27,"range":{"start_line":27,"start_character":17,"end_line":27,"end_character":50},"updated":"2017-03-21 11:28:37.000000000","message":"This file is missing","commit_id":"8dfa1937763844431694048e314ad4082b2b9f5d"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"ecd0aee5bf6e526165afbd7f00ababa07c915630","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from dragonflow.db.models import l2"},{"line_number":25,"context_line":"from dragonflow.db.models import secgroups"},{"line_number":26,"context_line":"from dragonflow.neutron.db.models import l2 as neutron_l2"},{"line_number":27,"context_line":"from dragonflow.neutron.db.models import secgroups as neutron_secgroups"},{"line_number":28,"context_line":"from dragonflow.tests.common import utils"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a1ced50_126a5fee","line":27,"range":{"start_line":27,"start_character":17,"end_line":27,"end_character":50},"in_reply_to":"1a1ced50_d55d3f48","updated":"2017-03-22 08:39:59.000000000","message":"Forgot to add it. Thanks :)","commit_id":"8dfa1937763844431694048e314ad4082b2b9f5d"}],"dragonflow/tests/unit/test_sg_app.py":[{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"df0160226e266c0c6158b244de46a2af29fa25c0","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _get_another_security_group(self):"},{"line_number":74,"context_line":"        fake_security_group \u003d secgroups.SecurityGroup("},{"line_number":75,"context_line":"            description\u003d\"\","},{"line_number":76,"context_line":"            name\u003d\"fake_security_group\","},{"line_number":77,"context_line":"            topic\u003d\"fake_tenant1\","},{"line_number":78,"context_line":"            version\u003d5,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_7747b84b","line":75,"range":{"start_line":75,"start_character":12,"end_line":75,"end_character":27},"updated":"2017-03-23 16:25:00.000000000","message":"Not a field of SecurityGroup model","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def _get_another_security_group(self):"},{"line_number":74,"context_line":"        fake_security_group \u003d secgroups.SecurityGroup("},{"line_number":75,"context_line":"            description\u003d\"\","},{"line_number":76,"context_line":"            name\u003d\"fake_security_group\","},{"line_number":77,"context_line":"            topic\u003d\"fake_tenant1\","},{"line_number":78,"context_line":"            version\u003d5,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_253f3f26","line":75,"range":{"start_line":75,"start_character":12,"end_line":75,"end_character":27},"in_reply_to":"1a1ced50_7747b84b","updated":"2017-03-27 08:39:48.000000000","message":"Added to the model","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"df0160226e266c0c6158b244de46a2af29fa25c0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                    direction\u003d\"egress\","},{"line_number":83,"context_line":"                    security_group_id\u003d\"fake_security_group_id2\","},{"line_number":84,"context_line":"                    ethertype\u003d\"IPv4\","},{"line_number":85,"context_line":"                    topic\u003d\"fake_tenant1\","},{"line_number":86,"context_line":"                    protocol\u003d\"tcp\","},{"line_number":87,"context_line":"                    port_range_max\u003dNone,"},{"line_number":88,"context_line":"                    port_range_min\u003dNone,"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a1ced50_b79e90b6","line":85,"range":{"start_line":85,"start_character":20,"end_line":85,"end_character":41},"updated":"2017-03-23 16:25:00.000000000","message":"Maybe we need to add mixins.Topic to SecurityGroupRule","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"55aae3737cdf91ef0620ef5e34d5044fa7879a7d","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                    direction\u003d\"egress\","},{"line_number":83,"context_line":"                    security_group_id\u003d\"fake_security_group_id2\","},{"line_number":84,"context_line":"                    ethertype\u003d\"IPv4\","},{"line_number":85,"context_line":"                    topic\u003d\"fake_tenant1\","},{"line_number":86,"context_line":"                    protocol\u003d\"tcp\","},{"line_number":87,"context_line":"                    port_range_max\u003dNone,"},{"line_number":88,"context_line":"                    port_range_min\u003dNone,"}],"source_content_type":"text/x-python","patch_set":9,"id":"ffe62b97_c571b30e","line":85,"range":{"start_line":85,"start_character":20,"end_line":85,"end_character":41},"in_reply_to":"1a1ced50_b79e90b6","updated":"2017-03-27 08:39:48.000000000","message":"Done","commit_id":"793470a4e1300fad915e61e968a13d1f273d12d9"}]}
