)]}'
{"tempest/api/identity/admin/v3/test_projects.py":[{"author":{"_account_id":4473,"name":"Sam Danes","email":"samuel.danes@gmail.com","username":"sam-danes"},"change_message_id":"6f0534b6b67808d4996275b5ab115d8934b3e43c","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    @test.idempotent_id(\u0027cc2c4df8-2baa-41e5-83fb-fef2f1fed099\u0027)"},{"line_number":181,"context_line":"    def test_delete_project_subtree(self):"},{"line_number":182,"context_line":"        # Create 2 projects (the first project is a parent for the second one)"},{"line_number":183,"context_line":"        # deletes the target project itself and its subtree"},{"line_number":184,"context_line":"        def api_num(s, base\u003d4):"},{"line_number":185,"context_line":"            \"\"\"Supposing that version is in this format as 3.4 or 3.4.1.2.\"\"\""},{"line_number":186,"context_line":"            l \u003d s.split(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_0f8c0e34","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":8},"updated":"2016-01-21 20:31:11.000000000","message":"Should this function nested inside of the test? Seems like at least it should be a re-usable function at a more global scope.","commit_id":"42fd965b4923d85366953fa4e3633cb6d8c92a4f"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"aeb3dc958126e48090f3ea3d3385f8d59c95c03e","unresolved":false,"context_lines":[{"line_number":180,"context_line":"    @test.idempotent_id(\u0027cc2c4df8-2baa-41e5-83fb-fef2f1fed099\u0027)"},{"line_number":181,"context_line":"    def test_delete_project_subtree(self):"},{"line_number":182,"context_line":"        # Create 2 projects (the first project is a parent for the second one)"},{"line_number":183,"context_line":"        # deletes the target project itself and its subtree"},{"line_number":184,"context_line":"        def api_num(s, base\u003d4):"},{"line_number":185,"context_line":"            \"\"\"Supposing that version is in this format as 3.4 or 3.4.1.2.\"\"\""},{"line_number":186,"context_line":"            l \u003d s.split(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_3f7dcde7","line":183,"range":{"start_line":183,"start_character":0,"end_line":183,"end_character":8},"in_reply_to":"9a68dd71_0f8c0e34","updated":"2016-01-26 13:03:04.000000000","message":"I would like to get rid from the function in global scope, so I have decided to simplify the function up to simple expression.","commit_id":"42fd965b4923d85366953fa4e3633cb6d8c92a4f"},{"author":{"_account_id":4473,"name":"Sam Danes","email":"samuel.danes@gmail.com","username":"sam-danes"},"change_message_id":"6f0534b6b67808d4996275b5ab115d8934b3e43c","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        def api_num(s, base\u003d4):"},{"line_number":185,"context_line":"            \"\"\"Supposing that version is in this format as 3.4 or 3.4.1.2.\"\"\""},{"line_number":186,"context_line":"            l \u003d s.split(\u0027.\u0027)"},{"line_number":187,"context_line":"            l.extend([\u00270\u0027] * (base - len(l)))"},{"line_number":188,"context_line":"            return sum([int(r[1]) * 1000 ** r[0] for r in enumerate(l[::-1])])"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        # get API version."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_ef609a37","line":187,"range":{"start_line":187,"start_character":13,"end_line":187,"end_character":14},"updated":"2016-01-21 20:31:11.000000000","message":"This seems to be a indirect way to do this calculation? Wouldn\u0027t a more clean solution be something like:\n\nreturn [int(x) for x in re.sub(r\u0027(\\.0+)*$\u0027,\u0027\u0027, v).split(\".\")]","commit_id":"42fd965b4923d85366953fa4e3633cb6d8c92a4f"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"aeb3dc958126e48090f3ea3d3385f8d59c95c03e","unresolved":false,"context_lines":[{"line_number":184,"context_line":"        def api_num(s, base\u003d4):"},{"line_number":185,"context_line":"            \"\"\"Supposing that version is in this format as 3.4 or 3.4.1.2.\"\"\""},{"line_number":186,"context_line":"            l \u003d s.split(\u0027.\u0027)"},{"line_number":187,"context_line":"            l.extend([\u00270\u0027] * (base - len(l)))"},{"line_number":188,"context_line":"            return sum([int(r[1]) * 1000 ** r[0] for r in enumerate(l[::-1])])"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        # get API version."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_df0a7179","line":187,"range":{"start_line":187,"start_character":13,"end_line":187,"end_character":14},"in_reply_to":"9a68dd71_ef609a37","updated":"2016-01-26 13:03:04.000000000","message":"Done","commit_id":"42fd965b4923d85366953fa4e3633cb6d8c92a4f"},{"author":{"_account_id":4473,"name":"Sam Danes","email":"samuel.danes@gmail.com","username":"sam-danes"},"change_message_id":"6f0534b6b67808d4996275b5ab115d8934b3e43c","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        # The test is available for API version v3.6 and higher."},{"line_number":192,"context_line":"        desc \u003d self.client.show_api_description()"},{"line_number":193,"context_line":"        version \u003d desc[\u0027version\u0027][\u0027id\u0027][1:]"},{"line_number":194,"context_line":"        if api_num(version) \u003c api_num(\u00273.6\u0027):"},{"line_number":195,"context_line":"            raise self.skipException(\"skipping this test\")"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # create project #1"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_2fc5523b","line":194,"range":{"start_line":194,"start_character":0,"end_line":194,"end_character":8},"updated":"2016-01-21 20:31:11.000000000","message":"This error message should be more explicit. Something like \"Expected API version:X, Detected API version:Y. Skipping test.\"","commit_id":"42fd965b4923d85366953fa4e3633cb6d8c92a4f"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"aeb3dc958126e48090f3ea3d3385f8d59c95c03e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        # The test is available for API version v3.6 and higher."},{"line_number":192,"context_line":"        desc \u003d self.client.show_api_description()"},{"line_number":193,"context_line":"        version \u003d desc[\u0027version\u0027][\u0027id\u0027][1:]"},{"line_number":194,"context_line":"        if api_num(version) \u003c api_num(\u00273.6\u0027):"},{"line_number":195,"context_line":"            raise self.skipException(\"skipping this test\")"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        # create project #1"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_44e47fab","line":194,"range":{"start_line":194,"start_character":0,"end_line":194,"end_character":8},"in_reply_to":"9a68dd71_2fc5523b","updated":"2016-01-26 13:03:04.000000000","message":"Done","commit_id":"42fd965b4923d85366953fa4e3633cb6d8c92a4f"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"ef1f8b1d22ed0d391bc9ea0c0102beba272640be","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # Create 2 projects (the first project is a parent for the second one)"},{"line_number":183,"context_line":"        # deletes the target project itself and its subtree"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # get API version."},{"line_number":186,"context_line":"        desc \u003d self.client.show_api_description()"},{"line_number":187,"context_line":"        version \u003d desc[\u0027version\u0027][\u0027id\u0027][1:]"},{"line_number":188,"context_line":"        v \u003d version.split(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_3c063e21","line":185,"updated":"2016-01-27 13:47:47.000000000","message":"You are going to duplicate code. You have the same code in https://review.openstack.org/#/c/270177/\n\nPlease introduce a new method in BaseIdentityV3Test that call show_api_description and raise a skipException if need be.","commit_id":"091fac423d2c8b47928365b7f0cd71d3f2204d24"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"4dcdcc63c4a63ee8f745858999da2d147ee6f6d5","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # Create 2 projects (the first project is a parent for the second one)"},{"line_number":183,"context_line":"        # deletes the target project itself and its subtree"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # get API version."},{"line_number":186,"context_line":"        desc \u003d self.client.show_api_description()"},{"line_number":187,"context_line":"        version \u003d desc[\u0027version\u0027][\u0027id\u0027][1:]"},{"line_number":188,"context_line":"        v \u003d version.split(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_e39fa563","line":185,"in_reply_to":"7a5de9d1_0e450816","updated":"2016-02-02 11:59:31.000000000","message":"Done","commit_id":"091fac423d2c8b47928365b7f0cd71d3f2204d24"},{"author":{"_account_id":18796,"name":"Alex Petrov","email":"apetrov@mirantis.com","username":"apetrov"},"change_message_id":"13ddd9aaec6dfcdcb20e7ddd5387add9902be3f6","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        # Create 2 projects (the first project is a parent for the second one)"},{"line_number":183,"context_line":"        # deletes the target project itself and its subtree"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # get API version."},{"line_number":186,"context_line":"        desc \u003d self.client.show_api_description()"},{"line_number":187,"context_line":"        version \u003d desc[\u0027version\u0027][\u0027id\u0027][1:]"},{"line_number":188,"context_line":"        v \u003d version.split(\u0027.\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a5de9d1_0e450816","line":185,"in_reply_to":"7a5de9d1_3c063e21","updated":"2016-01-28 14:33:04.000000000","message":"I have offered the solution in another patch set ( https://review.openstack.org/#/c/270177/) and this patch depends on it","commit_id":"091fac423d2c8b47928365b7f0cd71d3f2204d24"}]}
