)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"de4f4b1aecce72d9260b2b6c1d4b9b82531f83c4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alex Stafeyev \u003calexo101087@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-30 12:04:22 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added Descriptions to scenario/base.py and test_basic.py functions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I7fc94ee85d112b83696bdbae77d74004060daf0e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a461143_5223fba6","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":66},"updated":"2017-01-30 21:35:08.000000000","message":"this title exceeds the max number of chars for this title\n\nhttps://wiki.openstack.org/wiki/GitCommitMessages#Executive_Summary","commit_id":"16d596d4624643e63493f5b4ab12caa9d09e5869"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"d7f1e7f9b4c76c26b3a5cb1d1dfd2052489b6c7f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alex Stafeyev \u003calexo101087@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-01-31 07:11:44 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Added Descriptions to scenario/base.py and test_basic.py functions"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I7fc94ee85d112b83696bdbae77d74004060daf0e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a461143_983801d5","line":7,"updated":"2017-01-31 17:40:37.000000000","message":"Per the Openstack guidelines for commit messages (http://docs.openstack.org/infra/manual/developers.html#committing-a-change), this first line is too long. I would keep this line but I would add another one above it. I would also add the TrivialFix tag. The entire commit message would look as follows:\n\nAdd docstrings to Tempest modules\n\nAdded descriptions to scenario/base.py and test_basic.py functions\n\nTrivialFix\n\nChange-Id: I7fc94ee85d112b83696bdbae77d74004060daf0e","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"}],"neutron/tests/tempest/scenario/base.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"3270a6b8fa7ef1818349b47fc833d78a04d847f2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def resource_cleanup(cls):"},{"line_number":51,"context_line":"        \"\"\"Delete servers and its key pairs."},{"line_number":52,"context_line":"        cls.servers: A list of servers"},{"line_number":53,"context_line":"        The deletion is performed by compute/base.py delete_server"},{"line_number":54,"context_line":"        function."},{"line_number":55,"context_line":"        cls.keypair: A list of key pairs"},{"line_number":56,"context_line":"        The deletion is performed by keypairs_client.py delete_keypair"},{"line_number":57,"context_line":"        function."}],"source_content_type":"text/x-python","patch_set":2,"id":"3a461143_3e5c2725","line":54,"range":{"start_line":53,"start_character":8,"end_line":54,"end_character":17},"updated":"2017-01-25 18:11:06.000000000","message":"In my opinion this is too much implementation detail in the docstring. Try to describe WHAT the function / method do from the point of view of the user, without too much detail on the HOW. Otherwise, the user might as well read the code directly. And also, if to much HOW dteail is included, the docstring might become obsolete very easily","commit_id":"7ca5a7d2697471b7c87facb197696cc6bcb60f56"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e08abecca32ecdfff5fd93a4f7f8377ac375f993","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def resource_setup(cls):"},{"line_number":40,"context_line":"        \"\"\"Create a lists for each created type of objects."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        List for networks, seubnets, ports, flavors, etc"},{"line_number":43,"context_line":"        This function adds creation of servers list and"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_c7c65267","line":40,"range":{"start_line":40,"start_character":24,"end_line":40,"end_character":25},"updated":"2017-01-30 19:46:45.000000000","message":"We don\u0027t don\u0027t need this \u0027s\u0027","commit_id":"16d596d4624643e63493f5b4ab12caa9d09e5869"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e08abecca32ecdfff5fd93a4f7f8377ac375f993","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def resource_setup(cls):"},{"line_number":40,"context_line":"        \"\"\"Create a lists for each created type of objects."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        List for networks, seubnets, ports, flavors, etc"},{"line_number":43,"context_line":"        This function adds creation of servers list and"},{"line_number":44,"context_line":"        key pairs list"},{"line_number":45,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_a794e642","line":42,"range":{"start_line":42,"start_character":8,"end_line":42,"end_character":12},"updated":"2017-01-30 19:46:45.000000000","message":"Lists","commit_id":"16d596d4624643e63493f5b4ab12caa9d09e5869"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e08abecca32ecdfff5fd93a4f7f8377ac375f993","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def resource_setup(cls):"},{"line_number":40,"context_line":"        \"\"\"Create a lists for each created type of objects."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        List for networks, seubnets, ports, flavors, etc"},{"line_number":43,"context_line":"        This function adds creation of servers list and"},{"line_number":44,"context_line":"        key pairs list"},{"line_number":45,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_e79a6e6d","line":42,"range":{"start_line":42,"start_character":27,"end_line":42,"end_character":35},"updated":"2017-01-30 19:46:45.000000000","message":"subnets","commit_id":"16d596d4624643e63493f5b4ab12caa9d09e5869"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"e08abecca32ecdfff5fd93a4f7f8377ac375f993","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def create_keypair(cls, client\u003dNone):"},{"line_number":107,"context_line":"        \"\"\"Create a keypair and add it to cls.keypairs list."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        #TODO- client"},{"line_number":110,"context_line":"        name(str): Name of the keypair created."},{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        client \u003d client or cls.manager.keypairs_client"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a461143_c7abb273","line":109,"range":{"start_line":109,"start_character":8,"end_line":109,"end_character":21},"updated":"2017-01-30 19:46:45.000000000","message":"You need to finish this TODO","commit_id":"16d596d4624643e63493f5b4ab12caa9d09e5869"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class BaseTempestTestCase(base_api.BaseNetworkTest):"},{"line_number":32,"context_line":"    \"\"\"Test basic Tempest scenarios."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    Define functions for creation of Neutron objects, Nova server, key pairs."},{"line_number":35,"context_line":"    Additionally, an ssh connectivity check function is defined in this class."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_57a109f7","line":32,"range":{"start_line":32,"start_character":7,"end_line":32,"end_character":35},"updated":"2017-01-31 17:26:11.000000000","message":"I would change this to:\n\nBase class for Neutron scenario tests.","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    def resource_cleanup(cls):"},{"line_number":53,"context_line":"        \"\"\"Delete servers and its key pairs."},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        cls.servers: A list of servers"},{"line_number":56,"context_line":"        cls.keypair: A list of key pairs"},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        for server in cls.servers:"},{"line_number":59,"context_line":"            cls.manager.servers_client.delete_server(server)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_17e2212f","line":56,"range":{"start_line":55,"start_character":0,"end_line":56,"end_character":40},"updated":"2017-01-31 17:26:11.000000000","message":"These two lines are confusing. It seems as though cls.servers and cls.keypair are described as arguments. Please remove them and convert this to a one line docstring","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    def create_keypair(cls, client\u003dNone):"},{"line_number":107,"context_line":"        \"\"\"Create a keypair and add it to cls.keypairs list."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        client(str): Key creating client.Default\u003dNone."},{"line_number":110,"context_line":"        name(str): Name of the keypair created."},{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        client \u003d client or cls.manager.keypairs_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_b26b1bb6","line":109,"range":{"start_line":109,"start_character":15,"end_line":109,"end_character":18},"updated":"2017-01-31 17:26:11.000000000","message":"This is not of type str. The correct type is KeyPairsClient. Please see https://github.com/openstack/tempest/blob/master/tempest/lib/services/compute/keypairs_client.py#L25","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        \"\"\"Create a keypair and add it to cls.keypairs list."},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        client(str): Key creating client.Default\u003dNone."},{"line_number":110,"context_line":"        name(str): Name of the keypair created."},{"line_number":111,"context_line":"        \"\"\""},{"line_number":112,"context_line":"        client \u003d client or cls.manager.keypairs_client"},{"line_number":113,"context_line":"        name \u003d data_utils.rand_name(\u0027keypair-test\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_32856b59","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":47},"updated":"2017-01-31 17:26:11.000000000","message":"This method doesn\u0027t receive or return a name argument. Please remove this line","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def create_secgroup_rules(cls, rule_list, secgroup_id\u003dNone):"},{"line_number":120,"context_line":"        \"\"\"Create security group rules."},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        rule_list: List of security group rules"},{"line_number":123,"context_line":"        secgroup_id(str): The id of the security group to add rule to."},{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        client \u003d cls.manager.network_client"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_b2d15b25","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":47},"updated":"2017-01-31 17:26:11.000000000","message":"You could change this to:\n\nrule_list(list): List of dictionaries representing the rules to be created","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    @classmethod"},{"line_number":158,"context_line":"    def create_router_by_client(cls, is_admin\u003dFalse, **kwargs):"},{"line_number":159,"context_line":"        \"\"\"Create router in admin tenant and add it to the cls.routers list.\"\"\""},{"line_number":160,"context_line":"        kwargs.update({\u0027router_name\u0027: data_utils.rand_name(\u0027router\u0027),"},{"line_number":161,"context_line":"                       \u0027admin_state_up\u0027: True,"},{"line_number":162,"context_line":"                       \u0027external_network_id\u0027: CONF.network.public_network_id})"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_d27a6723","line":159,"range":{"start_line":159,"start_character":26,"end_line":159,"end_character":40},"updated":"2017-01-31 17:26:11.000000000","message":"This is not correct. The router will belong to admin tenant only if is_admin is True. I just would remove this part of the docstring","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @classmethod"},{"line_number":172,"context_line":"    def create_and_associate_floatingip(cls, port_id):"},{"line_number":173,"context_line":"        \"\"\"Create and associate floating ip to the VM."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        port_id(str): neutron port of the server for FIP assignment."},{"line_number":176,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_d2c8a757","line":173,"range":{"start_line":173,"start_character":44,"end_line":173,"end_character":53},"updated":"2017-01-31 17:26:11.000000000","message":"The created floating ip won\u0027t necessarily be associated to a VM. Please remove this","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    def create_and_associate_floatingip(cls, port_id):"},{"line_number":173,"context_line":"        \"\"\"Create and associate floating ip to the VM."},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        port_id(str): neutron port of the server for FIP assignment."},{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        fip \u003d cls.manager.network_client.create_floatingip("},{"line_number":178,"context_line":"            CONF.network.public_network_id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_b2d4fbeb","line":175,"range":{"start_line":175,"start_character":22,"end_line":175,"end_character":67},"updated":"2017-01-31 17:26:11.000000000","message":"Consider restating this as:\n\nNeutron port to be associated to the floating ip","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"994cd3ad07885382430485e68a3497235b18f452","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":"    @classmethod"},{"line_number":190,"context_line":"    def setup_network_and_server(cls, router\u003dNone, **kwargs):"},{"line_number":191,"context_line":"        \"\"\"Create resources for a network and a server."},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        This function creates the following resources: router, subnet,"},{"line_number":194,"context_line":"        security_group, network, keypair, server, FIP."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a461143_9237ff4b","line":191,"range":{"start_line":191,"start_character":11,"end_line":191,"end_character":54},"updated":"2017-01-31 17:26:11.000000000","message":"I would restore this to its previous form","commit_id":"03b57b1236ebd837722d9b6191dbc195a8dd5d90"}]}
