)]}'
{"tempest/api/identity/v3/test_api_discovery.py":[{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"d093fe6cf26ef157f70d769ab4c1645e1a0ca829","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                              \u0027updated\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        for version in versions:"},{"line_number":35,"context_line":"            keys \u003d version.keys()"},{"line_number":36,"context_line":"            for res in expected_resources:"},{"line_number":37,"context_line":"                self.assertIn(res, keys)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":40,"context_line":"    @decorators.idempotent_id(\u0027b9232f5e-d9e5-4d97-b96c-28d3db4de1bd\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_c37b69bc","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":40},"updated":"2017-03-06 07:20:27.000000000","message":"can it be simplifed as:\n            for res in expected_resources:\n                self.assertIn(res, version)","commit_id":"b6b1c25c9981994ff32b2e0c6344fccb562015e7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c539f39b4cafc2e7d038c8641f298966e92e4b1c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"                              \u0027updated\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        for version in versions:"},{"line_number":35,"context_line":"            keys \u003d version.keys()"},{"line_number":36,"context_line":"            for res in expected_resources:"},{"line_number":37,"context_line":"                self.assertIn(res, keys)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":40,"context_line":"    @decorators.idempotent_id(\u0027b9232f5e-d9e5-4d97-b96c-28d3db4de1bd\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba2be162_286c0036","line":37,"range":{"start_line":35,"start_character":0,"end_line":37,"end_character":40},"in_reply_to":"ba2be162_c37b69bc","updated":"2017-03-06 19:58:52.000000000","message":"++, thanks","commit_id":"b6b1c25c9981994ff32b2e0c6344fccb562015e7"}],"tempest/lib/common/rest_client.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"997453c9bdb1525d985458d16d78e1721f8ecb90","unresolved":false,"context_lines":[{"line_number":916,"context_line":"                    msg \u003d (\"HTTP response header is invalid (%s)\" % ex)"},{"line_number":917,"context_line":"                    raise exceptions.InvalidHTTPResponseHeader(msg)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def _get_base_version_url(self):"},{"line_number":920,"context_line":"        endpoint \u003d self.base_url"},{"line_number":921,"context_line":"        url \u003d urllib.parse.urlsplit(endpoint)"},{"line_number":922,"context_line":"        new_path \u003d re.split(r\u0027(^|/)+v\\d+(\\.\\d+)?\u0027, url.path)[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_f751b563","line":919,"range":{"start_line":919,"start_character":3,"end_line":919,"end_character":36},"updated":"2017-03-07 22:03:17.000000000","message":"Since this is moved to the rest client, I think it should be a public method, get docstring and release notes.","commit_id":"a7f5159eb5890511c3e77b6535496f67ba635736"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ff597ce48241851c2122605d39377fe4a501908b","unresolved":false,"context_lines":[{"line_number":916,"context_line":"                    msg \u003d (\"HTTP response header is invalid (%s)\" % ex)"},{"line_number":917,"context_line":"                    raise exceptions.InvalidHTTPResponseHeader(msg)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def _get_base_version_url(self):"},{"line_number":920,"context_line":"        endpoint \u003d self.base_url"},{"line_number":921,"context_line":"        url \u003d urllib.parse.urlsplit(endpoint)"},{"line_number":922,"context_line":"        new_path \u003d re.split(r\u0027(^|/)+v\\d+(\\.\\d+)?\u0027, url.path)[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_5b77f139","line":919,"range":{"start_line":919,"start_character":3,"end_line":919,"end_character":36},"in_reply_to":"9a30ddce_48182085","updated":"2017-03-08 12:53:44.000000000","message":"In fact we already have this a stable interface (kind of) in http://git.openstack.org/cgit/openstack/tempest/tree/tempest/lib/auth.py#n35\n\nauth.replace_version(self.base_url, None)\n\nwould give you the same result as _get_base_version_ur.\n\nIf this code does not work for plugins, even self.base_url won\u0027t work, as it uses the exact same regex.\n\nIn fact, setting api_version \u003d \u0027\u0027 in the version clients would be enough to get the unversioned URL our of self.base_url.","commit_id":"a7f5159eb5890511c3e77b6535496f67ba635736"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"cb6f02475663b1cb014f2de7802d70edfc94c798","unresolved":false,"context_lines":[{"line_number":916,"context_line":"                    msg \u003d (\"HTTP response header is invalid (%s)\" % ex)"},{"line_number":917,"context_line":"                    raise exceptions.InvalidHTTPResponseHeader(msg)"},{"line_number":918,"context_line":""},{"line_number":919,"context_line":"    def _get_base_version_url(self):"},{"line_number":920,"context_line":"        endpoint \u003d self.base_url"},{"line_number":921,"context_line":"        url \u003d urllib.parse.urlsplit(endpoint)"},{"line_number":922,"context_line":"        new_path \u003d re.split(r\u0027(^|/)+v\\d+(\\.\\d+)?\u0027, url.path)[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_48182085","line":919,"range":{"start_line":919,"start_character":3,"end_line":919,"end_character":36},"in_reply_to":"9a30ddce_f751b563","updated":"2017-03-07 23:10:30.000000000","message":"I don\u0027t think so because users of this method are only service clients which are tempest.lib. And these clients are using this method as internal method like the other internal methods.\n\nAt this time, this is premature as public method because the way to get base URL could be different on services. So I\u0027d like to avoid it as public method at this time.","commit_id":"a7f5159eb5890511c3e77b6535496f67ba635736"}],"tempest/lib/services/compute/versions_client.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ff597ce48241851c2122605d39377fe4a501908b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class VersionsClient(base_compute_client.BaseComputeClient):"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _get_base_version_url(self):"},{"line_number":28,"context_line":"        # NOTE: The URL which is got from keystone\u0027s catalog contains"},{"line_number":29,"context_line":"        # API version and project-id like \"/app-name/v2/{project-id}\" or"},{"line_number":30,"context_line":"        # \"/v2/{project-id}\", but we need to access the URL which doesn\u0027t"},{"line_number":31,"context_line":"        # contain API version for getting API versions. For that, here"},{"line_number":32,"context_line":"        # should use raw_request() instead of get()."},{"line_number":33,"context_line":"        endpoint \u003d self.base_url"},{"line_number":34,"context_line":"        url \u003d urllib.parse.urlsplit(endpoint)"},{"line_number":35,"context_line":"        new_path \u003d re.split(r\u0027(^|/)+v\\d+(\\.\\d+)?\u0027, url.path)[0]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a30ddce_9b7969ff","side":"PARENT","line":32,"range":{"start_line":28,"start_character":0,"end_line":32,"end_character":52},"updated":"2017-03-08 12:53:44.000000000","message":"I\u0027m not sure we should lose this comment. \nI believe that setting identity_version \u003d \u0027\u0027 would allow using the normal request here, but list_versions does not need auth, so using raw_request is fine anyways, only we lose the logging part by doing so.","commit_id":"5e1543f7537a4f95070909a43e9a2ef3e6f843e0"}]}
