)]}'
{"quantum/plugins/midonet/midonet_lib.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":118,"context_line":"        :param id: id of the bridge"},{"line_number":119,"context_line":"        :returns: requested bridge. None if bridge does not exist."},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        LOG.debug(_(\"MidoClient.get_bridge called: id\u003d%(id)s\"), {\u0027id\u0027: id})"},{"line_number":122,"context_line":"        try:"},{"line_number":123,"context_line":"            return self.mido_api.get_bridge(id)"},{"line_number":124,"context_line":"        except w_exc.HTTPNotFound:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2Bg4%3D","line":121,"updated":"2013-05-17 12:40:39.000000000","message":"dict not needed here for formatting. (only 1 param)","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        :param id: id of the bridge"},{"line_number":119,"context_line":"        :returns: requested bridge. None if bridge does not exist."},{"line_number":120,"context_line":"        \"\"\""},{"line_number":121,"context_line":"        LOG.debug(_(\"MidoClient.get_bridge called: id\u003d%(id)s\"), {\u0027id\u0027: id})"},{"line_number":122,"context_line":"        try:"},{"line_number":123,"context_line":"            return self.mido_api.get_bridge(id)"},{"line_number":124,"context_line":"        except w_exc.HTTPNotFound:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BIk%3D","line":121,"in_reply_to":"AAAAPH%2F%2F%2Bg4%3D","updated":"2013-05-17 14:51:19.000000000","message":"Done","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                                \u0027mac\u0027: mac})"},{"line_number":172,"context_line":"        dhcp_subnets \u003d bridge.get_dhcp_subnets()"},{"line_number":173,"context_line":"        if dhcp_subnets:"},{"line_number":174,"context_line":"            dhcp_subnets[0].add_dhcp_host().ip_addr(ip).mac_addr(mac).create()"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @handle_api_error"},{"line_number":177,"context_line":"    def delete_dhcp_hosts(self, bridge_id, ip, mac):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2Bgk%3D","line":174,"updated":"2013-05-17 12:40:39.000000000","message":"Why only the first subnet?","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                                                \u0027mac\u0027: mac})"},{"line_number":172,"context_line":"        dhcp_subnets \u003d bridge.get_dhcp_subnets()"},{"line_number":173,"context_line":"        if dhcp_subnets:"},{"line_number":174,"context_line":"            dhcp_subnets[0].add_dhcp_host().ip_addr(ip).mac_addr(mac).create()"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    @handle_api_error"},{"line_number":177,"context_line":"    def delete_dhcp_hosts(self, bridge_id, ip, mac):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2Bbc%3D","line":174,"in_reply_to":"AAAAPH%2F%2F%2Bgk%3D","updated":"2013-05-17 14:51:19.000000000","message":"Currently we only supports one subnet per network. We will get rid of this limitation in a future milestone in Havana Will add a comment on this.","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":"        LOG.debug(_(\"MidoClient.link_bridge_to_provider_router called: \""},{"line_number":427,"context_line":"                    \"bridge\u003d%(bridge)s, provider_router\u003d%(provider_router)s, \""},{"line_number":428,"context_line":"                    \"gateway_ip\u003d%(gateway_ip)s net_addr\u003d%(net_addr)s, \""},{"line_number":429,"context_line":"                    \"net_len\u003d%(net_len)s\"),"},{"line_number":430,"context_line":"                  {\u0027bridge\u0027: bridge, \u0027provider_router\u0027: provider_router,"},{"line_number":431,"context_line":"                   \u0027gateway_ip\u0027: gateway_ip, \u0027net_addr\u0027: net_addr,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BgQ%3D","line":428,"updated":"2013-05-17 12:40:39.000000000","message":"probably a comma before net_addr is needed.","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":425,"context_line":"        \"\"\""},{"line_number":426,"context_line":"        LOG.debug(_(\"MidoClient.link_bridge_to_provider_router called: \""},{"line_number":427,"context_line":"                    \"bridge\u003d%(bridge)s, provider_router\u003d%(provider_router)s, \""},{"line_number":428,"context_line":"                    \"gateway_ip\u003d%(gateway_ip)s net_addr\u003d%(net_addr)s, \""},{"line_number":429,"context_line":"                    \"net_len\u003d%(net_len)s\"),"},{"line_number":430,"context_line":"                  {\u0027bridge\u0027: bridge, \u0027provider_router\u0027: provider_router,"},{"line_number":431,"context_line":"                   \u0027gateway_ip\u0027: gateway_ip, \u0027net_addr\u0027: net_addr,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BaQ%3D","line":428,"in_reply_to":"AAAAPH%2F%2F%2BgQ%3D","updated":"2013-05-17 14:51:19.000000000","message":"Thanks for the catch!","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        # delete bridge port"},{"line_number":476,"context_line":"        map(lambda x: self.mido_api.delete_port(x.get_id()),"},{"line_number":477,"context_line":"            bridge_ports_to_delete)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    @handle_api_error"},{"line_number":480,"context_line":"    def set_router_external_gateway(self, id, provider_router, snat_ip):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2Be4%3D","line":477,"updated":"2013-05-17 12:40:39.000000000","message":"map and lambda seem an overkill here.\n\n[self.mido_api.delete_port(x.get_id()) for in x in bridge_ports_to_delete] \n\nor\n\nfor x in bridge_ports_to_delete:\n     self.mido_api.delete_port(x)","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":474,"context_line":""},{"line_number":475,"context_line":"        # delete bridge port"},{"line_number":476,"context_line":"        map(lambda x: self.mido_api.delete_port(x.get_id()),"},{"line_number":477,"context_line":"            bridge_ports_to_delete)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"    @handle_api_error"},{"line_number":480,"context_line":"    def set_router_external_gateway(self, id, provider_router, snat_ip):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BZs%3D","line":477,"in_reply_to":"AAAAPH%2F%2F%2Be4%3D","updated":"2013-05-17 14:51:19.000000000","message":"I made it a for loop as you suggested, which is easier to read.","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":491,"context_line":"                   \u0027snat_ip\u0027: snat_ip})"},{"line_number":492,"context_line":"        tenant_router \u003d self.get_router(id)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        # find a qport with the network_id for the router"},{"line_number":495,"context_line":"        in_port \u003d provider_router.add_interior_port()"},{"line_number":496,"context_line":"        pr_port \u003d in_port.network_address("},{"line_number":497,"context_line":"            \u0027169.254.255.0\u0027).network_length(30).port_address("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2Beo%3D","line":494,"updated":"2013-05-17 12:40:39.000000000","message":"it does not seem the lines below retrieve a port, but rather create it","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":491,"context_line":"                   \u0027snat_ip\u0027: snat_ip})"},{"line_number":492,"context_line":"        tenant_router \u003d self.get_router(id)"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        # find a qport with the network_id for the router"},{"line_number":495,"context_line":"        in_port \u003d provider_router.add_interior_port()"},{"line_number":496,"context_line":"        pr_port \u003d in_port.network_address("},{"line_number":497,"context_line":"            \u0027169.254.255.0\u0027).network_length(30).port_address("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BZk%3D","line":494,"in_reply_to":"AAAAPH%2F%2F%2Beo%3D","updated":"2013-05-17 14:51:19.000000000","message":"Fixed the comment.","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":658,"context_line":"        tr_port \u003d router.add_interior_port().network_address("},{"line_number":659,"context_line":"            \u0027169.254.255.0\u0027).network_length(30).port_address("},{"line_number":660,"context_line":"                \u0027169.254.255.2\u0027).create()"},{"line_number":661,"context_line":"        mdr_port.link(tr_port.get_id())"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        # forward metadata traffic to metadata router"},{"line_number":664,"context_line":"        router.add_route().type(\u0027Normal\u0027).src_network_addr("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2Bek%3D","line":661,"updated":"2013-05-17 12:40:39.000000000","message":"there a number of places where a port pair like this is created.\nWould it be a good idea to refactor them into a private method for this class?","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":658,"context_line":"        tr_port \u003d router.add_interior_port().network_address("},{"line_number":659,"context_line":"            \u0027169.254.255.0\u0027).network_length(30).port_address("},{"line_number":660,"context_line":"                \u0027169.254.255.2\u0027).create()"},{"line_number":661,"context_line":"        mdr_port.link(tr_port.get_id())"},{"line_number":662,"context_line":""},{"line_number":663,"context_line":"        # forward metadata traffic to metadata router"},{"line_number":664,"context_line":"        router.add_route().type(\u0027Normal\u0027).src_network_addr("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BY8%3D","line":661,"in_reply_to":"AAAAPH%2F%2F%2Bek%3D","updated":"2013-05-17 14:51:19.000000000","message":"Thanks for the suggestion. Let me see if we can do it for a future patch.","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        # add a route for the subnet in metadata router; forward"},{"line_number":375,"context_line":"        # packets destined to the subnet to the tenant router"},{"line_number":376,"context_line":"        found \u003d False"},{"line_number":377,"context_line":"        for pp in metadata_router.get_peer_ports():"},{"line_number":378,"context_line":"            if pp.get_device_id() \u003d\u003d router.get_id():"},{"line_number":379,"context_line":"                mdr_port_id \u003d pp.get_peer_id()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Frdw%3D","line":376,"updated":"2013-05-27 14:22:52.000000000","message":"You can remove this see below","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        # add a route for the subnet in metadata router; forward"},{"line_number":375,"context_line":"        # packets destined to the subnet to the tenant router"},{"line_number":376,"context_line":"        found \u003d False"},{"line_number":377,"context_line":"        for pp in metadata_router.get_peer_ports():"},{"line_number":378,"context_line":"            if pp.get_device_id() \u003d\u003d router.get_id():"},{"line_number":379,"context_line":"                mdr_port_id \u003d pp.get_peer_id()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrW4%3D","line":376,"in_reply_to":"AAAAPH%2F%2Frdw%3D","updated":"2013-05-27 16:43:57.000000000","message":"Done","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        for pp in metadata_router.get_peer_ports():"},{"line_number":378,"context_line":"            if pp.get_device_id() \u003d\u003d router.get_id():"},{"line_number":379,"context_line":"                mdr_port_id \u003d pp.get_peer_id()"},{"line_number":380,"context_line":"                found \u003d True"},{"line_number":381,"context_line":"        assert found"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        metadata_router.add_route().type(\u0027Normal\u0027).src_network_addr("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Frdc%3D","line":380,"updated":"2013-05-27 14:22:52.000000000","message":"Consider replacing lines 380-381:\n                break\nelse:\n    raise Exception(...)","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":377,"context_line":"        for pp in metadata_router.get_peer_ports():"},{"line_number":378,"context_line":"            if pp.get_device_id() \u003d\u003d router.get_id():"},{"line_number":379,"context_line":"                mdr_port_id \u003d pp.get_peer_id()"},{"line_number":380,"context_line":"                found \u003d True"},{"line_number":381,"context_line":"        assert found"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"        metadata_router.add_route().type(\u0027Normal\u0027).src_network_addr("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrWs%3D","line":380,"in_reply_to":"AAAAPH%2F%2Frdc%3D","updated":"2013-05-27 16:43:57.000000000","message":"Thanks for the suggestion. I didn\u0027t know this else clause in the for statement.","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":460,"context_line":"        # Delete routes and unlink the router and the bridge."},{"line_number":461,"context_line":"        routes \u003d provider_router.get_routes()"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        bridge_ports_to_delete \u003d []"},{"line_number":464,"context_line":"        for p in provider_router.get_peer_ports():"},{"line_number":465,"context_line":"            if p.get_device_id() \u003d\u003d bridge.get_id():"},{"line_number":466,"context_line":"                bridge_ports_to_delete.append(p)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrdA%3D","line":463,"updated":"2013-05-27 14:22:52.000000000","message":"bridge_ports_to_delete \u003d [p for p in provider_router.get_peer_ports() if p.get_device_id() \u003d\u003d bridge.get_id()]","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":460,"context_line":"        # Delete routes and unlink the router and the bridge."},{"line_number":461,"context_line":"        routes \u003d provider_router.get_routes()"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        bridge_ports_to_delete \u003d []"},{"line_number":464,"context_line":"        for p in provider_router.get_peer_ports():"},{"line_number":465,"context_line":"            if p.get_device_id() \u003d\u003d bridge.get_id():"},{"line_number":466,"context_line":"                bridge_ports_to_delete.append(p)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrWc%3D","line":463,"in_reply_to":"AAAAPH%2F%2FrdA%3D","updated":"2013-05-27 16:43:57.000000000","message":"Done.","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"}],"quantum/plugins/midonet/plugin.py":[{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"04c071f840a3ef2ff40b2b17c47968aa1e1784a5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from quantum.db import securitygroups_db"},{"line_number":32,"context_line":"from quantum.extensions import securitygroup as ext_sg"},{"line_number":33,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":34,"context_line":"from quantum.plugins.midonet import config  # noqa"},{"line_number":35,"context_line":"from quantum.plugins.midonet import midonet_lib"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FbW4%3D","line":34,"updated":"2013-05-10 00:00:21.000000000","message":"It seems that this import is never been used","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":31,"context_line":"from quantum.db import securitygroups_db"},{"line_number":32,"context_line":"from quantum.extensions import securitygroup as ext_sg"},{"line_number":33,"context_line":"from quantum.openstack.common import log as logging"},{"line_number":34,"context_line":"from quantum.plugins.midonet import config  # noqa"},{"line_number":35,"context_line":"from quantum.plugins.midonet import midonet_lib"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOn%2F%2FaY4%3D","line":34,"in_reply_to":"AAAAOn%2F%2FbW4%3D","updated":"2013-05-10 13:21:49.000000000","message":"This line is needed so oslo.config.cfg can load the configuration file.","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"}],"quantum/tests/unit/midonet/test_midonet_lib.py":[{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"unresolved":false,"context_lines":[{"line_number":90,"context_line":"        super(MidoClientTestCase, self).setUp()"},{"line_number":91,"context_line":"        self._tenant_id \u003d \u0027test-tenant\u0027"},{"line_number":92,"context_line":"        self.mock_api \u003d mock.Mock()"},{"line_number":93,"context_line":"        self.mock_cfg \u003d mock_lib.MidoClientMockConfig(self.mock_api)"},{"line_number":94,"context_line":"        self.mock_cfg.setup()"},{"line_number":95,"context_line":"        self.client \u003d midonet_lib.MidoClient(self.mock_api)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BdQ%3D","line":93,"updated":"2013-05-17 12:40:39.000000000","message":"i initially thought that this line mocked the configuration, then I looked at the code and realized this is actually setting up the API mock.\n\nI know it\u0027s me being dump, but would it be possible to use a name the helps the reader understanding what you\u0027re mocking?","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"change_message_id":"d170a551fc654c2876e256ebf666d14339aab736","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        super(MidoClientTestCase, self).setUp()"},{"line_number":91,"context_line":"        self._tenant_id \u003d \u0027test-tenant\u0027"},{"line_number":92,"context_line":"        self.mock_api \u003d mock.Mock()"},{"line_number":93,"context_line":"        self.mock_cfg \u003d mock_lib.MidoClientMockConfig(self.mock_api)"},{"line_number":94,"context_line":"        self.mock_cfg.setup()"},{"line_number":95,"context_line":"        self.client \u003d midonet_lib.MidoClient(self.mock_api)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAPH%2F%2F%2BYI%3D","line":93,"in_reply_to":"AAAAPH%2F%2F%2BdQ%3D","updated":"2013-05-17 14:51:19.000000000","message":"agreed. Changed it to mock_api_cfg.","commit_id":"d0bd5a8fca59556f604a895ad0336fcb45279c33"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                          self.client.get_router, str(uuid.uuid4()))"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_get_router_chains(self):"},{"line_number":240,"context_line":"        router_id \u003d str(uuid.uuid4())"},{"line_number":241,"context_line":"        in_chain_id \u003d str(uuid.uuid4())"},{"line_number":242,"context_line":"        out_chain_id \u003d str(uuid.uuid4())"},{"line_number":243,"context_line":"        self.mock_api_cfg.chains_in \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrcI%3D","line":240,"updated":"2013-05-27 14:22:52.000000000","message":"Have you considered using quantum.openstack.common.uuidutils?","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":237,"context_line":"                          self.client.get_router, str(uuid.uuid4()))"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    def test_get_router_chains(self):"},{"line_number":240,"context_line":"        router_id \u003d str(uuid.uuid4())"},{"line_number":241,"context_line":"        in_chain_id \u003d str(uuid.uuid4())"},{"line_number":242,"context_line":"        out_chain_id \u003d str(uuid.uuid4())"},{"line_number":243,"context_line":"        self.mock_api_cfg.chains_in \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrTM%3D","line":240,"in_reply_to":"AAAAPH%2F%2FrcI%3D","updated":"2013-05-27 16:43:57.000000000","message":"Done","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.mock_api.assert_has_calls(mock.call.get_chains("},{"line_number":252,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":253,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":254,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":255,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":256,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":257,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrcQ%3D","line":254,"updated":"2013-05-27 14:22:52.000000000","message":".assertIn(\u0027in\u0027, chains)","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.mock_api.assert_has_calls(mock.call.get_chains("},{"line_number":252,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":253,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":254,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":255,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":256,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":257,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrTE%3D","line":254,"in_reply_to":"AAAAPH%2F%2FrcQ%3D","updated":"2013-05-27 16:43:57.000000000","message":"Done","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":253,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":254,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":255,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":256,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":257,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrcM%3D","line":255,"updated":"2013-05-27 14:22:52.000000000","message":".assertIn(\u0027out\u0027, chains)","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":252,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":253,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":254,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":255,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":256,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":257,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrTA%3D","line":255,"in_reply_to":"AAAAPH%2F%2FrcM%3D","updated":"2013-05-27 16:43:57.000000000","message":"Done","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.mock_api.assert_has_calls(mock.call.get_chains("},{"line_number":273,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":274,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":275,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":276,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":277,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":278,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Frcg%3D","line":275,"updated":"2013-05-27 14:22:52.000000000","message":".assertIn(\u0027in\u0027, chains)","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.mock_api.assert_has_calls(mock.call.get_chains("},{"line_number":273,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":274,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":275,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":276,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":277,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":278,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrS8%3D","line":275,"in_reply_to":"AAAAPH%2F%2Frcg%3D","updated":"2013-05-27 16:43:57.000000000","message":"Done","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"04f7e4202182524040b4b1ffdf71c264f925b597","unresolved":false,"context_lines":[{"line_number":273,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":274,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":275,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":276,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":277,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":278,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2Frcc%3D","line":276,"updated":"2013-05-27 14:22:52.000000000","message":".assertIn(\u0027out\u0027, chains)","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"},{"author":{"_account_id":1935,"name":"Tomoe Sugihara","email":"tomoe.sugihara@gmail.com","username":"tomoe"},"unresolved":false,"context_lines":[{"line_number":273,"context_line":"            {\"tenant_id\": self._tenant_id}))"},{"line_number":274,"context_line":"        self.assertEqual(len(chains), 2)"},{"line_number":275,"context_line":"        self.assertTrue(\u0027in\u0027 in chains)"},{"line_number":276,"context_line":"        self.assertTrue(\u0027out\u0027 in chains)"},{"line_number":277,"context_line":"        self.assertEqual(chains[\u0027in\u0027].get_id(), in_chain_id)"},{"line_number":278,"context_line":"        self.assertEqual(chains[\u0027out\u0027].get_id(), out_chain_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAPH%2F%2FrS4%3D","line":276,"in_reply_to":"AAAAPH%2F%2Frcc%3D","updated":"2013-05-27 16:43:57.000000000","message":"Done","commit_id":"36e3cfaae2f364f0ebe36ef1fd3cf623d1df83f3"}]}
