)]}'
{"etc/tempest.conf.sample":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ace6a6a0d3fb27838584f3381f4f65e1c1732b03","unresolved":false,"context_lines":[{"line_number":29,"context_line":"[network]"},{"line_number":30,"context_line":"version\u003dv1.1"},{"line_number":31,"context_line":"catalog_type\u003dnetwork"},{"line_number":32,"context_line":"tenant_id\u003d2879d8ba5ece45aea0fb2dc920f0a55a"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAE3%2F%2F%2BTQ%3D","line":32,"updated":"2012-03-14 19:33:40.000000000","message":"How come we use tenant_name in other sections and we use tenant_id here?","commit_id":"212f4d62a295f16bdc7e237d527effe17945c6f0"}],"tempest/openstack.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ace6a6a0d3fb27838584f3381f4f65e1c1732b03","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                                            self.config.nova.username,"},{"line_number":26,"context_line":"                                            self.config.nova.api_key,"},{"line_number":27,"context_line":"                                            self.config.nova.auth_url,"},{"line_number":28,"context_line":"                                            self.config.nova.tenant_name)"},{"line_number":29,"context_line":"        self.ports_client \u003d PortsClient(self.config,"},{"line_number":30,"context_line":"                                            self.config.nova.username,"},{"line_number":31,"context_line":"                                            self.config.nova.api_key,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAE3%2F%2F%2BTI%3D","line":28,"updated":"2012-03-14 19:33:40.000000000","message":"I believe that you should be passing self.config.identity.* values now, right?\n\nAlso, you can use the *client_args trick...","commit_id":"212f4d62a295f16bdc7e237d527effe17945c6f0"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        auth_url \u003d self.config.identity.auth_url"},{"line_number":35,"context_line":"        if self.config.identity.strategy \u003d\u003d \u0027keystone\u0027:"},{"line_number":36,"context_line":"            client_args \u003d (self.config, username, password, auth_url,"},{"line_number":37,"context_line":"                         tenant_name)"},{"line_number":38,"context_line":"        else:"},{"line_number":39,"context_line":"            client_args \u003d (self.config, username, password, auth_url)"},{"line_number":40,"context_line":"        self.networks_client \u003d NetworksClient(*client_args)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2BpY%3D","line":37,"updated":"2012-04-28 00:14:20.000000000","message":"PEP8 vertical alignment","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"}],"tempest/services/network/json/networks_client.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"6914502315fa981991ff21d0e50f35385fe77c80","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"class NetworksClient(object):"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    def __init__(self, config, username, key, auth_url, tenant_name\u003dNone):"},{"line_number":10,"context_line":"        self.config \u003d config"},{"line_number":11,"context_line":"        catalog_type \u003d self.config.networks.catalog_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAGn%2F%2F%2BsE%3D","line":8,"updated":"2012-04-23 18:18:17.000000000","message":"in general, why not use the quantum client library?  https://github.com/openstack/python-quantumclient","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"543402313c8177ad1a60946e760521907dc2f493","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                        \u0027Accept\u0027: \u0027application/json\u0027}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"        # We have to tag the version on because endpoint returned"},{"line_number":20,"context_line":"        # by Keystone is missing it"},{"line_number":21,"context_line":"        version \u003d self.config.networks.version"},{"line_number":22,"context_line":"        self.client.base_url \u003d self.client.base_url + version + \u0027/\u0027"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAFH%2F%2F%2B7c%3D","line":20,"updated":"2012-03-26 19:52:47.000000000","message":"Are we sure about this? What about looking for the version first and tacking it on if it doesn\u0027t exist?","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"3c3b3594da4267701a6bddfa9e0643590f98d782","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                        \u0027Accept\u0027: \u0027application/json\u0027}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"        # We have to tag the version on because endpoint returned"},{"line_number":20,"context_line":"        # by Keystone is missing it"},{"line_number":21,"context_line":"        version \u003d self.config.networks.version"},{"line_number":22,"context_line":"        self.client.base_url \u003d self.client.base_url + version + \u0027/\u0027"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAFH%2F%2F%2Buo%3D","line":20,"in_reply_to":"AAAAFH%2F%2F%2B7c%3D","updated":"2012-03-27 03:02:51.000000000","message":"For now, that\u0027s the behavior. I\u0027m hoping the endpoints get a bit more standardized down the road. For now a check would make the most sense","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"6914502315fa981991ff21d0e50f35385fe77c80","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                        \u0027Accept\u0027: \u0027application/json\u0027}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"        # We have to tag the version on because endpoint returned"},{"line_number":20,"context_line":"        # by Keystone is missing it"},{"line_number":21,"context_line":"        version \u003d self.config.networks.version"},{"line_number":22,"context_line":"        self.client.base_url \u003d self.client.base_url + version + \u0027/\u0027"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAGn%2F%2F%2BsI%3D","line":20,"in_reply_to":"AAAAFH%2F%2F%2Buo%3D","updated":"2012-04-23 18:18:17.000000000","message":"Where is the quantum endpoint getting created?  Does this stuff use devstack under the covers?  I\u0027m not sure why, but devstack stack.sh has a wonky Quantum URL without a version string: https://github.com/openstack-dev/devstack/blob/master/stack.sh#L1680","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6943620d82ab9c277b0a5393e8b7df5e7cfa5d7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                        \u0027Accept\u0027: \u0027application/json\u0027}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"        # We have to tag the version on because endpoint returned"},{"line_number":20,"context_line":"        # by Keystone is missing it"},{"line_number":21,"context_line":"        version \u003d self.config.networks.version"},{"line_number":22,"context_line":"        self.client.base_url \u003d self.client.base_url + version + \u0027/\u0027"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2FFM%3D","line":20,"in_reply_to":"AAAAGn%2F%2F%2BsI%3D","updated":"2012-04-26 20:27:15.000000000","message":"Dan, to answer your question, Tempest actually doesn\u0027t care :) It\u0027s designed to run against a pre-configured environment, so we assume that the endpoint has been set up correctly in a Keystone service. If there is an error in the endpoint template that devstack is setting up for Quantum, definitely file a bug in devstack to address it...","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"6d673778f2f2f5d08467b9940e2fefedf84fc0a0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"                        \u0027Accept\u0027: \u0027application/json\u0027}"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"        # We have to tag the version on because endpoint returned"},{"line_number":20,"context_line":"        # by Keystone is missing it"},{"line_number":21,"context_line":"        version \u003d self.config.networks.version"},{"line_number":22,"context_line":"        self.client.base_url \u003d self.client.base_url + version + \u0027/\u0027"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2By0%3D","line":20,"in_reply_to":"AAAAHH%2F%2F%2FFM%3D","updated":"2012-04-27 18:23:24.000000000","message":"What Dan is explaining would be why I had nasty hack in place. It sounds like the real culprit is with the way Devstack configures the endpoints","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"}],"tempest/services/network/json/ports_client.py":[{"author":{"_account_id":447,"name":"dan wendlandt","email":"dan@nicira.com","username":"danwent"},"change_message_id":"6914502315fa981991ff21d0e50f35385fe77c80","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"class PortsClient(object):"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    def __init__(self, config, username, key, auth_url, tenant_name\u003dNone):"},{"line_number":10,"context_line":"        self.config \u003d config"},{"line_number":11,"context_line":"        catalog_type \u003d self.config.networks.catalog_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAGn%2F%2F%2BsA%3D","line":8,"updated":"2012-04-23 18:18:17.000000000","message":"Same question about why not using the quantum client.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"6d673778f2f2f5d08467b9940e2fefedf84fc0a0","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"class PortsClient(object):"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    def __init__(self, config, username, key, auth_url, tenant_name\u003dNone):"},{"line_number":10,"context_line":"        self.config \u003d config"},{"line_number":11,"context_line":"        catalog_type \u003d self.config.networks.catalog_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Byw%3D","line":8,"in_reply_to":"AAAAGn%2F%2F%2BsA%3D","updated":"2012-04-27 18:23:24.000000000","message":"Just echoing Jay. In addition, I like having access to the raw response for validation and other purposes. I do agree though that it would not hurt to have a series of smoke tests for all clients that exercise their respective clients.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6943620d82ab9c277b0a5393e8b7df5e7cfa5d7","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"class PortsClient(object):"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    def __init__(self, config, username, key, auth_url, tenant_name\u003dNone):"},{"line_number":10,"context_line":"        self.config \u003d config"},{"line_number":11,"context_line":"        catalog_type \u003d self.config.networks.catalog_type"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2FFI%3D","line":8,"in_reply_to":"AAAAGn%2F%2F%2BsA%3D","updated":"2012-04-26 20:27:15.000000000","message":"We don\u0027t use the Quantum client so that we can throw random and bad data/headers at the Quantum API endpoint. The quantum client would filter out or reject a lot of that random/bad input.\n\nThat said, not opposed to having additional tests that use the quantum python client, but we\u0027ve used the strategy of a very raw client to ensure that passing bad data on input returns appropriate errors...","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"543402313c8177ad1a60946e760521907dc2f493","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                        \u0027Accept\u0027: \u0027application/json\u0027}"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"        # We have to tag the version on because endpoint returned"},{"line_number":21,"context_line":"        # by Keystone is missing it"},{"line_number":22,"context_line":"        version \u003d self.config.networks.version"},{"line_number":23,"context_line":"        self.client.base_url \u003d self.client.base_url + version + \u0027/\u0027"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAFH%2F%2F%2B7U%3D","line":21,"updated":"2012-03-26 19:52:47.000000000","message":"Same comment from before about checking to see if there is a version string already...","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"}],"tempest/tests/network/test_networks.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from nose.plugins.attrib import attr"},{"line_number":2,"context_line":"from tempest import openstack"},{"line_number":3,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":4,"context_line":"import unittest2 as unittest"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Bpc%3D","line":1,"updated":"2012-04-28 00:14:20.000000000","message":"Looking at the HACKING file I don\u0027t see any requirement to order and separate imports by category.  Is there a reason for this deviation from the core projects?","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"68a66517f421a1fa5da3c3f7ec4a0b2ffab7dc85","unresolved":false,"context_lines":[{"line_number":1,"context_line":"from nose.plugins.attrib import attr"},{"line_number":2,"context_line":"from tempest import openstack"},{"line_number":3,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":4,"context_line":"import unittest2 as unittest"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2BZM%3D","line":1,"in_reply_to":"AAAAHH%2F%2F%2Bpc%3D","updated":"2012-04-30 16:47:47.000000000","message":"Maru, we just haven\u0027t done that cleanup yet...","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"543402313c8177ad1a60946e760521907dc2f493","unresolved":false,"context_lines":[{"line_number":2,"context_line":"from tempest import openstack"},{"line_number":3,"context_line":"from tempest.common.utils.data_utils import rand_name"},{"line_number":4,"context_line":"import unittest2 as unittest"},{"line_number":5,"context_line":"import time"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"class NetworksTest(unittest.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAFH%2F%2F%2B7M%3D","line":5,"updated":"2012-03-26 19:52:47.000000000","message":"This import is not used...","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    def tearDownClass(cls):"},{"line_number":21,"context_line":"        cls.client.delete_network(cls.tenant_id, cls.network[\u0027id\u0027])"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":24,"context_line":"    def test_create_delete_network(self):"},{"line_number":25,"context_line":"        \"\"\"Creates and deletes a network for a tenant\"\"\""},{"line_number":26,"context_line":"        name \u003d rand_name(\u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Bps%3D","line":23,"updated":"2012-04-28 00:14:20.000000000","message":"This is a bit higher-level (and betrays my being new to Tempest), but every single test in this change appears to be of type \u0027smoke\u0027.  What do you think about adding a Tempest base class that allows setting a default test type, so that only tests that deviate from the default need to have a type specified?","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":24,"context_line":"    def test_create_delete_network(self):"},{"line_number":25,"context_line":"        \"\"\"Creates and deletes a network for a tenant\"\"\""},{"line_number":26,"context_line":"        name \u003d rand_name(\u0027network\u0027)"},{"line_number":27,"context_line":"        resp, network \u003d self.client.create_network(self.tenant_id, name)"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Bp8%3D","line":25,"updated":"2012-04-28 00:14:20.000000000","message":"Consider using more description test names and no comment rather than using a generic test name and descriptive comment, e.g.:\n\ntest_create_delete_network \u003d\u003e test_create_and_update_network_for_tenent\n\nIf the intent of the test changes, only the name has to be updated.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        self.assertEqual(\u0027202\u0027, resp[\u0027status\u0027])"},{"line_number":30,"context_line":"        self.assertTrue(network[\u0027id\u0027] is not None)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        resp, _ \u003d self.client.delete_network(self.tenant_id, network[\u0027id\u0027])"},{"line_number":33,"context_line":"        self.assertEqual(\u0027204\u0027, resp[\u0027status\u0027])"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2BqA%3D","line":32,"updated":"2012-04-28 00:14:20.000000000","message":"Out of curiousity, why is an underscore being assigned to?  If the intent is to throw away the value, consider using a name that isn\u0027t used for other things already (_ is already an alias for the the value of the last statement in the python interpreter and an alias for gettext when it is loaded).","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.assertEqual(self.name, network[\u0027name\u0027])"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":46,"context_line":"    def test_show_network_details(self):"},{"line_number":47,"context_line":"        \"\"\"Verifies the full details of a network\"\"\""},{"line_number":48,"context_line":"        resp, network \u003d self.client.show_network_details(self.tenant_id,"},{"line_number":49,"context_line":"                                                         self.network[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Bpw%3D","line":46,"updated":"2012-04-28 00:14:20.000000000","message":"Consider verifying more of the network details rather than only checking what is already checked in test.show_network.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        resp, network \u003d self.client.show_network(self.tenant_id, network[\u0027id\u0027])"},{"line_number":67,"context_line":"        self.assertEqual(new_name, network[\u0027name\u0027])"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        resp, _ \u003d self.client.delete_network(self.tenant_id, network[\u0027id\u0027])"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"},{"line_number":72,"context_line":"    def test_list_networks(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Bpo%3D","line":69,"updated":"2012-04-28 00:14:20.000000000","message":"Why is this network being explicitly deleted?  If the intent is to clean up after the test, consider performing the action in tearDown instead.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    def test_list_networks(self):"},{"line_number":73,"context_line":"        \"\"\"Verify the network exists in the list of all networks\"\"\""},{"line_number":74,"context_line":"        resp, networks \u003d self.client.list_networks(self.tenant_id)"},{"line_number":75,"context_line":"        found \u003d any([n for n in networks if n[\u0027id\u0027] \u003d\u003d self.network[\u0027id\u0027]])"},{"line_number":76,"context_line":"        self.assertTrue(found)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Bpk%3D","line":75,"updated":"2012-04-28 00:14:20.000000000","message":"Consider removing the square brackets from this statement - any function that accepts an iterable can just as easily consume a generator.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"9a6c9c24928800cd6fb4212b4d792c33f2abe1f1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    def test_list_networks(self):"},{"line_number":73,"context_line":"        \"\"\"Verify the network exists in the list of all networks\"\"\""},{"line_number":74,"context_line":"        resp, networks \u003d self.client.list_networks(self.tenant_id)"},{"line_number":75,"context_line":"        found \u003d any([n for n in networks if n[\u0027id\u0027] \u003d\u003d self.network[\u0027id\u0027]])"},{"line_number":76,"context_line":"        self.assertTrue(found)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2BWg%3D","line":75,"in_reply_to":"AAAAHH%2F%2F%2BZE%3D","updated":"2012-04-30 17:42:49.000000000","message":"A generator uses parenthesis to a list comprehension\u0027s square brackets: (x for x in y) vs [x for x in y]  When enclosing parenthesis are already present, for example when a generator is a parameter to a function, the generator parenthesis can be omitted.  So the following statements are equivalent:\n\nany([x for x in y]) \u003d\u003d any((x for x in y)) \u003d\u003d any(x for x in y)\n\nThe 3rd statement, being simplest, is arguably preferable.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"68a66517f421a1fa5da3c3f7ec4a0b2ffab7dc85","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    def test_list_networks(self):"},{"line_number":73,"context_line":"        \"\"\"Verify the network exists in the list of all networks\"\"\""},{"line_number":74,"context_line":"        resp, networks \u003d self.client.list_networks(self.tenant_id)"},{"line_number":75,"context_line":"        found \u003d any([n for n in networks if n[\u0027id\u0027] \u003d\u003d self.network[\u0027id\u0027]])"},{"line_number":76,"context_line":"        self.assertTrue(found)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @attr(type\u003d\u0027smoke\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2BZE%3D","line":75,"in_reply_to":"AAAAHH%2F%2F%2Bpk%3D","updated":"2012-04-30 16:47:47.000000000","message":"Maru, could you show the code you are describing above? I\u0027m not sure precisely what you mean...","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"643124b324604178d44c8486230dbae5f14efd5a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def test_list_networks_with_detail(self):"},{"line_number":80,"context_line":"        \"\"\"Verify the network exists in the detailed list of all networks\"\"\""},{"line_number":81,"context_line":"        resp, networks \u003d self.client.list_networks_with_detail(self.tenant_id)"},{"line_number":82,"context_line":"        found \u003d any([n for n in networks if n[\u0027id\u0027] \u003d\u003d self.network[\u0027id\u0027]])"},{"line_number":83,"context_line":"        self.assertTrue(found)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAHH%2F%2F%2Bpg%3D","line":82,"updated":"2012-04-28 00:14:20.000000000","message":"Consider removing the square brackets from this statement.","commit_id":"041d6f8c42dbc12028025e33e83fdff38f10c60e"}]}
