)]}'
{"neutron/db/portforwardings_db.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f3509d0681aaf1af8787f6b4f9a5b7aeb5ad6738","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import sqlalchemy as sa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutron.extensions import portforwardings as ext_portforwardings"},{"line_number":24,"context_line":"from neutron.db import model_base"},{"line_number":25,"context_line":"from neutron.db import models_v2"},{"line_number":26,"context_line":"from neutron.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHmQ%3D","line":23,"updated":"2013-12-02 12:19:04.000000000","message":"Ordering of this import should be after L25","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":7676,"name":"Jianing Yang","email":"jianingy.yang@gmail.com","username":"jianingy"},"change_message_id":"f9996d4bcb9d0ccb4dc76b02a25c7f05f3faf4fe","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import sqlalchemy as sa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from neutron.extensions import portforwardings as ext_portforwardings"},{"line_number":24,"context_line":"from neutron.db import model_base"},{"line_number":25,"context_line":"from neutron.db import models_v2"},{"line_number":26,"context_line":"from neutron.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHb8%3D","line":23,"in_reply_to":"AAAATn%2F%2BHmQ%3D","updated":"2013-12-02 12:51:31.000000000","message":"will fix this","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f3509d0681aaf1af8787f6b4f9a5b7aeb5ad6738","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class PortForwardingRule(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":32,"context_line":"    \"\"\"Internal representation of a port forwarding rule.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    outside_port \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":35,"context_line":"    inside_ip_address \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":36,"context_line":"    inside_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    protocol \u003d sa.Column(sa.String(4), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHmM%3D","line":34,"updated":"2013-12-02 12:19:04.000000000","message":"Integer?","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":7676,"name":"Jianing Yang","email":"jianingy.yang@gmail.com","username":"jianingy"},"change_message_id":"f9996d4bcb9d0ccb4dc76b02a25c7f05f3faf4fe","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class PortForwardingRule(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"},{"line_number":32,"context_line":"    \"\"\"Internal representation of a port forwarding rule.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    outside_port \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":35,"context_line":"    inside_ip_address \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":36,"context_line":"    inside_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    protocol \u003d sa.Column(sa.String(4), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHcQ%3D","line":34,"in_reply_to":"AAAATn%2F%2BHmM%3D","updated":"2013-12-02 12:51:31.000000000","message":"It should be integer. I will fix this","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f3509d0681aaf1af8787f6b4f9a5b7aeb5ad6738","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"Internal representation of a port forwarding rule.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    outside_port \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":35,"context_line":"    inside_ip_address \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":36,"context_line":"    inside_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    protocol \u003d sa.Column(sa.String(4), nullable\u003dFalse)"},{"line_number":38,"context_line":"    router_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027routers.id\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHlI%3D","line":35,"updated":"2013-12-02 12:19:04.000000000","message":"Is the intent only to support IPv4 addresses? Otherwise the string should be longer.","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":7676,"name":"Jianing Yang","email":"jianingy.yang@gmail.com","username":"jianingy"},"change_message_id":"f9996d4bcb9d0ccb4dc76b02a25c7f05f3faf4fe","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    \"\"\"Internal representation of a port forwarding rule.\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    outside_port \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":35,"context_line":"    inside_ip_address \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":36,"context_line":"    inside_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    protocol \u003d sa.Column(sa.String(4), nullable\u003dFalse)"},{"line_number":38,"context_line":"    router_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027routers.id\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHcU%3D","line":35,"in_reply_to":"AAAATn%2F%2BHlI%3D","updated":"2013-12-02 12:51:31.000000000","message":"Yes. router-port-forwarding will only work for IPv4","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f3509d0681aaf1af8787f6b4f9a5b7aeb5ad6738","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    outside_port \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":35,"context_line":"    inside_ip_address \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":36,"context_line":"    inside_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    protocol \u003d sa.Column(sa.String(4), nullable\u003dFalse)"},{"line_number":38,"context_line":"    router_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027routers.id\u0027))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHk8%3D","line":37,"updated":"2013-12-02 12:19:04.000000000","message":"What protocol values will be stored here?","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":7676,"name":"Jianing Yang","email":"jianingy.yang@gmail.com","username":"jianingy"},"change_message_id":"f9996d4bcb9d0ccb4dc76b02a25c7f05f3faf4fe","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    outside_port \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":35,"context_line":"    inside_ip_address \u003d sa.Column(sa.String(15), nullable\u003dFalse)"},{"line_number":36,"context_line":"    inside_port \u003d sa.Column(sa.Integer, nullable\u003dFalse)"},{"line_number":37,"context_line":"    protocol \u003d sa.Column(sa.String(4), nullable\u003dFalse)"},{"line_number":38,"context_line":"    router_id \u003d sa.Column(sa.String(36), sa.ForeignKey(\u0027routers.id\u0027))"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHcc%3D","line":37,"in_reply_to":"AAAATn%2F%2BHk8%3D","updated":"2013-12-02 12:51:31.000000000","message":"tcp \u0026 udp. I will make a comment here","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from neutron.openstack.common import log as logging"},{"line_number":27,"context_line":"from neutron.openstack.common import uuidutils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class PortForwardingRule(model_base.BASEV2,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCKA%3D","line":29,"updated":"2013-12-03 08:22:34.000000000","message":"not used","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    def get_portforwardings(self, context, filters\u003dNone, fields\u003dNone,"},{"line_number":65,"context_line":"                            sorts\u003dNone, limit\u003dNone, marker\u003dNone,"},{"line_number":66,"context_line":"                            page_reverse\u003dFalse):"},{"line_number":67,"context_line":"        return [dict(message\u003d\"list\")]"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCJ0%3D","line":67,"updated":"2013-12-03 08:22:34.000000000","message":"the func seems incomplete","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"}],"neutron/extensions/portforwardings.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f3509d0681aaf1af8787f6b4f9a5b7aeb5ad6738","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def create_portforwarding(self, context, portforwarding):"},{"line_number":112,"context_line":"        \"\"\"Get a list of portforwarding rules"},{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":"        msg \u003d _(\u0027PUT requests are not supported on this resource.\u0027)"},{"line_number":115,"context_line":"        raise webob.exc.HTTPNotImplemented(msg)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @abstractmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHis%3D","line":114,"updated":"2013-12-02 12:19:04.000000000","message":"POST for create?","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":7676,"name":"Jianing Yang","email":"jianingy.yang@gmail.com","username":"jianingy"},"change_message_id":"f9996d4bcb9d0ccb4dc76b02a25c7f05f3faf4fe","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    def create_portforwarding(self, context, portforwarding):"},{"line_number":112,"context_line":"        \"\"\"Get a list of portforwarding rules"},{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":"        msg \u003d _(\u0027PUT requests are not supported on this resource.\u0027)"},{"line_number":115,"context_line":"        raise webob.exc.HTTPNotImplemented(msg)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @abstractmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHcE%3D","line":114,"in_reply_to":"AAAATn%2F%2BHis%3D","updated":"2013-12-02 12:51:31.000000000","message":"will fix this. thank you :)","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import webob"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from abc import abstractmethod"},{"line_number":24,"context_line":"from neutron.api import extensions"},{"line_number":25,"context_line":"from neutron.api.v2 import attributes as attr"},{"line_number":26,"context_line":"from neutron.api.v2 import base"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCJc%3D","line":23,"updated":"2013-12-03 08:22:34.000000000","message":"this is stdlib import - should be on #20","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            return {}"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"class PortForwardingPluginBase(object):"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @abstractmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCJM%3D","line":109,"updated":"2013-12-03 08:22:34.000000000","message":"you need to set metaclass for the class - currently it seems @abstractmethod has no effect. Please add:\n  @six.add_metaclass(abc.ABCMeta) \nhere","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    @abstractmethod"},{"line_number":113,"context_line":"    def create_portforwarding(self, context, portforwarding):"},{"line_number":114,"context_line":"        \"\"\"Get a list of portforwarding rules"},{"line_number":115,"context_line":"        \"\"\""},{"line_number":116,"context_line":"        msg \u003d _(\u0027POST requests are not supported on this resource.\u0027)"},{"line_number":117,"context_line":"        raise webob.exc.HTTPNotImplemented(msg)"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCJs%3D","line":115,"updated":"2013-12-03 08:22:34.000000000","message":"please move \"\"\" to the previos line","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    @abstractmethod"},{"line_number":120,"context_line":"    def get_portforwarding(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":121,"context_line":"        \"\"\"Get a single portforwarding rules"},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        msg \u003d _(\u0027GET requests are not supported on this resource.\u0027)"},{"line_number":124,"context_line":"        raise webob.exc.HTTPNotImplemented(msg)"},{"line_number":125,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCJo%3D","line":122,"updated":"2013-12-03 08:22:34.000000000","message":"ditto","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    @abstractmethod"},{"line_number":127,"context_line":"    def get_portforwardings(self, context):"},{"line_number":128,"context_line":"        \"\"\"Get a list of portforwarding rules"},{"line_number":129,"context_line":"        \"\"\""},{"line_number":130,"context_line":"        msg \u003d _(\u0027GET requests are not supported on this resource.\u0027)"},{"line_number":131,"context_line":"        raise webob.exc.HTTPNotImplemented(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCJk%3D","line":129,"updated":"2013-12-03 08:22:34.000000000","message":"ditto","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"}],"neutron/plugins/linuxbridge/lb_neutron_plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f3509d0681aaf1af8787f6b4f9a5b7aeb5ad6738","unresolved":false,"context_lines":[{"line_number":214,"context_line":"                          sg_db_rpc.SecurityGroupServerRpcMixin,"},{"line_number":215,"context_line":"                          l3_agentschedulers_db.L3AgentSchedulerDbMixin,"},{"line_number":216,"context_line":"                          agentschedulers_db.DhcpAgentSchedulerDbMixin,"},{"line_number":217,"context_line":"\t\t\t\t\t\t  portforwardings_db.PortForwardingMixin,"},{"line_number":218,"context_line":"                          portbindings_db.PortBindingMixin):"},{"line_number":219,"context_line":"    \"\"\"Implement the Neutron abstractions using Linux bridging."},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2BHiI%3D","line":217,"updated":"2013-12-02 12:19:04.000000000","message":"Looks like indenting is messed up a bit here.","commit_id":"c15e356d167ac7ba5c04680bcc96b0c7d73ee9dc"}],"neutron/tests/unit/test_portforwardings_ext.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"from neutron.tests.unit import test_extensions"},{"line_number":35,"context_line":"from neutron.tests.unit import testlib_api"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"from neutron.openstack.common import uuidutils"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"TARGET_PLUGIN \u003d (\u0027neutron.plugins.linuxbridge.lb_neutron_plugin\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCJA%3D","line":37,"updated":"2013-12-03 08:22:34.000000000","message":"should be on #32","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"920ab7d2d1ec82b48d52c74c27a29b257caefbb4","unresolved":false,"context_lines":[{"line_number":90,"context_line":"class PortForwardingExtensionDbTestCase(PortForwardingExtensionTestCase):"},{"line_number":91,"context_line":"    fmt \u003d \u0027json\u0027"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def setUp(self):"},{"line_number":94,"context_line":"        super(PortForwardingExtensionDbTestCase, self).setUp()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_create_portforwarding(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2BCI0%3D","line":93,"updated":"2013-12-03 08:22:34.000000000","message":"redefining setup not needed","commit_id":"063b8b4201288a23a8fec90f3b43393425c73521"}]}
