)]}'
{"nova/network/quantum/fake_client.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"class FakeClient(object):"},{"line_number":45,"context_line":"    \"\"\"A fake Quantum Client for testing\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, logger\u003dNone, **kwargs):"},{"line_number":48,"context_line":"        \"\"\"Creates a new client to some service."},{"line_number":49,"context_line":"        :param logger: The SSL cert file to use if use_ssl is true"},{"line_number":50,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F93I%3D","line":47,"updated":"2012-02-08 00:12:22.000000000","message":"Why are kwargs being accepted if they aren\u0027t being used?  I\u0027m guessing this is an interface requirement but wanted to make sure.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def __init__(self, logger\u003dNone, **kwargs):"},{"line_number":48,"context_line":"        \"\"\"Creates a new client to some service."},{"line_number":49,"context_line":"        :param logger: The SSL cert file to use if use_ssl is true"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        self.logger \u003d logger"},{"line_number":52,"context_line":"        self.tenant_map \u003d {}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F92A%3D","line":49,"updated":"2012-02-08 00:12:22.000000000","message":"There is a mismatch between the variable name and its documentation.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def _get_tenant_nets(self, tenant):"},{"line_number":55,"context_line":"        if tenant is None:"},{"line_number":56,"context_line":"            raise Exception(\"\u0027tenant\u0027 kwarg must be set for each call\")"},{"line_number":57,"context_line":"        if tenant not in self.tenant_map:"},{"line_number":58,"context_line":"            self.tenant_map[tenant] \u003d {}"},{"line_number":59,"context_line":"        return self.tenant_map[tenant]"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F9wY%3D","line":57,"updated":"2012-02-08 00:12:22.000000000","message":"Consider using .setdefault()","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            raise client.QuantumNotFoundException(\"no port with uuid %s\""},{"line_number":72,"context_line":"                                                                   % port)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def list_networks(self, tenant\u003dNone, filter_ops\u003dNone):"},{"line_number":75,"context_line":"        \"\"\"Fetches a list of all networks for a tenant\"\"\""},{"line_number":76,"context_line":"        nets \u003d self._get_tenant_nets(tenant)"},{"line_number":77,"context_line":"        if filter_ops and len(filter_ops) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F918%3D","line":74,"updated":"2012-02-08 00:12:22.000000000","message":"Why are tenant and filter_ops defined as optional if not including values for them will result in exceptions being raised?  Again, I\u0027m guessing this is related to interface requirements.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":233,"name":"Brad Hall","email":"brad@nicira.com","username":"bgh"},"change_message_id":"3618dd37a0b25def8d8e690f8de8f1aa0ef3368c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \"\"\"Fetches a list of all networks for a tenant\"\"\""},{"line_number":76,"context_line":"        nets \u003d self._get_tenant_nets(tenant)"},{"line_number":77,"context_line":"        if filter_ops and len(filter_ops) \u003e 0:"},{"line_number":78,"context_line":"            raise Exception(\"Need to implement files %s in \""},{"line_number":79,"context_line":"                        \"quantum fake client\" % filter_ops)"},{"line_number":80,"context_line":"        return {\"networks\": [{\"id\": uuid} for uuid in nets.keys()]}"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F%2BAc%3D","line":78,"updated":"2012-02-07 18:51:35.000000000","message":"Need to implement \"filters\"?","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        ports \u003d nets[network][\u0027ports\u0027].items()"},{"line_number":115,"context_line":"        if filter_ops and \u0027attachment\u0027 in filter_ops:"},{"line_number":116,"context_line":"            a \u003d filter_ops[\u0027attachment\u0027]"},{"line_number":117,"context_line":"            del filter_ops[\u0027attachment\u0027]"},{"line_number":118,"context_line":"            ports \u003d [p for p in ports if p[1][\u0027attachment\u0027] \u003d\u003d a]"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F92U%3D","line":116,"updated":"2012-02-08 00:12:22.000000000","message":"Consider using .pop() instead of retrieving and deleting the value for attachment separately.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            del filter_ops[\u0027attachment\u0027]"},{"line_number":118,"context_line":"            ports \u003d [p for p in ports if p[1][\u0027attachment\u0027] \u003d\u003d a]"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        if filter_ops and len(filter_ops) \u003e 0:"},{"line_number":121,"context_line":"            raise Exception(\"Need to implement files %s in \""},{"line_number":122,"context_line":"                        \"quantum fake client\" % filter_ops)"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F92Q%3D","line":120,"updated":"2012-02-08 00:12:22.000000000","message":"Consider simplifying to:\n\nif filter_ops:\n pass","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        return {\"ports\": [{\u0027id\u0027: p[0]} for p in ports]}"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def show_port_details(self, network, port, tenant\u003dNone):"},{"line_number":127,"context_line":"        \"\"\"Fetches the details of a certain port\"\"\""},{"line_number":128,"context_line":"        nets \u003d self._get_tenant_nets(tenant)"},{"line_number":129,"context_line":"        self._verify_net_and_port(network, port, nets)"},{"line_number":130,"context_line":"        p \u003d nets[network][\u0027ports\u0027][port]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F914%3D","line":127,"updated":"2012-02-08 00:12:22.000000000","message":"Consider not including redundant docstrings.  The docstring for this function does not provide any information that is not already clear from the method signature.\n\nIf you agree with this comment, please apply the same consideration to the other methods in this class.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        nets \u003d self._get_tenant_nets(tenant)"},{"line_number":160,"context_line":"        self._verify_net_and_port(network, port, nets)"},{"line_number":161,"context_line":"        p \u003d nets[network][\u0027ports\u0027][port]"},{"line_number":162,"context_line":"        if p[\u0027attachment\u0027] is not None:"},{"line_number":163,"context_line":"            return {\"attachment\": {\"id\": p[\u0027attachment\u0027]}}"},{"line_number":164,"context_line":"        else:"},{"line_number":165,"context_line":"            return {\"attachment\": {}}"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F91k%3D","line":162,"updated":"2012-02-08 00:12:22.000000000","message":"Consider using python\u0027s implicit boolean conversion of empty ([], {}, \u0027\u0027) and None values to False, unless you wish to differentiate a test for an empty value from None:\n\nif not p[\u0027attachment\u0027]:\n pass","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"}],"nova/network/quantum/manager.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                              (quantum_net_id)))"},{"line_number":243,"context_line":"        LOG.debug(\"Ports currently on network: %s\" % ports)"},{"line_number":244,"context_line":"        for p in ports:"},{"line_number":245,"context_line":"            if p[\"attachment\"].startswith(\"gw-\"):"},{"line_number":246,"context_line":"                self.q_conn.detach_and_delete_port(q_tenant_id,"},{"line_number":247,"context_line":"                                                   quantum_net_id,"},{"line_number":248,"context_line":"                                                   p[\u0027port-id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F91I%3D","side":"PARENT","line":245,"updated":"2012-02-08 00:12:22.000000000","message":"This statement is made redundant by the check for attached ports.  If the code gets this far, all ports are gateway ports.","commit_id":"bedef20b4fdaa678017390afd616a4db41e6d949"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        # there is anything but the gateway port attached.  If it is only the"},{"line_number":228,"context_line":"        # gateway port, unattach and delete it."},{"line_number":229,"context_line":"        ports \u003d self.q_conn.get_attached_ports(q_tenant_id, uuid)"},{"line_number":230,"context_line":"        num_ports \u003d len(ports)"},{"line_number":231,"context_line":"        for p in ports:"},{"line_number":232,"context_line":"            if p[\"attachment\"].startswith(\"gw-\"):"},{"line_number":233,"context_line":"                num_ports -\u003d 1"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F91c%3D","line":230,"updated":"2012-02-08 00:12:22.000000000","message":"Consider simplifying this test with a list comprehension:\n\nattached_ports \u003d [x for x in ports if not p[\u0027attachment\u0027].startswith(GATEWAY_PREFIX)]\nif attached_ports:\n   raise","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":233,"name":"Brad Hall","email":"brad@nicira.com","username":"bgh"},"change_message_id":"3618dd37a0b25def8d8e690f8de8f1aa0ef3368c","unresolved":false,"context_lines":[{"line_number":229,"context_line":"        ports \u003d self.q_conn.get_attached_ports(q_tenant_id, uuid)"},{"line_number":230,"context_line":"        num_ports \u003d len(ports)"},{"line_number":231,"context_line":"        for p in ports:"},{"line_number":232,"context_line":"            if p[\"attachment\"].startswith(\"gw-\"):"},{"line_number":233,"context_line":"                num_ports -\u003d 1"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"        if num_ports \u003e 0:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F%2BBA%3D","line":232,"updated":"2012-02-07 18:51:35.000000000","message":"We should probably store this in linux_net somewhere as GATEWAY_PREFIX","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"}],"nova/network/quantum/quantum_connection.py":[{"author":{"_account_id":233,"name":"Brad Hall","email":"brad@nicira.com","username":"bgh"},"change_message_id":"3618dd37a0b25def8d8e690f8de8f1aa0ef3368c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                tenant\u003dtenant_id,"},{"line_number":124,"context_line":"                filter_ops\u003d{\u0027attachment\u0027: attachment_id})"},{"line_number":125,"context_line":"            port_list \u003d port_list_resdict[\"ports\"]"},{"line_number":126,"context_line":"        except quantum_client.QuantumNotFoundException:"},{"line_number":127,"context_line":"            return None"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        port_list_len \u003d len(port_list)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F%2BAM%3D","side":"PARENT","line":126,"updated":"2012-02-07 18:51:35.000000000","message":"Should we log something if we don\u0027t find any ports?","commit_id":"bedef20b4fdaa678017390afd616a4db41e6d949"}],"nova/tests/test_quantum.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"class QuantumConnectionTestCase(test.TestCase):"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_connection(self):"},{"line_number":112,"context_line":"        fc \u003d fake_client.FakeClient(LOG)"},{"line_number":113,"context_line":"        qc \u003d quantum_connection.QuantumClientConnection(client\u003dfc)"},{"line_number":114,"context_line":"        t \u003d \"tenant1\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F9zQ%3D","line":111,"updated":"2012-02-08 00:12:22.000000000","message":"Consider breaking this method up into more focused tests.  Ideally there would be as few assertions as possible (with the ideal being one) per test, so that a given assertion failure didn\u0027t prevent the evaluation of unrelated assertions.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        for i in range(0, num_ports):"},{"line_number":134,"context_line":"            port_uuid \u003d qc.get_port_by_attachment(t, net1_uuid,"},{"line_number":135,"context_line":"                                \u0027iface\u0027 + str(i))"},{"line_number":136,"context_line":"            self.assertTrue(port_uuid is not None)"},{"line_number":137,"context_line":"            qc.detach_and_delete_port(t, net1_uuid, port_uuid)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        self.assertEquals(len(qc.get_attached_ports(t, net1_uuid)), 0)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F9y0%3D","line":136,"updated":"2012-02-08 00:12:22.000000000","message":"Consider relying on Python\u0027s implicit boolean conversion (self.assertTrue(port_uuid)) to ensure that both None and empty values are tested for.  Testing explicitly for None is generally reserved for the case where empty values denote a different state than None.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        qc.delete_network(t, net1_uuid)"},{"line_number":150,"context_line":"        self.assertFalse(qc.network_exists(t, net1_uuid))"},{"line_number":151,"context_line":"        self.assertEquals(len(qc.get_networks(t)[\u0027networks\u0027]), 0)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        self.assertRaises(quantum_client.QuantumNotFoundException,"},{"line_number":154,"context_line":"                            qc.get_network_name, t, net1_uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F9yg%3D","line":151,"updated":"2012-02-08 00:12:22.000000000","message":"Consider relying on python\u0027s implicit boolean conversion -  bool([]) \u003d\u003d False.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":231,"context_line":"    def _delete_nets(self):"},{"line_number":232,"context_line":"        for n in networks:"},{"line_number":233,"context_line":"            ctx \u003d context.RequestContext(\u0027user1\u0027, n[\u0027project_id\u0027])"},{"line_number":234,"context_line":"            for x in db.network_get_all(ctx.elevated()):"},{"line_number":235,"context_line":"                if x[\u0027label\u0027] \u003d\u003d n[\u0027label\u0027]:"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"                    self.net_man.delete_network(ctx, None, x[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F9yE%3D","line":234,"updated":"2012-02-08 00:12:22.000000000","message":"Consider using a generator to make the loop self-documenting:\n\nnetworks_to_delete \u003d (x for x in db.network_get_all(ctx.elevated()) if x[\u0027label\u0027 \u003d\u003d n[\u0027label\u0027])\nfor network in networks_to_delete:\n  pass","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        # confirm that there is a DHCP device on corresponding net"},{"line_number":268,"context_line":"        for l in expected_net_labels:"},{"line_number":269,"context_line":"            n \u003d all_net_map[l]"},{"line_number":270,"context_line":"            tenant_id \u003d n[\u0027project_id\u0027] or \\"},{"line_number":271,"context_line":"                                FLAGS.quantum_default_tenant_id"},{"line_number":272,"context_line":"            num_ports \u003d len(self.net_man.q_conn.get_attached_ports("},{"line_number":273,"context_line":"                                                    tenant_id, n[\u0027uuid\u0027]))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F9xs%3D","line":270,"updated":"2012-02-08 00:12:22.000000000","message":"PEP8 prefer parenthesis to backslash for line continuation","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"972141b1d116fc0063700e1adfb30199eeda382f","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        self.assertRaises(exception.NetworkNotFound,"},{"line_number":363,"context_line":"                        self.net_man.validate_networks, ctx, [(\"\", None)])"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    # tests case that network can be created directly via Quantu, then"},{"line_number":366,"context_line":"    # passed in via nova-manage"},{"line_number":367,"context_line":"    def test_create_net_external(self):"},{"line_number":368,"context_line":"        project_id \u003d \"foo_project\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F9xA%3D","line":365,"updated":"2012-02-08 00:12:22.000000000","message":"Consider using a more descriptive test name and/or method docstring instead of a comment.","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":233,"name":"Brad Hall","email":"brad@nicira.com","username":"bgh"},"change_message_id":"3618dd37a0b25def8d8e690f8de8f1aa0ef3368c","unresolved":false,"context_lines":[{"line_number":362,"context_line":"        self.assertRaises(exception.NetworkNotFound,"},{"line_number":363,"context_line":"                        self.net_man.validate_networks, ctx, [(\"\", None)])"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"    # tests case that network can be created directly via Quantu, then"},{"line_number":366,"context_line":"    # passed in via nova-manage"},{"line_number":367,"context_line":"    def test_create_net_external(self):"},{"line_number":368,"context_line":"        project_id \u003d \"foo_project\""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F%2BAw%3D","line":365,"updated":"2012-02-07 18:51:35.000000000","message":"Quantu -\u003e Quantum","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"},{"author":{"_account_id":233,"name":"Brad Hall","email":"brad@nicira.com","username":"bgh"},"change_message_id":"3618dd37a0b25def8d8e690f8de8f1aa0ef3368c","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        net_id \u003d self.net_man.q_conn.create_network(project_id, \u0027net1\u0027)"},{"line_number":371,"context_line":"        self.net_man.create_networks("},{"line_number":372,"context_line":"            ctx,"},{"line_number":373,"context_line":"            label\u003d\u0027achtungbaby\u0027,"},{"line_number":374,"context_line":"            cidr\u003d\"9.9.9.0/24\","},{"line_number":375,"context_line":"            multi_host\u003dFalse,"},{"line_number":376,"context_line":"            num_networks\u003d1,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAEn%2F%2F%2BAE%3D","line":373,"updated":"2012-02-07 18:51:35.000000000","message":"Must have been listening to U2 while coding..","commit_id":"348a37a7bf585f4f7a61bf51aedb5ebe4c2b3579"}]}
