)]}'
{"tempest/cmd/verify_tempest_config.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"f0453128cbac88111f3e6f0ce379fb92ba7da932","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            not CONF.image_feature_enabled.api_v2, update)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _get_unversioned_endpoint(base_url):"},{"line_number":81,"context_line":"    endpoint_parts \u003d urlparse.urlparse(base_url)"},{"line_number":82,"context_line":"    endpoint \u003d endpoint_parts.scheme + \u0027://\u0027 + endpoint_parts.netloc"},{"line_number":83,"context_line":"    return endpoint"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_06c81473","line":80,"updated":"2016-03-24 11:03:38.000000000","message":"You should not introduce a new function but instead change this one so that it works for all services, including Keystone.\n\nOtherwise we will soon see _get_unversioned_compute_endpoint(), _get_unversioned_volume_endpoint(), _get_unversioned_object_endpoint() and this will be a nightmare.","commit_id":"d60168fd0bd425e962e140ca57f662937a6c6efb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a17418c0644ca1dc1618f58a1d35b87e4d913839","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            not CONF.image_feature_enabled.api_v2, update)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _get_unversioned_endpoint(base_url):"},{"line_number":81,"context_line":"    endpoint_parts \u003d urlparse.urlparse(base_url)"},{"line_number":82,"context_line":"    endpoint \u003d endpoint_parts.scheme + \u0027://\u0027 + endpoint_parts.netloc"},{"line_number":83,"context_line":"    return endpoint"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa0719c6_435ca87c","line":80,"in_reply_to":"fa0719c6_06c81473","updated":"2016-03-24 16:11:11.000000000","message":"identity works differently than compute and volume, so we need different behavior. compute and other projects require the tenant ID to be in the path before the version. As long as the projects work differently we\u0027re going to need different functions to handle the behavior.","commit_id":"d60168fd0bd425e962e140ca57f662937a6c6efb"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"c2577d99b3e5998d621572cd0344c9bbff298f45","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            not CONF.image_feature_enabled.api_v2, update)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _get_unversioned_endpoint(base_url, use_parent\u003dFalse):"},{"line_number":81,"context_line":"    # use_parent indicates that the *parent* of base_url is the url to use as"},{"line_number":82,"context_line":"    # the unversioned endpoint, otherwise the un-pathed base_url is the"},{"line_number":83,"context_line":"    # unversioned endpoint."}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_6077d43a","line":80,"updated":"2016-03-29 14:20:05.000000000","message":"This is overly complicated.\n\nWhy don\"t you just strip from base_url \"/vX/\" and/or \"/vX/$(tenant_id)s\" where X is an integer ?","commit_id":"4a148d1d88f9652a79fb7ea0d501ea6d7731175b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"288182f7024bf9972d39da6ae9ae744e0112730c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                            not CONF.image_feature_enabled.api_v2, update)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _get_unversioned_endpoint(base_url, use_parent\u003dFalse):"},{"line_number":81,"context_line":"    # use_parent indicates that the *parent* of base_url is the url to use as"},{"line_number":82,"context_line":"    # the unversioned endpoint, otherwise the un-pathed base_url is the"},{"line_number":83,"context_line":"    # unversioned endpoint."}],"source_content_type":"text/x-python","patch_set":4,"id":"ba0121b8_7acd2e30","line":80,"in_reply_to":"ba0121b8_6077d43a","updated":"2016-03-31 19:03:25.000000000","message":"Done","commit_id":"4a148d1d88f9652a79fb7ea0d501ea6d7731175b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"cb6cc084969a823aab1e2e9b8c375528fbcaa2ee","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def _remove_version_project(url_path):"},{"line_number":82,"context_line":"    return re.sub(r\u0027/v\\d+(\\.\\d+)?(/[^/]+)?\u0027, \u0027\u0027, url_path)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def _get_unversioned_endpoint(base_url):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba0121b8_baf5adcc","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":58},"updated":"2016-04-04 04:26:51.000000000","message":"i always find a docstring or comment about the regular expression used to be handy for other contributors","commit_id":"b4d17e75c09b2db056ccbc068c758ae6b64abd1e"},{"author":{"_account_id":7118,"name":"Ian Wienand","email":"iwienand@redhat.com","username":"iwienand"},"change_message_id":"746d345dfb4b1496b6a140051af2794c211ea3dc","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def _remove_version_project(url_path):"},{"line_number":82,"context_line":"    return re.sub(r\u0027/v\\d+(\\.\\d+)?(/[^/]+)?\u0027, \u0027\u0027, url_path)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def _get_unversioned_endpoint(base_url):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_d2f07469","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":58},"in_reply_to":"9a061dce_9d022c0a","updated":"2016-04-08 01:05:14.000000000","message":"FWIW on a non-trivial regex I usually like to see a minimal example of a string that matches the regex, it makes it easier to correlate what\u0027s in the regex to what it should be seeing","commit_id":"b4d17e75c09b2db056ccbc068c758ae6b64abd1e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5fb7ca1b12fd355e4baa9ca001c47358c47618db","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def _remove_version_project(url_path):"},{"line_number":82,"context_line":"    return re.sub(r\u0027/v\\d+(\\.\\d+)?(/[^/]+)?\u0027, \u0027\u0027, url_path)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def _get_unversioned_endpoint(base_url):"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_382545c2","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":58},"in_reply_to":"9a061dce_bf390944","updated":"2016-04-11 22:01:33.000000000","message":"Done","commit_id":"b4d17e75c09b2db056ccbc068c758ae6b64abd1e"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"231d83715d612ee8f20bbfbba0fa63b23260adca","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def _remove_version_project(url_path):"},{"line_number":82,"context_line":"    return re.sub(r\u0027/v\\d+(\\.\\d+)?(/[^/]+)?\u0027, \u0027\u0027, url_path)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def _get_unversioned_endpoint(base_url):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_bf390944","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":58},"in_reply_to":"9a061dce_d2f07469","updated":"2016-04-09 08:03:00.000000000","message":"+1 for adding a minimal example for this.\nThat would be useful in long-term.\nIn this patch, we can see actual samples on unit tests.\nHowever after merging, it is a little difficult to find the corresponding tests. The example of the code is nice for us.","commit_id":"b4d17e75c09b2db056ccbc068c758ae6b64abd1e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3ac82839cf3d23c707ef3020b09f439a82a4eaab","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def _remove_version_project(url_path):"},{"line_number":82,"context_line":"    return re.sub(r\u0027/v\\d+(\\.\\d+)?(/[^/]+)?\u0027, \u0027\u0027, url_path)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"def _get_unversioned_endpoint(base_url):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a061dce_9d022c0a","line":82,"range":{"start_line":82,"start_character":4,"end_line":82,"end_character":58},"in_reply_to":"ba0121b8_baf5adcc","updated":"2016-04-05 15:39:47.000000000","message":"Not sure what the comment would say... the function name says what it does already. Unit tests show how it works.","commit_id":"b4d17e75c09b2db056ccbc068c758ae6b64abd1e"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"33adc0b0b12bfbc47b49d2afb2f18df505712349","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        \u0027keystone\u0027: os.identity_client,"},{"line_number":98,"context_line":"        \u0027cinder\u0027: os.volumes_client,"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":"    if service !\u003d \u0027keystone\u0027:"},{"line_number":101,"context_line":"        client_dict[service].skip_path()"},{"line_number":102,"context_line":"    endpoint \u003d _get_unversioned_endpoint(client_dict[service].base_url)"},{"line_number":103,"context_line":"    dscv \u003d CONF.identity.disable_ssl_certificate_validation"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a122d0e_cd6adf80","line":100,"updated":"2016-04-20 08:22:45.000000000","message":"Could you please leave a code comment on why skip_path() doesn\u0027t apply to keystone please ?","commit_id":"945f0f37426213ae6539817c03e1cc3622092b19"}]}
