)]}'
{"dragonflow/controller/df_base_app.py":[{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"d2896fc65dbf9852e68854a0d36690164c454820","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.api \u003d api"},{"line_number":29,"context_line":"        self.db_store \u003d db_store"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def getDatapath(self):"},{"line_number":32,"context_line":"        return self.api.datapath"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_0c31e059","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":7},"updated":"2016-01-26 01:15:34.000000000","message":"the name is not python style","commit_id":"14f53976b72558c7e830a1916fe98777260366ec"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ea6722f7f0c7a31b0f633cf5ce46286b8c82cdfa","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        self.api \u003d api"},{"line_number":29,"context_line":"        self.db_store \u003d db_store"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def getDatapath(self):"},{"line_number":32,"context_line":"        return self.api.datapath"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_fb9afc12","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":7},"in_reply_to":"9a68dd71_0c31e059","updated":"2016-01-26 05:18:16.000000000","message":"Done","commit_id":"14f53976b72558c7e830a1916fe98777260366ec"},{"author":{"_account_id":8976,"name":"shihanzhang","email":"ayshihanzhang@gmail.com","username":"shihanzhang"},"change_message_id":"d2896fc65dbf9852e68854a0d36690164c454820","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        return self.api.datapath"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @property"},{"line_number":35,"context_line":"    def dp(self):"},{"line_number":36,"context_line":"        # For backwards compatibility"},{"line_number":37,"context_line":"        return self.getDatapath()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_2c4864cb","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":10},"updated":"2016-01-26 01:15:34.000000000","message":"this name is too simple?","commit_id":"14f53976b72558c7e830a1916fe98777260366ec"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"ea6722f7f0c7a31b0f633cf5ce46286b8c82cdfa","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        return self.api.datapath"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @property"},{"line_number":35,"context_line":"    def dp(self):"},{"line_number":36,"context_line":"        # For backwards compatibility"},{"line_number":37,"context_line":"        return self.getDatapath()"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_1bfb5048","line":35,"range":{"start_line":35,"start_character":8,"end_line":35,"end_character":10},"in_reply_to":"9a68dd71_2c4864cb","updated":"2016-01-26 05:18:16.000000000","message":"This name is for backwards compatibility. It should be phased out. In any case, if I change it, I may as well remove it and change all references to get_datapath().","commit_id":"14f53976b72558c7e830a1916fe98777260366ec"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a085267105bd4d73418ccd2ffc4afab2396a9ec4","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        datapath.send_msg(out)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def send_port_desc_stats_request(self):"},{"line_number":105,"context_line":"        self._send_port_desc_stats_request(self.datapath)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def _send_port_desc_stats_request(self, datapath):"},{"line_number":108,"context_line":"        ofp_parser \u003d datapath.ofproto_parser"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_615f2d0f","line":105,"range":{"start_line":105,"start_character":48,"end_line":105,"end_character":56},"updated":"2016-01-27 13:40:29.000000000","message":"Shouldn\u0027t this be either:\n self.api.datapath or self.get_datapath()\n\nor maybe there is a 3rd way to get the datapath","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"}],"dragonflow/controller/dhcp_app.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"cce414c5515d9c225983ed7e99649df51ea555d4","unresolved":false,"context_lines":[{"line_number":417,"context_line":"            self.update_logical_switch(lswitch)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        for port in self.db_store.get_ports():"},{"line_number":420,"context_line":"            if port.get_external_value(\u0027is_local\u0027):"},{"line_number":421,"context_line":"                self.add_local_port(port)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _install_dhcp_unicast_match_flow(self, ip_addr, network_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_b7677d24","line":420,"updated":"2016-01-27 05:01:21.000000000","message":"not really sure this is needed like in the l2app, need to verify","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ae3267a98bbcd0d4443c8d501e12faf8aedd6b5","unresolved":false,"context_lines":[{"line_number":417,"context_line":"            self.update_logical_switch(lswitch)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        for port in self.db_store.get_ports():"},{"line_number":420,"context_line":"            if port.get_external_value(\u0027is_local\u0027):"},{"line_number":421,"context_line":"                self.add_local_port(port)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":"    def _install_dhcp_unicast_match_flow(self, ip_addr, network_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_a864fc48","line":420,"in_reply_to":"9a68dd71_b7677d24","updated":"2016-01-27 06:56:31.000000000","message":"The call itself looks necessary. I\u0027ll verify if it is called as in the l2app.","commit_id":"749a407f37ff9b5396290dab582e845c597df210"}],"dragonflow/controller/dispatcher.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"cce414c5515d9c225983ed7e99649df51ea555d4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            if handler is not None:"},{"line_number":45,"context_line":"                handler(*args, **kwargs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def wait_until_ready(self):"},{"line_number":48,"context_line":"        while not self.is_ready():"},{"line_number":49,"context_line":"            time.sleep(3)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_b7169da5","line":47,"updated":"2016-01-27 05:01:21.000000000","message":"I don\u0027t think this even called, its done in the upper layer and probably can remove it here","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ae3267a98bbcd0d4443c8d501e12faf8aedd6b5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            if handler is not None:"},{"line_number":45,"context_line":"                handler(*args, **kwargs)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def wait_until_ready(self):"},{"line_number":48,"context_line":"        while not self.is_ready():"},{"line_number":49,"context_line":"            time.sleep(3)"},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_c8f050cc","line":47,"in_reply_to":"9a68dd71_b7169da5","updated":"2016-01-27 06:56:31.000000000","message":"Done","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"cce414c5515d9c225983ed7e99649df51ea555d4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        while not self.is_ready():"},{"line_number":49,"context_line":"            time.sleep(3)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def is_ready(self):"},{"line_number":52,"context_line":"        for app in self.apps:"},{"line_number":53,"context_line":"            handler \u003d getattr(app, \u0027is_ready\u0027)"},{"line_number":54,"context_line":"            if handler is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_17268916","line":51,"updated":"2016-01-27 05:01:21.000000000","message":"I think we need to rethink about removing these, they were added when the applications were an actual Ryu applications (and then we waited until the data path element was set, but now its only happening once so we don\u0027t really need this)\n\nI think we can remove this also for now","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ae3267a98bbcd0d4443c8d501e12faf8aedd6b5","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        while not self.is_ready():"},{"line_number":49,"context_line":"            time.sleep(3)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def is_ready(self):"},{"line_number":52,"context_line":"        for app in self.apps:"},{"line_number":53,"context_line":"            handler \u003d getattr(app, \u0027is_ready\u0027)"},{"line_number":54,"context_line":"            if handler is not None:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_e8ed14f0","line":51,"in_reply_to":"9a68dd71_17268916","updated":"2016-01-27 06:56:31.000000000","message":"Done","commit_id":"749a407f37ff9b5396290dab582e845c597df210"}],"dragonflow/controller/l2_app.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"cce414c5515d9c225983ed7e99649df51ea555d4","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        # are installed correctly"},{"line_number":387,"context_line":"        self.local_networks.clear()"},{"line_number":388,"context_line":"        for port in self.db_store.get_ports():"},{"line_number":389,"context_line":"            if port.get_external_value(\u0027is_local\u0027):"},{"line_number":390,"context_line":"                self.add_local_port(port)"},{"line_number":391,"context_line":"            else:"},{"line_number":392,"context_line":"                self.add_remote_port(port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_1789a9ca","line":389,"updated":"2016-01-27 05:01:21.000000000","message":"I think we only need this for remote ports, as the port status message (in the base ryu class) will already call the add_local_port on switch up","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ae3267a98bbcd0d4443c8d501e12faf8aedd6b5","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        # are installed correctly"},{"line_number":387,"context_line":"        self.local_networks.clear()"},{"line_number":388,"context_line":"        for port in self.db_store.get_ports():"},{"line_number":389,"context_line":"            if port.get_external_value(\u0027is_local\u0027):"},{"line_number":390,"context_line":"                self.add_local_port(port)"},{"line_number":391,"context_line":"            else:"},{"line_number":392,"context_line":"                self.add_remote_port(port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_882a58e6","line":389,"in_reply_to":"9a68dd71_1789a9ca","updated":"2016-01-27 06:56:31.000000000","message":"I\u0027ll see if I can verify that. If that\u0027s the case, I\u0027ll remove the call to add_local_port.","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a085267105bd4d73418ccd2ffc4afab2396a9ec4","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        self.local_networks \u003d {}"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def switch_features_handler(self, ev):"},{"line_number":38,"context_line":"        self.add_flow_go_to_table(self.dp,"},{"line_number":39,"context_line":"                const.SERVICES_CLASSIFICATION_TABLE,"},{"line_number":40,"context_line":"                const.PRIORITY_DEFAULT,"},{"line_number":41,"context_line":"                const.L2_LOOKUP_TABLE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_a1920556","line":38,"range":{"start_line":38,"start_character":39,"end_line":38,"end_character":41},"updated":"2016-01-27 13:40:29.000000000","message":"If you already changed these lines you could have removed the deprecated (as you commented) use of self.dp","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a085267105bd4d73418ccd2ffc4afab2396a9ec4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                const.SERVICES_CLASSIFICATION_TABLE,"},{"line_number":40,"context_line":"                const.PRIORITY_DEFAULT,"},{"line_number":41,"context_line":"                const.L2_LOOKUP_TABLE)"},{"line_number":42,"context_line":"        self.add_flow_go_to_table(self.dp,"},{"line_number":43,"context_line":"                const.ARP_TABLE,"},{"line_number":44,"context_line":"                const.PRIORITY_DEFAULT,"},{"line_number":45,"context_line":"                const.L2_LOOKUP_TABLE)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_e19d5d5a","line":42,"range":{"start_line":42,"start_character":39,"end_line":42,"end_character":41},"updated":"2016-01-27 13:40:29.000000000","message":"ditto","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a085267105bd4d73418ccd2ffc4afab2396a9ec4","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        # ARP traffic \u003d\u003e send to ARP table"},{"line_number":48,"context_line":"        match \u003d self.dp.ofproto_parser.OFPMatch(eth_type\u003d0x0806)"},{"line_number":49,"context_line":"        self.add_flow_go_to_table(self.dp,"},{"line_number":50,"context_line":"                const.SERVICES_CLASSIFICATION_TABLE,"},{"line_number":51,"context_line":"                const.PRIORITY_MEDIUM,"},{"line_number":52,"context_line":"                const.ARP_TABLE, match\u003dmatch)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_8154a954","line":49,"range":{"start_line":49,"start_character":39,"end_line":49,"end_character":41},"updated":"2016-01-27 13:40:29.000000000","message":"ditto\n\n(this is what happens when you decide to add unrelated lines to your patches. They can become related!)","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"}],"dragonflow/controller/ryu_base_app.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"cce414c5515d9c225983ed7e99649df51ea555d4","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            LOG.info(_LI(\"port added %s\"), port_no)"},{"line_number":124,"context_line":"            lport \u003d self.db_store.get_local_port_by_name(port_name)"},{"line_number":125,"context_line":"            if lport:"},{"line_number":126,"context_line":"                lport.set_external_value(\u0027ofport\u0027, port_no)"},{"line_number":127,"context_line":"                self.notify_add_local_port(lport)"},{"line_number":128,"context_line":"        elif reason \u003d\u003d ofproto.OFPPR_DELETE:"},{"line_number":129,"context_line":"            LOG.info(_LI(\"port deleted %s\"), port_no)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_97035976","line":126,"updated":"2016-01-27 05:01:21.000000000","message":"Need to also add this:\nlport.set_external_value(\u0027is_local\u0027, True)\n\n(From Eran\u0027s patch)","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"0ae3267a98bbcd0d4443c8d501e12faf8aedd6b5","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            LOG.info(_LI(\"port added %s\"), port_no)"},{"line_number":124,"context_line":"            lport \u003d self.db_store.get_local_port_by_name(port_name)"},{"line_number":125,"context_line":"            if lport:"},{"line_number":126,"context_line":"                lport.set_external_value(\u0027ofport\u0027, port_no)"},{"line_number":127,"context_line":"                self.notify_add_local_port(lport)"},{"line_number":128,"context_line":"        elif reason \u003d\u003d ofproto.OFPPR_DELETE:"},{"line_number":129,"context_line":"            LOG.info(_LI(\"port deleted %s\"), port_no)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_48aa2087","line":126,"in_reply_to":"9a68dd71_97035976","updated":"2016-01-27 06:56:31.000000000","message":"Done","commit_id":"749a407f37ff9b5396290dab582e845c597df210"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"adceb827e10d1db7bb9fddfc986422a29b7b540d","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class RyuDFAdapter(OFPHandler):"},{"line_number":37,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":38,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, db_store\u003dNone):"},{"line_number":41,"context_line":"        super(RyuDFAdapter, self).__init__(db_store\u003ddb_store)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_660c2343","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":24},"updated":"2016-01-27 13:33:59.000000000","message":"I am not sure that RPC is the correct term, this is usually used from the MSQ RPC API","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a085267105bd4d73418ccd2ffc4afab2396a9ec4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        # TODO(oanson) is there a better way to get the datapath?"},{"line_number":107,"context_line":"        self._datapath \u003d ev.msg.datapath"},{"line_number":108,"context_line":"        super(RyuDFAdapter, self).switch_features_handler(ev)"},{"line_number":109,"context_line":"        if self.datapath.ofproto.OFP_VERSION \u003c 0x04:"},{"line_number":110,"context_line":"            # Otherwise, this is done automatically by OFPHandler"},{"line_number":111,"context_line":"            self.send_port_desc_stats_request(self.datapath)"},{"line_number":112,"context_line":"        self.dispatcher.dispatch(\u0027switch_features_handler\u0027, ev)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_5c1a1a70","line":109,"range":{"start_line":109,"start_character":47,"end_line":109,"end_character":51},"updated":"2016-01-27 13:40:29.000000000","message":"What is this? Maybe this should be a constant.","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"adceb827e10d1db7bb9fddfc986422a29b7b540d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                     % {\u0027port_no\u0027: port_no, \u0027reason\u0027: reason})"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    @set_ev_cls(ofp_event.EventOFPPortDescStatsReply, MAIN_DISPATCHER)"},{"line_number":143,"context_line":"    def port_desc_stats_reply_handler(self, ev):"},{"line_number":144,"context_line":"        pass"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_e1f79df3","line":143,"range":{"start_line":143,"start_character":8,"end_line":143,"end_character":37},"updated":"2016-01-27 13:33:59.000000000","message":"I think tat we should dispatch it even if it is not used at moment, If app want to use it it will simply add the func","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"35526bfc9a2be556f413148f943d4bde92c81f9c","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class RyuDFAdapter(OFPHandler):"},{"line_number":37,"context_line":"    OFP_VERSIONS \u003d [ofproto_v1_3.OFP_VERSION]"},{"line_number":38,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def __init__(self, db_store\u003dNone):"},{"line_number":41,"context_line":"        super(RyuDFAdapter, self).__init__(db_store\u003ddb_store)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_aef669d5","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":25},"updated":"2016-01-27 16:00:37.000000000","message":"This is not RPC see my last patch comment \nWhere do we use this version ? Is it enforced ?","commit_id":"e6727c31d208ecb6004e3d65cd34b8dc4577b4ac"}],"dragonflow/tests/unit/test_ryu_base_app.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a085267105bd4d73418ccd2ffc4afab2396a9ec4","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        self.mock_app.assert_has_calls(["},{"line_number":101,"context_line":"                mock.call.remove_local_port(lport\u003dlport)])"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        #TODO(oanson) Once notification is added, add update_local_port test"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_packet_in_handler(self):"},{"line_number":106,"context_line":"        self.mock_app.reset_mock()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a5de9d1_9ccbb272","line":103,"range":{"start_line":103,"start_character":22,"end_line":103,"end_character":76},"updated":"2016-01-27 13:40:29.000000000","message":"Is this comment in the method level or class level?","commit_id":"73c5dda3aad6cc908f27a17dbb9e24ed6d6a076d"}]}
