)]}'
{"dragonflow/db/api_nb.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"3928f2c1eab138cba427519081bdb11e34ca85ed","unresolved":false,"context_lines":[{"line_number":888,"context_line":"    def __init__(self, value):"},{"line_number":889,"context_line":"        self.secgroup \u003d jsonutils.loads(value)"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    @property"},{"line_number":892,"context_line":"    def name(self):"},{"line_number":893,"context_line":"        return self.secgroup.get(\u0027name\u0027)"},{"line_number":894,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_a99288f4","side":"PARENT","line":891,"range":{"start_line":891,"start_character":4,"end_line":891,"end_character":13},"updated":"2016-05-12 10:51:07.000000000","message":"Why not keep it? Actually I prefer property to get_XXX().","commit_id":"69f941f0a8a6f80f545674d0459b0a058590577f"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"3928f2c1eab138cba427519081bdb11e34ca85ed","unresolved":false,"context_lines":[{"line_number":690,"context_line":"    def __init__(self, value):"},{"line_number":691,"context_line":"        self.chassis \u003d jsonutils.loads(value)"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"    def get_id(self):"},{"line_number":694,"context_line":"        return self.chassis[\u0027id\u0027]"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"    def get_ip(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_89e1849d","line":693,"range":{"start_line":693,"start_character":4,"end_line":693,"end_character":21},"updated":"2016-05-12 10:51:07.000000000","message":"We can leave get_name there. Do not need to remove it.","commit_id":"a77fa394d68171bb4ea63f5670522b97439bee61"},{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"9b76b3869b54498d077c82bf18f71bee5de0941d","unresolved":false,"context_lines":[{"line_number":948,"context_line":"        return self.secrule[\u0027security_group_id\u0027]"},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"    def __eq__(self, other):"},{"line_number":951,"context_line":"        return self.id \u003d\u003d other.id"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def __str__(self):"},{"line_number":954,"context_line":"        return self.secrule.__str__()"}],"source_content_type":"text/x-python","patch_set":3,"id":"dab17558_935af328","line":951,"range":{"start_line":951,"start_character":8,"end_line":951,"end_character":34},"updated":"2016-05-14 02:59:44.000000000","message":"ERROR dragonflow.controller.df_local_controller [-] \u0027SecurityGroupRule\u0027 object has no attribute \u0027id\u0027\nERROR dragonflow.controller.df_local_controller Traceback (most recent call last):\nERROR dragonflow.controller.df_local_controller   File \"/opt/stack/new/dragonflow/dragonflow/controller/df_local_controller.py\", line 127, in run_db_poll\nERROR dragonflow.controller.df_local_controller     self.read_security_groups()\nERROR dragonflow.controller.df_local_controller   File \"/opt/stack/new/dragonflow/dragonflow/controller/df_local_controller.py\", line 399, in read_security_groups\nERROR dragonflow.controller.df_local_controller     self.security_group_updated(secgroup)\nERROR dragonflow.controller.df_local_controller   File \"/opt/stack/new/dragonflow/dragonflow/controller/df_local_controller.py\", line 297, in security_group_updated\nERROR dragonflow.controller.df_local_controller     self._update_security_group_rules(old_secgroup, secgroup)\nERROR dragonflow.controller.df_local_controller   File \"/opt/stack/new/dragonflow/dragonflow/controller/df_local_controller.py\", line 410, in _update_security_group_rules\nERROR dragonflow.controller.df_local_controller     if new_rule not in old_secgroup_rules:\nERROR dragonflow.controller.df_local_controller   File \"/opt/stack/new/dragonflow/dragonflow/db/api_nb.py\", line 951, in __eq__\nERROR dragonflow.controller.df_local_controller     return self.id \u003d\u003d other.id\nERROR dragonflow.controller.df_local_controller AttributeError: \u0027SecurityGroupRule\u0027 object has no attribute \u0027id\u0027","commit_id":"92b57512a1f2b2bf6ad3b7d74990a3447ce32501"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b31798432a33a4544323b4569a134672a9bf6f91","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        self._send_db_change_event(\u0027lswitch\u0027, lswitch_id, \u0027set\u0027,"},{"line_number":413,"context_line":"                                   lswitch_json, lswitch[\u0027topic\u0027])"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def get_logical_port(self, port_id, topic\u003dNone):"},{"line_number":416,"context_line":"        try:"},{"line_number":417,"context_line":"            port_value \u003d self.driver.get_key(\u0027lport\u0027, port_id, topic)"},{"line_number":418,"context_line":"            return LogicalPort(port_value)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_c2ea8b73","line":415,"range":{"start_line":415,"start_character":31,"end_line":415,"end_character":38},"updated":"2016-05-22 11:08:14.000000000","message":"Consider renaming to id (In a different patch).","commit_id":"5470713beb99f6935288a6e73d2b3f9b34bf8f10"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"5b348a4a3f4accfe0451a86e42fdca01a66b16e7","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        self._send_db_change_event(\u0027lswitch\u0027, lswitch_id, \u0027set\u0027,"},{"line_number":413,"context_line":"                                   lswitch_json, lswitch[\u0027topic\u0027])"},{"line_number":414,"context_line":""},{"line_number":415,"context_line":"    def get_logical_port(self, port_id, topic\u003dNone):"},{"line_number":416,"context_line":"        try:"},{"line_number":417,"context_line":"            port_value \u003d self.driver.get_key(\u0027lport\u0027, port_id, topic)"},{"line_number":418,"context_line":"            return LogicalPort(port_value)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_849b6b17","line":415,"range":{"start_line":415,"start_character":31,"end_line":415,"end_character":38},"in_reply_to":"bab6814e_c2ea8b73","updated":"2016-05-23 02:31:54.000000000","message":"ok","commit_id":"5470713beb99f6935288a6e73d2b3f9b34bf8f10"}],"dragonflow/neutron/common/constants.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"c7295052eafb3d72d45f8af861efaeed90e9d7e8","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from neutron.extensions import portbindings"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DF_SG_DEFAULT_NAME \u003d \u0027no_sg_name\u0027"},{"line_number":16,"context_line":"DF_SUBNET_DEFAULT_NAME \u003d \u0027no_subnet_name\u0027"},{"line_number":17,"context_line":"DF_NETWORK_DEFAULT_NAME \u003d \u0027no_network_name\u0027"},{"line_number":18,"context_line":"DF_PORT_DEFAULT_NAME \u003d \u0027no_port_name\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_e6ccf16b","line":15,"range":{"start_line":15,"start_character":22,"end_line":15,"end_character":24},"updated":"2016-05-17 12:24:20.000000000","message":"what does no stand for ?","commit_id":"ce5d6d5223828790d7686f45c4815ae1518d351e"},{"author":{"_account_id":20287,"name":"hujie","email":"mike.hu@huawei.com","username":"hujie"},"change_message_id":"014ea069282712c06f9bc040fae797f5d2e9bdb8","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"from neutron.extensions import portbindings"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"DF_SG_DEFAULT_NAME \u003d \u0027no_sg_name\u0027"},{"line_number":16,"context_line":"DF_SUBNET_DEFAULT_NAME \u003d \u0027no_subnet_name\u0027"},{"line_number":17,"context_line":"DF_NETWORK_DEFAULT_NAME \u003d \u0027no_network_name\u0027"},{"line_number":18,"context_line":"DF_PORT_DEFAULT_NAME \u003d \u0027no_port_name\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_e915e23f","line":15,"range":{"start_line":15,"start_character":22,"end_line":15,"end_character":24},"in_reply_to":"dab17558_e6ccf16b","updated":"2016-05-17 12:26:28.000000000","message":"If the name attribute is empty for the object, we fill the name of the object with the default name no_xxx_name :)","commit_id":"ce5d6d5223828790d7686f45c4815ae1518d351e"}],"dragonflow/neutron/plugin.py":[{"author":{"_account_id":7805,"name":"Li Ma","email":"skywalker.nick@gmail.com","username":"Nick"},"change_message_id":"551776152c8131c91c142cc2166394a9f2e1cd0e","unresolved":false,"context_lines":[{"line_number":205,"context_line":"                          self).create_security_group(context, security_group,"},{"line_number":206,"context_line":"                                                      default_sg)"},{"line_number":207,"context_line":"        sg_id \u003d sg_db[\u0027id\u0027]"},{"line_number":208,"context_line":"        sg_name \u003d sg_db.get(\u0027name\u0027, \u0027no_sg_name\u0027)"},{"line_number":209,"context_line":"        tenant_id \u003d sg_db[\u0027tenant_id\u0027]"},{"line_number":210,"context_line":"        rules \u003d sg_db.get(\u0027security_group_rules\u0027)"},{"line_number":211,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_c429b38b","line":208,"range":{"start_line":208,"start_character":36,"end_line":208,"end_character":48},"updated":"2016-05-12 10:53:46.000000000","message":"Could we use a constant instead?","commit_id":"a77fa394d68171bb4ea63f5670522b97439bee61"}]}
