)]}'
{"tools/verify_tempest_config.py":[{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4d7c285edc7ef6ba05a45bbdcf34ddd418cda1ba","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def verify_keystone_api_versions(os):"},{"line_number":43,"context_line":"    # Check keystone api versions"},{"line_number":44,"context_line":"    os.identity_client.skip_path \u003d True"},{"line_number":45,"context_line":"    v2_endpoint \u003d os.servers_client.base_url"},{"line_number":46,"context_line":"    v2_endpoint_parts \u003d v2_endpoint.split(\u0027/\u0027)"},{"line_number":47,"context_line":"    endpoint \u003d v2_endpoint_parts[0] + \u0027//\u0027 + v2_endpoint_parts[2]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FcR0%3D","line":44,"updated":"2014-03-06 02:40:14.000000000","message":"skip_path is a method\n\nos.identity_client.skip_path -\u003e os.identity_client.skip_path()\n\nverify_nova_api_versions has the same problem.","commit_id":"cd6650a7b7519850ece25f74779efa18194123fc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"79b1725efa079265267d8c4c871db5acdc3771b6","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def verify_keystone_api_versions(os):"},{"line_number":43,"context_line":"    # Check keystone api versions"},{"line_number":44,"context_line":"    os.identity_client.skip_path \u003d True"},{"line_number":45,"context_line":"    v2_endpoint \u003d os.servers_client.base_url"},{"line_number":46,"context_line":"    v2_endpoint_parts \u003d v2_endpoint.split(\u0027/\u0027)"},{"line_number":47,"context_line":"    endpoint \u003d v2_endpoint_parts[0] + \u0027//\u0027 + v2_endpoint_parts[2]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FXc4%3D","line":44,"in_reply_to":"AAAAVn%2F%2FcR0%3D","updated":"2014-03-06 15:52:16.000000000","message":"Done","commit_id":"cd6650a7b7519850ece25f74779efa18194123fc"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4d7c285edc7ef6ba05a45bbdcf34ddd418cda1ba","unresolved":false,"context_lines":[{"line_number":42,"context_line":"def verify_keystone_api_versions(os):"},{"line_number":43,"context_line":"    # Check keystone api versions"},{"line_number":44,"context_line":"    os.identity_client.skip_path \u003d True"},{"line_number":45,"context_line":"    v2_endpoint \u003d os.servers_client.base_url"},{"line_number":46,"context_line":"    v2_endpoint_parts \u003d v2_endpoint.split(\u0027/\u0027)"},{"line_number":47,"context_line":"    endpoint \u003d v2_endpoint_parts[0] + \u0027//\u0027 + v2_endpoint_parts[2]"},{"line_number":48,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FcQk%3D","line":45,"updated":"2014-03-06 02:40:14.000000000","message":"os.servers_client.base_url -\u003e os.identity_client.base_url","commit_id":"cd6650a7b7519850ece25f74779efa18194123fc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"79b1725efa079265267d8c4c871db5acdc3771b6","unresolved":false,"context_lines":[{"line_number":42,"context_line":"def verify_keystone_api_versions(os):"},{"line_number":43,"context_line":"    # Check keystone api versions"},{"line_number":44,"context_line":"    os.identity_client.skip_path \u003d True"},{"line_number":45,"context_line":"    v2_endpoint \u003d os.servers_client.base_url"},{"line_number":46,"context_line":"    v2_endpoint_parts \u003d v2_endpoint.split(\u0027/\u0027)"},{"line_number":47,"context_line":"    endpoint \u003d v2_endpoint_parts[0] + \u0027//\u0027 + v2_endpoint_parts[2]"},{"line_number":48,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FXc0%3D","line":45,"in_reply_to":"AAAAVn%2F%2FcQk%3D","updated":"2014-03-06 15:52:16.000000000","message":"Done","commit_id":"cd6650a7b7519850ece25f74779efa18194123fc"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"4d7c285edc7ef6ba05a45bbdcf34ddd418cda1ba","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    endpoint \u003d v2_endpoint_parts[0] + \u0027//\u0027 + v2_endpoint_parts[2]"},{"line_number":48,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"},{"line_number":49,"context_line":"    body \u003d json.loads(body)"},{"line_number":50,"context_line":"    os.identity_client.skip_path \u003d False"},{"line_number":51,"context_line":"    versions \u003d map(lambda x: x[\u0027id\u0027], body[\u0027versions\u0027])"},{"line_number":52,"context_line":"    if CONF.identity_feature_enabled.api_v2 !\u003d (\u0027v2.0\u0027 in versions):"},{"line_number":53,"context_line":"        print(\u0027Config option identity api_v2 should be change to %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FcPs%3D","line":50,"updated":"2014-03-06 02:40:14.000000000","message":"os.identity_client.skip_path \u003d Flase -\u003e  os.identity_client.reset_path()","commit_id":"cd6650a7b7519850ece25f74779efa18194123fc"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"79b1725efa079265267d8c4c871db5acdc3771b6","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    endpoint \u003d v2_endpoint_parts[0] + \u0027//\u0027 + v2_endpoint_parts[2]"},{"line_number":48,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"},{"line_number":49,"context_line":"    body \u003d json.loads(body)"},{"line_number":50,"context_line":"    os.identity_client.skip_path \u003d False"},{"line_number":51,"context_line":"    versions \u003d map(lambda x: x[\u0027id\u0027], body[\u0027versions\u0027])"},{"line_number":52,"context_line":"    if CONF.identity_feature_enabled.api_v2 !\u003d (\u0027v2.0\u0027 in versions):"},{"line_number":53,"context_line":"        print(\u0027Config option identity api_v2 should be change to %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FXcw%3D","line":50,"in_reply_to":"AAAAVn%2F%2FcPs%3D","updated":"2014-03-06 15:52:16.000000000","message":"Done","commit_id":"cd6650a7b7519850ece25f74779efa18194123fc"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f7e058b9ffad2e6a50434d7a3d0d1825d32f8903","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027keystone\u0027: os.identity_client.base_url,"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":"    endpoint_parts \u003d baseurl_dict[service].split(\u0027/\u0027)"},{"line_number":48,"context_line":"    endpoint \u003d endpoint_parts[0] + \u0027//\u0027 + endpoint_parts[2]"},{"line_number":49,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"},{"line_number":50,"context_line":"    body \u003d json.loads(body)"},{"line_number":51,"context_line":"    if service \u003d\u003d \u0027keystone\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FOmw%3D","line":48,"updated":"2014-03-19 09:56:03.000000000","message":"line 47 and 48 seems not necessary, after invoking skip_path(), the base_url should not have path.","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"194ee80f473cbc01281937f5c1d1cfcef50928da","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027keystone\u0027: os.identity_client.base_url,"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":"    endpoint_parts \u003d baseurl_dict[service].split(\u0027/\u0027)"},{"line_number":48,"context_line":"    endpoint \u003d endpoint_parts[0] + \u0027//\u0027 + endpoint_parts[2]"},{"line_number":49,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"},{"line_number":50,"context_line":"    body \u003d json.loads(body)"},{"line_number":51,"context_line":"    if service \u003d\u003d \u0027keystone\u0027:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2B6MQ%3D","line":48,"in_reply_to":"AAAAWH%2F%2FOmw%3D","updated":"2014-03-21 19:18:29.000000000","message":"They are because even with skip_path() the endpoint is still versioned. To get the 300 response with the list of versions it needs to be an endpoint without the version","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f7e058b9ffad2e6a50434d7a3d0d1825d32f8903","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def verify_keystone_api_versions(os):"},{"line_number":59,"context_line":"    # Check keystone api versions"},{"line_number":60,"context_line":"    os.identity_client.skip_path()"},{"line_number":61,"context_line":"    versions \u003d _get_api_versions(os, \u0027keystone\u0027)"},{"line_number":62,"context_line":"    os.identity_client.reset_path()"},{"line_number":63,"context_line":"    if CONF.identity_feature_enabled.api_v2 !\u003d (\u0027v2.0\u0027 in versions):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FOp4%3D","line":60,"updated":"2014-03-19 09:56:03.000000000","message":"os.identity_client.skip_path() could also be moved into _get_api_versions","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"194ee80f473cbc01281937f5c1d1cfcef50928da","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"def verify_keystone_api_versions(os):"},{"line_number":59,"context_line":"    # Check keystone api versions"},{"line_number":60,"context_line":"    os.identity_client.skip_path()"},{"line_number":61,"context_line":"    versions \u003d _get_api_versions(os, \u0027keystone\u0027)"},{"line_number":62,"context_line":"    os.identity_client.reset_path()"},{"line_number":63,"context_line":"    if CONF.identity_feature_enabled.api_v2 !\u003d (\u0027v2.0\u0027 in versions):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2B6LA%3D","line":60,"in_reply_to":"AAAAWH%2F%2FOp4%3D","updated":"2014-03-21 19:18:29.000000000","message":"That\u0027s a fair point, I left it out because I wanted to make the dict values in _get_api_versions the method. But I could set the values as the client object and go from there.","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f7e058b9ffad2e6a50434d7a3d0d1825d32f8903","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    # Check keystone api versions"},{"line_number":60,"context_line":"    os.identity_client.skip_path()"},{"line_number":61,"context_line":"    versions \u003d _get_api_versions(os, \u0027keystone\u0027)"},{"line_number":62,"context_line":"    os.identity_client.reset_path()"},{"line_number":63,"context_line":"    if CONF.identity_feature_enabled.api_v2 !\u003d (\u0027v2.0\u0027 in versions):"},{"line_number":64,"context_line":"        print(\u0027Config option identity api_v2 should be change to %s\u0027 % ("},{"line_number":65,"context_line":"            not CONF.identity_feature_enabled.api_v2))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FOp0%3D","line":62,"updated":"2014-03-19 09:56:03.000000000","message":"ditto","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f7e058b9ffad2e6a50434d7a3d0d1825d32f8903","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def verify_nova_api_versions(os):"},{"line_number":72,"context_line":"    # Check nova api versions - only get base URL without PATH"},{"line_number":73,"context_line":"    os.servers_client.skip_path \u003d True"},{"line_number":74,"context_line":"    versions \u003d _get_api_versions(os, \u0027nova\u0027)"},{"line_number":75,"context_line":"    # Restore full base_url"},{"line_number":76,"context_line":"    os.servers_client.skip_path \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FOog%3D","line":73,"updated":"2014-03-19 09:56:03.000000000","message":"-\u003e os.servers_client.skip_path()","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":7139,"name":"Zhi Kun Liu","username":"zhikunliu","inactive":true},"change_message_id":"f7e058b9ffad2e6a50434d7a3d0d1825d32f8903","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    os.servers_client.skip_path \u003d True"},{"line_number":74,"context_line":"    versions \u003d _get_api_versions(os, \u0027nova\u0027)"},{"line_number":75,"context_line":"    # Restore full base_url"},{"line_number":76,"context_line":"    os.servers_client.skip_path \u003d False"},{"line_number":77,"context_line":"    if CONF.compute_feature_enabled.api_v3 !\u003d (\u0027v3.0\u0027 in versions):"},{"line_number":78,"context_line":"        print(\u0027Config option compute api_v3 should be change to: %s\u0027 % ("},{"line_number":79,"context_line":"              not CONF.compute_feature_enabled.api_v3))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FOoU%3D","line":76,"updated":"2014-03-19 09:56:03.000000000","message":"-\u003e os.servers_client.reset_path()","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"194ee80f473cbc01281937f5c1d1cfcef50928da","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    os.servers_client.skip_path \u003d True"},{"line_number":74,"context_line":"    versions \u003d _get_api_versions(os, \u0027nova\u0027)"},{"line_number":75,"context_line":"    # Restore full base_url"},{"line_number":76,"context_line":"    os.servers_client.skip_path \u003d False"},{"line_number":77,"context_line":"    if CONF.compute_feature_enabled.api_v3 !\u003d (\u0027v3.0\u0027 in versions):"},{"line_number":78,"context_line":"        print(\u0027Config option compute api_v3 should be change to: %s\u0027 % ("},{"line_number":79,"context_line":"              not CONF.compute_feature_enabled.api_v3))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2B6M8%3D","line":76,"in_reply_to":"AAAAWH%2F%2FOoU%3D","updated":"2014-03-21 19:18:29.000000000","message":"This is outside the scope of this change by itself, but with the above change it get\u0027s removed.","commit_id":"8532ff1383c27b621d33a6950a5b948d8ec08795"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"58ba36d74ed923425b8edad77ed595f2fad67937","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027keystone\u0027: os.identity_client,"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":"    client_dict[service].skip_path()"},{"line_number":48,"context_line":"    endpoint_parts \u003d client_dict[service].base_url.split(\u0027/\u0027)"},{"line_number":49,"context_line":"    endpoint \u003d endpoint_parts[0] + \u0027//\u0027 + endpoint_parts[2]"},{"line_number":50,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"},{"line_number":51,"context_line":"    client_dict[service].reset_path()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2BC9I%3D","line":48,"updated":"2014-03-31 10:08:23.000000000","message":"please use - https://docs.python.org/2/library/urlparse.html instead of writing your own. :)","commit_id":"ca211e430ef7713d717d81b6128815cfd8d40b3b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"e89224d98879aa759756c257580db88a3b36bdd5","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027keystone\u0027: os.identity_client,"},{"line_number":46,"context_line":"    }"},{"line_number":47,"context_line":"    client_dict[service].skip_path()"},{"line_number":48,"context_line":"    endpoint_parts \u003d client_dict[service].base_url.split(\u0027/\u0027)"},{"line_number":49,"context_line":"    endpoint \u003d endpoint_parts[0] + \u0027//\u0027 + endpoint_parts[2]"},{"line_number":50,"context_line":"    __, body \u003d RAW_HTTP.request(endpoint, \u0027GET\u0027)"},{"line_number":51,"context_line":"    client_dict[service].reset_path()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F9VrE%3D","line":48,"in_reply_to":"AAAAWH%2F%2BC9I%3D","updated":"2014-04-06 16:11:12.000000000","message":"Done","commit_id":"ca211e430ef7713d717d81b6128815cfd8d40b3b"}]}
