)]}'
{"dragonflow/controller/df_local_controller.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"5dc997d98745ff606b4919e195fb95e89c95591c","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        if old_chassis is None:"},{"line_number":415,"context_line":"            self.nb_api.create(chassis)"},{"line_number":416,"context_line":"        else:"},{"line_number":417,"context_line":"            self.nb_api.update(chassis)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def create_tunnels(self):"},{"line_number":420,"context_line":"        tunnel_ports \u003d self.vswitch_api.get_virtual_tunnel_ports()"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_845da8ee","line":417,"range":{"start_line":416,"start_character":0,"end_line":417,"end_character":39},"updated":"2017-01-10 08:45:21.000000000","message":"There\u0027s a missing optimisation here: If old_chassis exists, and old_chassis \u003d\u003d new_chassis, there is no need for an update.","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"37006ad9f8dad1f271bd4e1253efa10ae3bd3c2e","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        if old_chassis is None:"},{"line_number":415,"context_line":"            self.nb_api.create(chassis)"},{"line_number":416,"context_line":"        else:"},{"line_number":417,"context_line":"            self.nb_api.update(chassis)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def create_tunnels(self):"},{"line_number":420,"context_line":"        tunnel_ports \u003d self.vswitch_api.get_virtual_tunnel_ports()"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_0ee8e77b","line":417,"range":{"start_line":416,"start_character":0,"end_line":417,"end_character":39},"in_reply_to":"ba5201f7_485f4e0e","updated":"2017-01-10 13:35:26.000000000","message":"This method can be refactored, but I think its better to keep model related changes and refactoring apart.","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"344e19b35b0930e5f8597bb724b01a9473dfc911","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        if old_chassis is None:"},{"line_number":415,"context_line":"            self.nb_api.create(chassis)"},{"line_number":416,"context_line":"        else:"},{"line_number":417,"context_line":"            self.nb_api.update(chassis)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    def create_tunnels(self):"},{"line_number":420,"context_line":"        tunnel_ports \u003d self.vswitch_api.get_virtual_tunnel_ports()"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_485f4e0e","line":417,"range":{"start_line":416,"start_character":0,"end_line":417,"end_character":39},"in_reply_to":"ba5201f7_845da8ee","updated":"2017-01-10 10:31:00.000000000","message":"You\u0027re right, I\u0027ll put it back in.\n\nMaybe we can add it inside CRUD helper to check upon update if anything changes and notify selectively...","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ea41b3b78f3748669710152a952bee9d11591248","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            LOG.exception(e)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def update_chassis(self, chassis):"},{"line_number":158,"context_line":"        self.db_store2.update(chassis)"},{"line_number":159,"context_line":"        remote_chassis_name \u003d chassis.id"},{"line_number":160,"context_line":"        if self.chassis_name \u003d\u003d remote_chassis_name:"},{"line_number":161,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_92071581","line":158,"updated":"2017-01-23 20:58:29.000000000","message":"I\u0027m guessing that in \u0027normal\u0027 models, this code is automated (Automatically passing to the apps)? I think I remember seeing something along those lines, but I can\u0027t find it now.","commit_id":"bdc8ee2f4551ad7c217d3052e298f422705cd5c4"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"a777ad01a0bfa1faad7abf921e7afd7ed6410fdc","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            LOG.exception(e)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def update_chassis(self, chassis):"},{"line_number":158,"context_line":"        self.db_store2.update(chassis)"},{"line_number":159,"context_line":"        remote_chassis_name \u003d chassis.id"},{"line_number":160,"context_line":"        if self.chassis_name \u003d\u003d remote_chassis_name:"},{"line_number":161,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a430d35_63a18fa9","line":158,"range":{"start_line":158,"start_character":0,"end_line":158,"end_character":38},"updated":"2017-02-04 20:47:54.000000000","message":"No response to comment from PS28:\n\n\u003e I\u0027m guessing that in \u0027normal\u0027 models, this code is automated (Automatically passing to the apps)? I think I remember seeing something along those lines, but I can\u0027t find it now.","commit_id":"bafe36e3cf81662e0ae2c9ef3c37d3747995d073"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"1c59b65093cfc228f5bb599338fa199461b9fd21","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            LOG.exception(e)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    def update_chassis(self, chassis):"},{"line_number":158,"context_line":"        self.db_store2.update(chassis)"},{"line_number":159,"context_line":"        remote_chassis_name \u003d chassis.id"},{"line_number":160,"context_line":"        if self.chassis_name \u003d\u003d remote_chassis_name:"},{"line_number":161,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":39,"id":"1a430d35_af5fd670","line":158,"range":{"start_line":158,"start_character":0,"end_line":158,"end_character":38},"in_reply_to":"1a430d35_63a18fa9","updated":"2017-02-05 06:53:20.000000000","message":"Yes, I\u0027ve added generic update/delete functions in a subsequent patch.\n\nhttps://review.openstack.org/#/c/425091/11/dragonflow/controller/df_local_controller.py\n\nIf(when) we decide to move the remote port update into an app we can switch to a generic function here.","commit_id":"bafe36e3cf81662e0ae2c9ef3c37d3747995d073"}],"dragonflow/db/api_nb.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"37006ad9f8dad1f271bd4e1253efa10ae3bd3c2e","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                                   sg_id, \u0027set\u0027, secgroup_json,"},{"line_number":336,"context_line":"                                   secgroup[\u0027topic\u0027])"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def get_chassis(self, id):"},{"line_number":339,"context_line":"        try:"},{"line_number":340,"context_line":"            chassis_value \u003d self.driver.get_key(db_models.Chassis.table_name,"},{"line_number":341,"context_line":"                                                id)"},{"line_number":342,"context_line":"            return db_models.Chassis(chassis_value)"},{"line_number":343,"context_line":"        except Exception:"},{"line_number":344,"context_line":"            return None"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    def get_lswitch(self, id, topic\u003dNone):"},{"line_number":347,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_2eb92b7a","line":344,"range":{"start_line":338,"start_character":3,"end_line":344,"end_character":23},"updated":"2017-01-10 13:35:26.000000000","message":"why this one is not removed?","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"}],"dragonflow/db/db_store.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"5dc997d98745ff606b4919e195fb95e89c95591c","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def __init__(self):"},{"line_number":94,"context_line":"        self.tenant_dbs \u003d collections.defaultdict(TenantDbStore)"},{"line_number":95,"context_line":"        self.chassis \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get(self, table_name, key, topic):"},{"line_number":98,"context_line":"        if topic:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_04f9b8c8","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":25},"updated":"2017-01-10 08:45:21.000000000","message":"Why was this left here?","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"344e19b35b0930e5f8597bb724b01a9473dfc911","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def __init__(self):"},{"line_number":94,"context_line":"        self.tenant_dbs \u003d collections.defaultdict(TenantDbStore)"},{"line_number":95,"context_line":"        self.chassis \u003d {}"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get(self, table_name, key, topic):"},{"line_number":98,"context_line":"        if topic:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_a8f27a04","line":95,"range":{"start_line":95,"start_character":0,"end_line":95,"end_character":25},"in_reply_to":"ba5201f7_04f9b8c8","updated":"2017-01-10 10:31:00.000000000","message":"Oops","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"5dc997d98745ff606b4919e195fb95e89c95591c","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    def delete_publisher(self, uuid, topic\u003dNone):"},{"line_number":333,"context_line":"        self.delete(models.Publisher.table_name, uuid, topic)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def get_chassis(self, chassis_id):"},{"line_number":336,"context_line":"        return self.chassis.get(chassis_id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def get_active_port(self, active_port_key, topic\u003dNone):"},{"line_number":339,"context_line":"        return self.get(models.AllowedAddressPairsActivePort.table_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_8404c8c6","line":336,"range":{"start_line":335,"start_character":0,"end_line":336,"end_character":43},"updated":"2017-01-10 08:45:21.000000000","message":"Why was this left here?","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"344e19b35b0930e5f8597bb724b01a9473dfc911","unresolved":false,"context_lines":[{"line_number":332,"context_line":"    def delete_publisher(self, uuid, topic\u003dNone):"},{"line_number":333,"context_line":"        self.delete(models.Publisher.table_name, uuid, topic)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def get_chassis(self, chassis_id):"},{"line_number":336,"context_line":"        return self.chassis.get(chassis_id)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def get_active_port(self, active_port_key, topic\u003dNone):"},{"line_number":339,"context_line":"        return self.get(models.AllowedAddressPairsActivePort.table_name,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_08ac66ec","line":336,"range":{"start_line":335,"start_character":0,"end_line":336,"end_character":43},"in_reply_to":"ba5201f7_8404c8c6","updated":"2017-01-10 10:31:00.000000000","message":"Oops","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"128f938e1b2f65318106f3c60c9efdcd83db14e8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.publishers \u003d {}"},{"line_number":36,"context_line":"        self.qos_policies \u003d {}"},{"line_number":37,"context_line":"        self.activeports \u003d {}"},{"line_number":38,"context_line":"        self.chassis \u003d {}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.lock \u003d threading.Lock()"},{"line_number":41,"context_line":"        self._table_name_mapping \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_317891c4","line":38,"updated":"2017-01-16 07:34:49.000000000","message":"Why chassis is under Tenant DB store?","commit_id":"aea5d158bf67d7e0b967cb3e789345904b441c80"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"33a6b0dbcbf2223d43b9119053d6bf26e5372a5e","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.publishers \u003d {}"},{"line_number":36,"context_line":"        self.qos_policies \u003d {}"},{"line_number":37,"context_line":"        self.activeports \u003d {}"},{"line_number":38,"context_line":"        self.chassis \u003d {}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.lock \u003d threading.Lock()"},{"line_number":41,"context_line":"        self._table_name_mapping \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_4ff49486","line":38,"in_reply_to":"7a3c09a3_317891c4","updated":"2017-01-16 08:25:12.000000000","message":"This makes sure we can treat Chassis as the rest of the models, since all Chassis have topic \u003d None, All chassis are places into a single TenantDbStore.","commit_id":"aea5d158bf67d7e0b967cb3e789345904b441c80"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"99816a89f89920339cf9e771af48af8beefb10d2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.publishers \u003d {}"},{"line_number":36,"context_line":"        self.qos_policies \u003d {}"},{"line_number":37,"context_line":"        self.activeports \u003d {}"},{"line_number":38,"context_line":"        self.chassis \u003d {}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.lock \u003d threading.Lock()"},{"line_number":41,"context_line":"        self._table_name_mapping \u003d {"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_103e28b8","line":38,"in_reply_to":"7a3c09a3_4ff49486","updated":"2017-01-16 10:09:50.000000000","message":"Ok. Just naming convention seems very confusing","commit_id":"aea5d158bf67d7e0b967cb3e789345904b441c80"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"3d56c93d65c002dd9676aec02fa31fbdb8aefc8d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.publishers \u003d {}"},{"line_number":36,"context_line":"        self.qos_policies \u003d {}"},{"line_number":37,"context_line":"        self.activeports \u003d {}"},{"line_number":38,"context_line":"        self.chassis \u003d {}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.lock \u003d threading.Lock()"},{"line_number":41,"context_line":"        self._table_name_mapping \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_b338c9f0","line":38,"updated":"2017-01-17 08:50:34.000000000","message":"please add comment explaining the motivation","commit_id":"74b6c405d4285bf2430c62661d0cad48cb9ee65f"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"186fa2ce49da2ce58a81505d7f6cef466de990f4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.publishers \u003d {}"},{"line_number":36,"context_line":"        self.qos_policies \u003d {}"},{"line_number":37,"context_line":"        self.activeports \u003d {}"},{"line_number":38,"context_line":"        self.chassis \u003d {}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        self.lock \u003d threading.Lock()"},{"line_number":41,"context_line":"        self._table_name_mapping \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"5a3905b3_2eb4e8f0","line":38,"in_reply_to":"7a3c09a3_b338c9f0","updated":"2017-01-19 13:50:45.000000000","message":"Dropped this in favor of separate db_store implementation","commit_id":"74b6c405d4285bf2430c62661d0cad48cb9ee65f"}],"dragonflow/db/models2.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"34ef22bdad94eae412091137af26ab41484a3958","unresolved":false,"context_lines":[{"line_number":39,"context_line":"@mf.construct_nb_db_model(nb_crud\u003dcrud.UniqueKeyNbApiCRUD)"},{"line_number":40,"context_line":"class NbDbUniqueKeyMixin(mf.ModelBase):"},{"line_number":41,"context_line":"    unique_key \u003d fields.IntField(required\u003dTrue)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"@mf.register_model"},{"line_number":45,"context_line":"@mf.construct_nb_db_model"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_62028d71","line":42,"updated":"2017-01-09 19:04:27.000000000","message":"better call this module modesV2","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"344e19b35b0930e5f8597bb724b01a9473dfc911","unresolved":false,"context_lines":[{"line_number":39,"context_line":"@mf.construct_nb_db_model(nb_crud\u003dcrud.UniqueKeyNbApiCRUD)"},{"line_number":40,"context_line":"class NbDbUniqueKeyMixin(mf.ModelBase):"},{"line_number":41,"context_line":"    unique_key \u003d fields.IntField(required\u003dTrue)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"@mf.register_model"},{"line_number":45,"context_line":"@mf.construct_nb_db_model"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_089386a4","line":42,"in_reply_to":"ba5201f7_62028d71","updated":"2017-01-10 10:31:00.000000000","message":"my plan was to move step by step from models to model2 (or v2) and once we\u0027re done rename and replace models2 to models.","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"3d97990be1a2362a1f94f97e3b43b976cd2e4d47","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    table_name \u003d \u0027chassis\u0027"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    ip \u003d df_fields.IpAddressField(required\u003dTrue)"},{"line_number":50,"context_line":"    tunnel_type \u003d df_fields.EnumField((\u0027vxlan\u0027, \u0027gre\u0027, \u0027geneve\u0027),"},{"line_number":51,"context_line":"                                      required\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_0516d2f0","line":50,"range":{"start_line":50,"start_character":39,"end_line":50,"end_character":63},"updated":"2017-01-11 11:32:11.000000000","message":"maybe worth to use constants","commit_id":"85477fd11fb49f9ae525d82ad3e012ce435a7502"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ea41b3b78f3748669710152a952bee9d11591248","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    table_name \u003d \u0027chassis\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    ip \u003d df_fields.IpAddressField(required\u003dTrue)"},{"line_number":61,"context_line":"    tunnel_types \u003d df_fields.EnumListField((\u0027vxlan\u0027, \u0027gre\u0027, \u0027geneve\u0027),"},{"line_number":62,"context_line":"                                           required\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5a3905b3_d2d0bdcb","line":61,"updated":"2017-01-23 20:58:29.000000000","message":"Missing STT.\n\nIn a future patch, we may want to make this dynamic if we want to add new supported tunnel types.","commit_id":"bdc8ee2f4551ad7c217d3052e298f422705cd5c4"},{"author":{"_account_id":20153,"name":"Duan Kebo","email":"duankebo@gmail.com"},"change_message_id":"f7036ddf137ef930ceea33976834ddb1e322b8f5","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@mf.register_model"},{"line_number":54,"context_line":"@mf.construct_nb_db_model"},{"line_number":55,"context_line":"class Chassis(mf.ModelBase, BasicEventsMixin):"},{"line_number":56,"context_line":"    table_name \u003d \u0027chassis\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    ip \u003d df_fields.IpAddressField(required\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa31d9ce_2270a90a","line":55,"range":{"start_line":55,"start_character":6,"end_line":55,"end_character":13},"updated":"2017-02-16 06:52:29.000000000","message":"Instead of putting all the class to this file, consider create one for each class, avoiding possible nonfiction and the file being too big.","commit_id":"6408736e609959d4020386e392015e179e8587ef"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"f5d445c30745c7c31406cf1fb76c6096b8bdc7d7","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"@mf.register_model"},{"line_number":54,"context_line":"@mf.construct_nb_db_model"},{"line_number":55,"context_line":"class Chassis(mf.ModelBase, BasicEventsMixin):"},{"line_number":56,"context_line":"    table_name \u003d \u0027chassis\u0027"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    ip \u003d df_fields.IpAddressField(required\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":47,"id":"fa31d9ce_de48778d","line":55,"range":{"start_line":55,"start_character":6,"end_line":55,"end_character":13},"in_reply_to":"fa31d9ce_2270a90a","updated":"2017-02-16 14:59:57.000000000","message":"Models will have to be broken up into different packages, e.g. Core (Chassis, network, port), L3 (FIPs, etc.), and Security (Security Groups, Rules).","commit_id":"6408736e609959d4020386e392015e179e8587ef"}],"dragonflow/tests/unit/test_app_base.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"5dc997d98745ff606b4919e195fb95e89c95591c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.controller import ryu_base_app"},{"line_number":21,"context_line":"from dragonflow.controller import topology"},{"line_number":22,"context_line":"from dragonflow.db import models as db_models"},{"line_number":23,"context_line":"from dragonflow.db import models2 as db_models2"},{"line_number":24,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_c4b33009","line":23,"range":{"start_line":23,"start_character":37,"end_line":23,"end_character":47},"updated":"2017-01-10 08:45:21.000000000","message":"I think this should be models (or models2, or modelsV2). The import ... as db_models was due to a module rename.","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"344e19b35b0930e5f8597bb724b01a9473dfc911","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from dragonflow.controller import ryu_base_app"},{"line_number":21,"context_line":"from dragonflow.controller import topology"},{"line_number":22,"context_line":"from dragonflow.db import models as db_models"},{"line_number":23,"context_line":"from dragonflow.db import models2 as db_models2"},{"line_number":24,"context_line":"from dragonflow.tests import base as tests_base"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_48002eab","line":23,"range":{"start_line":23,"start_character":37,"end_line":23,"end_character":47},"in_reply_to":"ba5201f7_c4b33009","updated":"2017-01-10 10:31:00.000000000","message":"As stated in another comment, T thought of mimicing everything I duplicate with 2 suffix then removing all the 2\u0027s at once. I makes things a bit easier once both are named the same.\n\nI don\u0027t mind renaming everything to models but that will come in a subsequent patch.","commit_id":"709928fc17e8ee12d47a9e8541fcc149ec595617"}],"dragonflow/tests/unit/test_db_store.py":[{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"7ba7b1c1bc47de7b9bf83bc9951408f7fd9470f1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        tests_base.BaseTestCase.setUp(self)"},{"line_number":25,"context_line":"        self.db_store \u003d db_store.DbStore()"},{"line_number":26,"context_line":"        self.db_store2 \u003d db_store2.DbStore2()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def test_lswitch(self):"},{"line_number":29,"context_line":"        self.db_store.set_lswitch(\u0027id1\u0027, \u0027value1\u0027, \u0027topic1\u0027)"}],"source_content_type":"text/x-python","patch_set":61,"id":"da36d5c6_d43958a5","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":45},"updated":"2017-02-27 03:44:35.000000000","message":"Any chance to migrate the UT of chassis from old db_store to new db_store?","commit_id":"bf1344b27b03557789deb9a08aaa21510592bf0c"},{"author":{"_account_id":23766,"name":"Dima Kuznetsov","email":"dima.kuznetsov@toganetworks.com","username":"dimak"},"change_message_id":"10f0f397966aca1243af5b88dfb27253f38319a3","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    def setUp(self):"},{"line_number":24,"context_line":"        tests_base.BaseTestCase.setUp(self)"},{"line_number":25,"context_line":"        self.db_store \u003d db_store.DbStore()"},{"line_number":26,"context_line":"        self.db_store2 \u003d db_store2.DbStore2()"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def test_lswitch(self):"},{"line_number":29,"context_line":"        self.db_store.set_lswitch(\u0027id1\u0027, \u0027value1\u0027, \u0027topic1\u0027)"}],"source_content_type":"text/x-python","patch_set":61,"id":"da36d5c6_b9bf70ce","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":45},"in_reply_to":"da36d5c6_d43958a5","updated":"2017-02-27 12:45:58.000000000","message":"I\u0027ve done this in one of the first patchsets but I don\u0027t think it tests much. It made sense in the old DbStore since each model had its own code but now we\u0027re testing DbStore2 with a set of dedicated objects so I don\u0027t see much sense in testing it again with Chassis object.\n\nThis like has to go though, I\u0027ll get rid of it next time I submit.","commit_id":"bf1344b27b03557789deb9a08aaa21510592bf0c"}]}
