)]}'
{"dragonflow/tests/common/app_testing_objects.py":[{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"beb69a0a88445eff681ec242cb8b247a98f37b38","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from dragonflow.common.utils import DFDaemon"},{"line_number":24,"context_line":"from dragonflow.tests.fullstack import test_objects as objects"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from neutron.agent.common import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from oslo_log import log"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_62907d96","line":26,"updated":"2016-02-10 08:08:11.000000000","message":"we dont really enforce it good enough in other files, but generally you want oslo imports above neutron and dragonflow and neutron imports above dragonflow","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0bb8bdb0abc837f87f59bc6ca578b6f788ef41","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from dragonflow.common.utils import DFDaemon"},{"line_number":24,"context_line":"from dragonflow.tests.fullstack import test_objects as objects"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from neutron.agent.common import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from oslo_log import log"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_e8a3ef9c","line":26,"in_reply_to":"3a57f1b5_62907d96","updated":"2016-02-10 08:40:56.000000000","message":"Done.\nPerhaps this should be added to pep8 (or an extension of it), since in pep8 the imports order is verified (that they are in alphabetical order.)","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"beb69a0a88445eff681ec242cb8b247a98f37b38","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# NOTE(oanson) This function also exists in nova. However, to save the time it"},{"line_number":34,"context_line":"# takes to install nova in the tests, for this one lousy function, I copied it"},{"line_number":35,"context_line":"# here."},{"line_number":36,"context_line":"def create_tap_dev(dev, mac_address\u003dNone):"},{"line_number":37,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_22828553","line":34,"updated":"2016-02-10 08:08:11.000000000","message":"i would drop this comment... ;)","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0bb8bdb0abc837f87f59bc6ca578b6f788ef41","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# NOTE(oanson) This function also exists in nova. However, to save the time it"},{"line_number":34,"context_line":"# takes to install nova in the tests, for this one lousy function, I copied it"},{"line_number":35,"context_line":"# here."},{"line_number":36,"context_line":"def create_tap_dev(dev, mac_address\u003dNone):"},{"line_number":37,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_c8c15330","line":34,"in_reply_to":"3a57f1b5_22828553","updated":"2016-02-10 08:40:56.000000000","message":"I disagree. This function is not mine, and I don\u0027t want to end up not giving credit where credit is due.","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"beb69a0a88445eff681ec242cb8b247a98f37b38","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.topology \u003d topology"},{"line_number":90,"context_line":"        self.subnet_id \u003d subnet_id"},{"line_number":91,"context_line":"        self.ports \u003d []"},{"line_number":92,"context_line":"        self.subnet \u003d objects.SubnetTestWrapper("},{"line_number":93,"context_line":"            self.topology.neutron,"},{"line_number":94,"context_line":"            self.topology.nb_api,"},{"line_number":95,"context_line":"            self.topology.network.network_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_225e05ea","line":92,"updated":"2016-02-10 08:08:11.000000000","message":"i am wondering why you needed to add these objects here as well if we already have these objects for the test wrapper, maybe we need to consider having one place with these objects that fit both cases (and we need to add the topology object there)\n\nI am not strongly against it, just wondering why you picked this route as it seems they are very logically identical","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0bb8bdb0abc837f87f59bc6ca578b6f788ef41","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.topology \u003d topology"},{"line_number":90,"context_line":"        self.subnet_id \u003d subnet_id"},{"line_number":91,"context_line":"        self.ports \u003d []"},{"line_number":92,"context_line":"        self.subnet \u003d objects.SubnetTestWrapper("},{"line_number":93,"context_line":"            self.topology.neutron,"},{"line_number":94,"context_line":"            self.topology.nb_api,"},{"line_number":95,"context_line":"            self.topology.network.network_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_88ccbb36","line":92,"in_reply_to":"3a57f1b5_225e05ea","updated":"2016-02-10 08:40:56.000000000","message":"One is a container of the other, and therefore not the same objects. We can modify the other classes to add the content here, but I see those classes as basic building blocks, and these classes as building on top of them.","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":11343,"name":"Gal Sagie","email":"gal.sagie@gmail.com","username":"GalSagie"},"change_message_id":"beb69a0a88445eff681ec242cb8b247a98f37b38","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        return \u0027tap{}\u0027.format(lport_name_prefix)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _connect_tap_device_to_vswitch(self, vswitch_name, tap_name):"},{"line_number":169,"context_line":"        full_args \u003d [\u0027ovs-vsctl\u0027, \u0027add-port\u0027, vswitch_name, tap_name]"},{"line_number":170,"context_line":"        utils.execute(full_args, run_as_root\u003dTrue, process_input\u003dNone)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _disconnect_tap_device_to_vswitch(self, vswitch_name, tap_name):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_02b0a9f3","line":169,"updated":"2016-02-10 08:08:11.000000000","message":"i am not sure how this works, Nova sets a special iface-id external id on the Interface that matches the Neutron port id.\n\nThis is how dragonflow makes the \"binding\" between Neutron id and OVS port, i dont see this here","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"7c0bb8bdb0abc837f87f59bc6ca578b6f788ef41","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        return \u0027tap{}\u0027.format(lport_name_prefix)"},{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    def _connect_tap_device_to_vswitch(self, vswitch_name, tap_name):"},{"line_number":169,"context_line":"        full_args \u003d [\u0027ovs-vsctl\u0027, \u0027add-port\u0027, vswitch_name, tap_name]"},{"line_number":170,"context_line":"        utils.execute(full_args, run_as_root\u003dTrue, process_input\u003dNone)"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    def _disconnect_tap_device_to_vswitch(self, vswitch_name, tap_name):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a57f1b5_a8817791","line":169,"in_reply_to":"3a57f1b5_02b0a9f3","updated":"2016-02-10 08:40:56.000000000","message":"The same logic is applied here. tap_name is generated with the correct interface name (tap+id). This is done in _get_tap_interface_name, and passed via the caller (_create_tap_device).","commit_id":"dea86f5f29011d85062c5b6792e2bdf21f93daff"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class LogicalPortTap(object):"},{"line_number":145,"context_line":"    def __init__(self, port):"},{"line_number":146,"context_line":"        # NOTE(oanson) port is Port above. and port.port is PortTestWrapper."},{"line_number":147,"context_line":"        self.port \u003d port"},{"line_number":148,"context_line":"        self.lport \u003d self.port.get_logical_port()"},{"line_number":149,"context_line":"        self.tap \u003d self._create_tap_device()"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_90bee2fd","line":146,"range":{"start_line":146,"start_character":10,"end_line":146,"end_character":14},"updated":"2016-02-14 08:44:35.000000000","message":"Please add proper doc string  function description \n\n:param port:    \n:type  port:       Port","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"class LogicalPortTap(object):"},{"line_number":145,"context_line":"    def __init__(self, port):"},{"line_number":146,"context_line":"        # NOTE(oanson) port is Port above. and port.port is PortTestWrapper."},{"line_number":147,"context_line":"        self.port \u003d port"},{"line_number":148,"context_line":"        self.lport \u003d self.port.get_logical_port()"},{"line_number":149,"context_line":"        self.tap \u003d self._create_tap_device()"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_83ca0c4e","line":146,"range":{"start_line":146,"start_character":10,"end_line":146,"end_character":14},"in_reply_to":"dae33548_90bee2fd","updated":"2016-02-15 06:24:59.000000000","message":"Done","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.port \u003d port"},{"line_number":148,"context_line":"        self.lport \u003d self.port.get_logical_port()"},{"line_number":149,"context_line":"        self.tap \u003d self._create_tap_device()"},{"line_number":150,"context_line":"        self.fileno \u003d self.tap.fileno()"},{"line_number":151,"context_line":"        self.is_blocking \u003d True"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _create_tap_device(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_b09fa6b3","line":150,"range":{"start_line":150,"start_character":9,"end_line":150,"end_character":39},"updated":"2016-02-14 08:44:35.000000000","message":"I am not sure i understand why you have the  \nself.fileno member but you get it on every request from the tap anyway","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        self.port \u003d port"},{"line_number":148,"context_line":"        self.lport \u003d self.port.get_logical_port()"},{"line_number":149,"context_line":"        self.tap \u003d self._create_tap_device()"},{"line_number":150,"context_line":"        self.fileno \u003d self.tap.fileno()"},{"line_number":151,"context_line":"        self.is_blocking \u003d True"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def _create_tap_device(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_63c70846","line":150,"range":{"start_line":150,"start_character":9,"end_line":150,"end_character":39},"in_reply_to":"dae33548_b09fa6b3","updated":"2016-02-15 06:24:59.000000000","message":"It was done to test if the tap device was closed prematurely. Will be removed.","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            buf \u003d self.tap.read(self.tap.mtu)"},{"line_number":200,"context_line":"        else:"},{"line_number":201,"context_line":"            fd \u003d self.tap.fileno()"},{"line_number":202,"context_line":"            if self.fileno !\u003d fd:"},{"line_number":203,"context_line":"                LOG.warning(_LW(\u0027Warning: Fileno has changed: {}-\u003e{}\u0027).format("},{"line_number":204,"context_line":"                    self.fileno,"},{"line_number":205,"context_line":"                    fd,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_50af3ae3","line":202,"range":{"start_line":202,"start_character":13,"end_line":202,"end_character":33},"updated":"2016-02-14 08:44:35.000000000","message":"What is the use case ?\nCan a tap change it\u0027s file descriptor ?","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            buf \u003d self.tap.read(self.tap.mtu)"},{"line_number":200,"context_line":"        else:"},{"line_number":201,"context_line":"            fd \u003d self.tap.fileno()"},{"line_number":202,"context_line":"            if self.fileno !\u003d fd:"},{"line_number":203,"context_line":"                LOG.warning(_LW(\u0027Warning: Fileno has changed: {}-\u003e{}\u0027).format("},{"line_number":204,"context_line":"                    self.fileno,"},{"line_number":205,"context_line":"                    fd,"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_03dd5c14","line":202,"range":{"start_line":202,"start_character":13,"end_line":202,"end_character":33},"in_reply_to":"dae33548_50af3ae3","updated":"2016-02-15 06:24:59.000000000","message":"See above. Will be removed.","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def set_blocking(self, is_blocking):"},{"line_number":214,"context_line":"        tap \u003d self.tap"},{"line_number":215,"context_line":"        fd \u003d tap.fileno()"},{"line_number":216,"context_line":"        flags \u003d fcntl.fcntl(fd, fcntl.F_GETFL)"},{"line_number":217,"context_line":"        if is_blocking:"},{"line_number":218,"context_line":"            flags |\u003d os.O_NONBLOCK"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_d0734ab3","line":215,"range":{"start_line":215,"start_character":7,"end_line":215,"end_character":25},"updated":"2016-02-14 08:44:35.000000000","message":"why not use the self.fileno","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def set_blocking(self, is_blocking):"},{"line_number":214,"context_line":"        tap \u003d self.tap"},{"line_number":215,"context_line":"        fd \u003d tap.fileno()"},{"line_number":216,"context_line":"        flags \u003d fcntl.fcntl(fd, fcntl.F_GETFL)"},{"line_number":217,"context_line":"        if is_blocking:"},{"line_number":218,"context_line":"            flags |\u003d os.O_NONBLOCK"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_23ece0c6","line":215,"range":{"start_line":215,"start_character":7,"end_line":215,"end_character":25},"in_reply_to":"dae33548_d0734ab3","updated":"2016-02-15 06:24:59.000000000","message":"See above. self.fileno be removed.","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"class Policy(object):"},{"line_number":247,"context_line":"    def __init__(self, initial_actions, port_policies, unknown_port_action):"},{"line_number":248,"context_line":"        self.initial_actions \u003d initial_actions"},{"line_number":249,"context_line":"        self.port_policies \u003d port_policies"},{"line_number":250,"context_line":"        self.unknown_port_action \u003d unknown_port_action"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_7bb69f3e","line":247,"range":{"start_line":247,"start_character":8,"end_line":247,"end_character":16},"updated":"2016-02-14 08:44:35.000000000","message":"Please add doc string for the parameters it is quit confusing \n\nThe relation of Policy PortPolicy and Policy rules","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"class Policy(object):"},{"line_number":247,"context_line":"    def __init__(self, initial_actions, port_policies, unknown_port_action):"},{"line_number":248,"context_line":"        self.initial_actions \u003d initial_actions"},{"line_number":249,"context_line":"        self.port_policies \u003d port_policies"},{"line_number":250,"context_line":"        self.unknown_port_action \u003d unknown_port_action"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_63cee85b","line":247,"range":{"start_line":247,"start_character":8,"end_line":247,"end_character":16},"in_reply_to":"dae33548_7bb69f3e","updated":"2016-02-15 06:24:59.000000000","message":"Done","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        self.stop()"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"class PortPolicy(object):"},{"line_number":307,"context_line":"    def __init__(self, rules, default_action):"},{"line_number":308,"context_line":"        self.rules \u003d rules"},{"line_number":309,"context_line":"        self.default_action \u003d default_action"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_bb866763","line":306,"range":{"start_line":306,"start_character":6,"end_line":306,"end_character":16},"updated":"2016-02-14 08:44:35.000000000","message":"ditto","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":303,"context_line":"        self.stop()"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"class PortPolicy(object):"},{"line_number":307,"context_line":"    def __init__(self, rules, default_action):"},{"line_number":308,"context_line":"        self.rules \u003d rules"},{"line_number":309,"context_line":"        self.default_action \u003d default_action"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_a3d8f01e","line":306,"range":{"start_line":306,"start_character":6,"end_line":306,"end_character":16},"in_reply_to":"dae33548_bb866763","updated":"2016-02-15 06:24:59.000000000","message":"Done","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        self.default_action(policy, None, port_thread, buf)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"class PortPolicyRule(object):"},{"line_number":319,"context_line":"    def __init__(self, packet_filter, actions):"},{"line_number":320,"context_line":"        self.packet_filter \u003d packet_filter"},{"line_number":321,"context_line":"        self.actions \u003d actions"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_1b7cb371","line":318,"range":{"start_line":318,"start_character":6,"end_line":318,"end_character":20},"updated":"2016-02-14 08:44:35.000000000","message":"ditto","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        self.default_action(policy, None, port_thread, buf)"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"class PortPolicyRule(object):"},{"line_number":319,"context_line":"    def __init__(self, packet_filter, actions):"},{"line_number":320,"context_line":"        self.packet_filter \u003d packet_filter"},{"line_number":321,"context_line":"        self.actions \u003d actions"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_03043c7c","line":318,"range":{"start_line":318,"start_character":6,"end_line":318,"end_character":20},"in_reply_to":"dae33548_1b7cb371","updated":"2016-02-15 06:24:59.000000000","message":"Done","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    def __init__(self, packet_filter, actions):"},{"line_number":320,"context_line":"        self.packet_filter \u003d packet_filter"},{"line_number":321,"context_line":"        self.actions \u003d actions"},{"line_number":322,"context_line":"        self.packet_filter \u003d packet_filter"},{"line_number":323,"context_line":"        self.disabled \u003d False"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def match_packet(self, buf):"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_bb03070d","line":322,"range":{"start_line":322,"start_character":8,"end_line":322,"end_character":42},"updated":"2016-02-14 08:44:35.000000000","message":"You have the same member twice","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"b6b5915fd83919c1bee975d89181cd8d0ffb25ca","unresolved":false,"context_lines":[{"line_number":319,"context_line":"    def __init__(self, packet_filter, actions):"},{"line_number":320,"context_line":"        self.packet_filter \u003d packet_filter"},{"line_number":321,"context_line":"        self.actions \u003d actions"},{"line_number":322,"context_line":"        self.packet_filter \u003d packet_filter"},{"line_number":323,"context_line":"        self.disabled \u003d False"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def match_packet(self, buf):"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_e3083894","line":322,"range":{"start_line":322,"start_character":8,"end_line":322,"end_character":42},"in_reply_to":"dae33548_bb03070d","updated":"2016-02-15 06:24:59.000000000","message":"Will remove duplicate.","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e3ffdf1fb4cf64d7cbbc6374bfd7a67c12175c71","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        \"\"\"Create a network. That\u0027s our playing field.\"\"\""},{"line_number":64,"context_line":"        self.neutron \u003d neutron"},{"line_number":65,"context_line":"        self.nb_api \u003d nb_api"},{"line_number":66,"context_line":"        self.network \u003d objects.NetworkTestWrapper(neutron, nb_api)"},{"line_number":67,"context_line":"        self.subnets \u003d []"},{"line_number":68,"context_line":"        self.routers \u003d []"},{"line_number":69,"context_line":"        self.network.create()"}],"source_content_type":"text/x-python","patch_set":8,"id":"dae33548_4ca023f5","line":66,"range":{"start_line":66,"start_character":31,"end_line":66,"end_character":49},"updated":"2016-02-15 13:06:27.000000000","message":"Please change to NetworkTestObj","commit_id":"28af8a431df1800fd3cca1f7402a9cea2ec8a7d6"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"950b07a6551690421775d4113e3f2e2bc21f00ac","unresolved":false,"context_lines":[{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def delete(self):"},{"line_number":313,"context_line":"        \"\"\"Delete this router.\"\"\""},{"line_number":314,"context_line":"        self.router.delete()"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"class Policy(object):"}],"source_content_type":"text/x-python","patch_set":9,"id":"dae33548_67ffd8aa","line":314,"range":{"start_line":314,"start_character":20,"end_line":314,"end_character":26},"updated":"2016-02-16 10:10:48.000000000","message":"Close ()","commit_id":"82e393bfa35b69b437e7eebf6a3a9491e2341de1"}],"dragonflow/tests/fullstack/test_apps.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"e1c4c4f05bad4ce3085063c6b84fa56194e66373","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            self.policy \u003d app_testing_objects.Policy("},{"line_number":117,"context_line":"                [send_arp_request],"},{"line_number":118,"context_line":"                port_policies,"},{"line_number":119,"context_line":"                ignore_action"},{"line_number":120,"context_line":"            )"},{"line_number":121,"context_line":"        except Exception:"},{"line_number":122,"context_line":"            if self.topology:"}],"source_content_type":"text/x-python","patch_set":7,"id":"dae33548_3b48972d","line":119,"range":{"start_line":119,"start_character":16,"end_line":119,"end_character":29},"updated":"2016-02-14 08:44:35.000000000","message":"I think it will be best to use the same terminologies in the example \n\nunknown_port_action vs  ignore_action","commit_id":"eedb3a84ec25551fddeca051567717e66ee23135"}]}
