)]}'
{"openstackclient/tests/functional/common/test_help.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c837eb4bfe49819c620f8fe564a6f4189e28b83e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import fixtures"},{"line_number":14,"context_line":"import os"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from openstackclient.tests.functional import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_0ecde0b5","line":13,"updated":"2017-06-06 16:50:01.000000000","message":"fixture is third-party module. Our convention on the import grouping is standard, third-party and project imports. Thus it should be:\n\n import os\n \u003cblank line\u003e\n import fixtures\n \u003cblank line\u003e","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import fixtures"},{"line_number":14,"context_line":"import os"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from openstackclient.tests.functional import base"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_cc5ec211","line":13,"in_reply_to":"df140735_0ecde0b5","updated":"2017-06-07 03:59:30.000000000","message":"Done","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c837eb4bfe49819c620f8fe564a6f4189e28b83e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        # Pop all auth info"},{"line_number":81,"context_line":"        for key in os.environ.keys():"},{"line_number":82,"context_line":"            if key.startswith(\u0027OS_\u0027):"},{"line_number":83,"context_line":"                self.useFixture(fixtures.EnvironmentVariable(key, None))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        raw_output \u003d self.openstack(\u0027help\u0027)"},{"line_number":86,"context_line":"        self.assertIn(\u0027usage: openstack\u0027, raw_output)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_8e6690ba","line":83,"updated":"2017-06-06 16:50:01.000000000","message":"This fixtures all OS_* environment. Is this what you intend?\n\nGenerally speaking, it is not a convention we usually used. Instead, it is suggested only to pass environments we need in *tox.ini*.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        # Pop all auth info"},{"line_number":81,"context_line":"        for key in os.environ.keys():"},{"line_number":82,"context_line":"            if key.startswith(\u0027OS_\u0027):"},{"line_number":83,"context_line":"                self.useFixture(fixtures.EnvironmentVariable(key, None))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        raw_output \u003d self.openstack(\u0027help\u0027)"},{"line_number":86,"context_line":"        self.assertIn(\u0027usage: openstack\u0027, raw_output)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_8c31eaa5","line":83,"in_reply_to":"df140735_8e6690ba","updated":"2017-06-07 03:59:30.000000000","message":"Yes, it is, the case aims to test help command works well in no auth context, we pass all of the openstack related OS_ prefix variables in tox.ini, so I fixtures these for the special test case, other test cases still need OS_*.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b1e18025a15d49d07d63e076e4b470ed8728477a","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def test_commands_help_no_auth(self):"},{"line_number":80,"context_line":"        \"\"\"Check help commands without auth info.\"\"\""},{"line_number":81,"context_line":"        # Pop all auth info"},{"line_number":82,"context_line":"        for key in os.environ.keys():"},{"line_number":83,"context_line":"            if key.startswith(\u0027OS_\u0027):"},{"line_number":84,"context_line":"                self.useFixture(fixtures.EnvironmentVariable(key, None))"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_0a7a4387","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":37},"updated":"2017-06-07 16:29:23.000000000","message":".keys() is unnecessary.\n\n  for key in os.environ:","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"bacb1a056effee330f4c4d9d3d512c7f5dd37a72","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    def test_commands_help_no_auth(self):"},{"line_number":80,"context_line":"        \"\"\"Check help commands without auth info.\"\"\""},{"line_number":81,"context_line":"        # Pop all auth info"},{"line_number":82,"context_line":"        for key in os.environ.keys():"},{"line_number":83,"context_line":"            if key.startswith(\u0027OS_\u0027):"},{"line_number":84,"context_line":"                self.useFixture(fixtures.EnvironmentVariable(key, None))"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_787d36e6","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":37},"in_reply_to":"df140735_0a7a4387","updated":"2017-06-08 03:52:58.000000000","message":"Done","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"}],"openstackclient/tests/functional/compute/v2/test_flavor.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b1e18025a15d49d07d63e076e4b470ed8728477a","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def tearDownClass(cls):"},{"line_number":35,"context_line":"        super(FlavorTests, cls).tearDownClass()"},{"line_number":36,"context_line":"        raw_output \u003d cls.openstack(\"project delete \" + cls.PROJECT_NAME)"},{"line_number":37,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_eaa38fff","line":35,"updated":"2017-06-07 16:29:23.000000000","message":"I believe it is better to call super().tearDownClass last.\nThis means a subclass clean up all things and then call a parent class clean up. I believe it is cleaner.","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"5bab89bf7c8d1cb36a12b321c680db23d9c12470","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def tearDownClass(cls):"},{"line_number":35,"context_line":"        super(FlavorTests, cls).tearDownClass()"},{"line_number":36,"context_line":"        raw_output \u003d cls.openstack(\"project delete \" + cls.PROJECT_NAME)"},{"line_number":37,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_2002d5b5","line":35,"in_reply_to":"bf091321_0a4c92c5","updated":"2017-06-08 12:44:14.000000000","message":"Two test cases should not have so strong depends, like you say, volume and volume snapshot, we should make a group of test case run independently, if a volume is required for snapshot, it should be created in snapshot test class setUpClass, and be cleaned in tearDownClass, don\u0027t depend on super class. If we follow the way, all of us do not have to think about the super/sub method call order, make sure we do it, that\u0027s enough.","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5250e8bab38646637076135ea12164c35bd69bd2","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def tearDownClass(cls):"},{"line_number":35,"context_line":"        super(FlavorTests, cls).tearDownClass()"},{"line_number":36,"context_line":"        raw_output \u003d cls.openstack(\"project delete \" + cls.PROJECT_NAME)"},{"line_number":37,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_0a4c92c5","line":35,"in_reply_to":"bf091321_0ef6f490","updated":"2017-06-08 11:49:44.000000000","message":"This means if setUpClass of a subclass does something which requires what setUpClass of a parent class sets up the teardownClass of the parent class fails.\n\nFor example, the parent class setUpClass creates a volume and a subclass setUpClass creates a volume snapshot, and tearDownClass of both classes do corresponding thing. In this case, super().tearDownClass fails to delete the volume as the volume snapshot exists.\n\nThis is the reason I suggested to move super() to the last.\n\nIf we place super() first, we force developers to take care of dependencies and sometimes there is something we cannot do in tearDownClass in a subclass even though a corresponding thing is done in setUpClass. Is it what you intend?","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"bacb1a056effee330f4c4d9d3d512c7f5dd37a72","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @classmethod"},{"line_number":34,"context_line":"    def tearDownClass(cls):"},{"line_number":35,"context_line":"        super(FlavorTests, cls).tearDownClass()"},{"line_number":36,"context_line":"        raw_output \u003d cls.openstack(\"project delete \" + cls.PROJECT_NAME)"},{"line_number":37,"context_line":"        cls.assertOutput(\u0027\u0027, raw_output)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_0ef6f490","line":35,"in_reply_to":"df140735_eaa38fff","updated":"2017-06-08 03:52:58.000000000","message":"I hope the super.tearDownClass() have chance to run even if the following code raise an exception or assert failed, so I put it first.","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"}],"openstackclient/tests/functional/identity/v2/common.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c837eb4bfe49819c620f8fe564a6f4189e28b83e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setUpClass(cls):"},{"line_number":45,"context_line":"        # prepare v2 env"},{"line_number":46,"context_line":"        cls.ver_fix \u003d fixtures.EnvironmentVariable("},{"line_number":47,"context_line":"            \u0027OS_IDENTITY_API_VERSION\u0027, \u00272.0\u0027)"},{"line_number":48,"context_line":"        cls.ver_fix.setUp()"},{"line_number":49,"context_line":"        auth_url \u003d os.environ.get(\u0027OS_AUTH_URL\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_c9700275","line":46,"range":{"start_line":46,"start_character":16,"end_line":46,"end_character":19},"updated":"2017-06-06 16:50:01.000000000","message":"I prefer to \u0027fixture\u0027 over \u0027fix\u0027. \u0027fix\u0027 has another meaning.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def setUpClass(cls):"},{"line_number":45,"context_line":"        # prepare v2 env"},{"line_number":46,"context_line":"        cls.ver_fix \u003d fixtures.EnvironmentVariable("},{"line_number":47,"context_line":"            \u0027OS_IDENTITY_API_VERSION\u0027, \u00272.0\u0027)"},{"line_number":48,"context_line":"        cls.ver_fix.setUp()"},{"line_number":49,"context_line":"        auth_url \u003d os.environ.get(\u0027OS_AUTH_URL\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_e748815d","line":46,"range":{"start_line":46,"start_character":16,"end_line":46,"end_character":19},"in_reply_to":"df140735_c9700275","updated":"2017-06-07 03:59:30.000000000","message":"Done","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7545de44055c0382cd7f6b28c83e66104583917a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    ENDPOINT_LIST_HEADERS \u003d [\u0027ID\u0027, \u0027Region\u0027, \u0027Service Name\u0027, \u0027Service Type\u0027]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    FIXTURE_LIST \u003d []"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def _setup_fixtures(cls, fixture):"},{"line_number":47,"context_line":"        fixture.setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_3f3794e6","line":44,"updated":"2017-06-07 10:44:05.000000000","message":"Can we move _setup_fixtures() and _cleanup_fixtures() to tests.functional.base ?\n\nIt is an option in this patch. I can cleanup them later. Special handling like L.92 is tricky. This is a negative side we uses setUpClass and tearDownClass a lot.\n\nIn addition, a private name like _FIXTURE_LIST would be better.","commit_id":"4224f24fab20ff1670319d826887c40854036eb4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b1e18025a15d49d07d63e076e4b470ed8728477a","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @classmethod"},{"line_number":68,"context_line":"    def tearDownClass(cls):"},{"line_number":69,"context_line":"        super(IdentityTests, cls).tearDownClass()"},{"line_number":70,"context_line":"        cls.openstack(\u0027project delete %s\u0027 % cls.project_name)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4a8ddb79","line":69,"updated":"2017-06-07 16:29:23.000000000","message":"As mentioned in somewhere other, it is better to place super().tearDownClass at the last.","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b1e18025a15d49d07d63e076e4b470ed8728477a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # prepare v2 env"},{"line_number":75,"context_line":"        ver_fixture \u003d fixtures.EnvironmentVariable("},{"line_number":76,"context_line":"            \u0027OS_IDENTITY_API_VERSION\u0027, \u00272.0\u0027)"},{"line_number":77,"context_line":"        self.useFixture(ver_fixture)"},{"line_number":78,"context_line":"        auth_url \u003d os.environ.get(\u0027OS_AUTH_URL\u0027)"},{"line_number":79,"context_line":"        if auth_url:"},{"line_number":80,"context_line":"            auth_url_fixture \u003d fixtures.EnvironmentVariable("}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4abb9b0d","line":77,"updated":"2017-06-07 16:29:23.000000000","message":"nit: Just personal preference.\n\n self.useFixture(fixtures.EnvironmentVariable(\n     \u0027OS_IDENTITY_API_VERSION\u0027, \u00272.0\u0027))","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"bacb1a056effee330f4c4d9d3d512c7f5dd37a72","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # prepare v2 env"},{"line_number":75,"context_line":"        ver_fixture \u003d fixtures.EnvironmentVariable("},{"line_number":76,"context_line":"            \u0027OS_IDENTITY_API_VERSION\u0027, \u00272.0\u0027)"},{"line_number":77,"context_line":"        self.useFixture(ver_fixture)"},{"line_number":78,"context_line":"        auth_url \u003d os.environ.get(\u0027OS_AUTH_URL\u0027)"},{"line_number":79,"context_line":"        if auth_url:"},{"line_number":80,"context_line":"            auth_url_fixture \u003d fixtures.EnvironmentVariable("}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_7899b61d","line":77,"in_reply_to":"df140735_4abb9b0d","updated":"2017-06-08 03:52:58.000000000","message":"I think the current one is better for debug code :-)","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"}],"openstackclient/tests/functional/image/v1/test_image.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c837eb4bfe49819c620f8fe564a6f4189e28b83e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import fixtures"},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_a9bdce02","line":13,"updated":"2017-06-06 16:50:01.000000000","message":"fixtures is third-party","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import fixtures"},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_279e7854","line":13,"in_reply_to":"df140735_a9bdce02","updated":"2017-06-07 03:59:30.000000000","message":"Done","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"b1e18025a15d49d07d63e076e4b470ed8728477a","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def tearDownClass(cls):"},{"line_number":40,"context_line":"        super(ImageTests, cls).tearDownClass()"},{"line_number":41,"context_line":"        cls.openstack("},{"line_number":42,"context_line":"            \u0027--os-image-api-version 1 \u0027"},{"line_number":43,"context_line":"            \u0027image delete \u0027 +"}],"source_content_type":"text/x-python","patch_set":3,"id":"df140735_4a503bd5","line":40,"updated":"2017-06-07 16:29:23.000000000","message":"Let\u0027s move it to the last.","commit_id":"b7d4a8e10c5229856b026c6faf492fc7db81b290"}],"openstackclient/tests/functional/image/v2/test_image.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c837eb4bfe49819c620f8fe564a6f4189e28b83e","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import fixtures"},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_e9de266b","line":13,"updated":"2017-06-06 16:50:01.000000000","message":"fixtures is third-party module, so it should be placed after uuid with a blank line.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import fixtures"},{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_ca2c614c","line":13,"in_reply_to":"df140735_e9de266b","updated":"2017-06-07 03:59:30.000000000","message":"Done","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c837eb4bfe49819c620f8fe564a6f4189e28b83e","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# from glanceclient import exc as image_exceptions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from openstackclient.tests.functional import base"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_89dfaa64","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":50},"updated":"2017-06-06 16:50:01.000000000","message":"It seems a good chance to drop a comment.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# from glanceclient import exc as image_exceptions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from openstackclient.tests.functional import base"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_eac4c561","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":50},"in_reply_to":"df140735_89dfaa64","updated":"2017-06-07 03:59:30.000000000","message":"This import is used by the following comment code in #NOTE, I prefer to remove it with #NOTE removing, there is not relationship with the patch, so I didn\u0027t do it.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"71a867ac9ad7f848f989c1d90483a2031c3548af","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import json"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# from glanceclient import exc as image_exceptions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from openstackclient.tests.functional import base"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_84ed358d","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":50},"in_reply_to":"df140735_eac4c561","updated":"2017-06-07 10:31:24.000000000","message":"Thanks for clarification. It sounds reasonable.\nI just thought it is a comment we forgot to drop in past reviews.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        # else:"},{"line_number":237,"context_line":"        #     # Test not shared"},{"line_number":238,"context_line":"        #     self.assertRaises("},{"line_number":239,"context_line":"        #         image_exceptions.HTTPForbidden,"},{"line_number":240,"context_line":"        #         self.openstack,"},{"line_number":241,"context_line":"        #         \u0027image add project \u0027 +"},{"line_number":242,"context_line":"        #         self.NAME + \u0027 \u0027 +"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_caba21e0","line":239,"range":{"start_line":239,"start_character":18,"end_line":239,"end_character":34},"updated":"2017-06-07 03:59:30.000000000","message":"here","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"}],"openstackclient/tests/functional/volume/v2/common.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7545de44055c0382cd7f6b28c83e66104583917a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    @classmethod"},{"line_number":30,"context_line":"    def tearDownClass(cls):"},{"line_number":31,"context_line":"        super(BaseVolumeTests, cls).tearDownClass()"},{"line_number":32,"context_line":"        cls.ver_fixture.cleanUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"df140735_bfd5e445","line":32,"updated":"2017-06-07 10:44:05.000000000","message":"There is a case where some subclass does not call super(). One example is [1]. I did not check how many we have like this.\n\n[1] https://github.com/openstack/python-openstackclient/blob/master/openstackclient/tests/functional/volume/v2/test_snapshot.py#L37-L41","commit_id":"4224f24fab20ff1670319d826887c40854036eb4"}],"openstackclient/tests/functional/volume/v3/common.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c837eb4bfe49819c620f8fe564a6f4189e28b83e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    \"\"\"Base class for Volume functional tests. \"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @classmethod"},{"line_number":22,"context_line":"    def setUpClass(cls):"},{"line_number":23,"context_line":"        cls.ver_fix \u003d fixtures.EnvironmentVariable("},{"line_number":24,"context_line":"            \u0027OS_VOLUME_API_VERSION\u0027, \u00273\u0027"},{"line_number":25,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_b9619fd6","line":22,"updated":"2017-06-06 16:50:01.000000000","message":"Don\u0027t we need to call super()?","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"c4882dee89314abd47e04f812761998fc10b27c0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    \"\"\"Base class for Volume functional tests. \"\"\""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @classmethod"},{"line_number":22,"context_line":"    def setUpClass(cls):"},{"line_number":23,"context_line":"        cls.ver_fix \u003d fixtures.EnvironmentVariable("},{"line_number":24,"context_line":"            \u0027OS_VOLUME_API_VERSION\u0027, \u00273\u0027"},{"line_number":25,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_6a031575","line":22,"in_reply_to":"df140735_b9619fd6","updated":"2017-06-07 03:59:30.000000000","message":"Ah, my fault, I think it should do.","commit_id":"0281d9d0db4340a10e06216063ee0b6da2dac7f5"}]}
