)]}'
{"glanceclient/common/utils.py":[{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"6cbdc634da5e124f1ac1dbdd6014183c2d5b038d","unresolved":false,"context_lines":[{"line_number":398,"context_line":"    endpoint \u003d endpoint.rstrip(\u0027/\u0027)"},{"line_number":399,"context_line":"    url_bits \u003d endpoint.split(\u0027/\u0027)"},{"line_number":400,"context_line":"    # regex to match \u0027v1\u0027 or \u0027v2.0\u0027 etc"},{"line_number":401,"context_line":"    if len(url_bits) \u003e 3 and re.match(\u0027v\\d+\\.?\\d*\u0027, url_bits[-1]):"},{"line_number":402,"context_line":"        version \u003d float(url_bits[-1].lstrip(\u0027v\u0027))"},{"line_number":403,"context_line":"        endpoint \u003d \u0027/\u0027.join(url_bits[:-1])"},{"line_number":404,"context_line":"    return endpoint, version"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_3cd7b4c0","line":401,"updated":"2015-09-03 11:13:32.000000000","message":"I wonder if there\u0027s a better way to do this?\n\nIt should be possible to parse a url to get the \u0027path\u0027.\n\nfor example, something similar to:\n\n           glanceclient/shell.py:           \n\n            url_parts \u003d urlparse.urlparse(auth_url)\n           (scheme, netloc, path, params, query, fragment) \u003d url_parts\n\n            path \u003d path.lower()\n            if path.startswith(\u0027/v3\u0027):\n                v3_auth_url \u003d auth_url\n            elif path.startswith(\u0027/v2\u0027):\n                v2_auth_url \u003d auth_url","commit_id":"6a60f891d59f16641fbfb865fd6866b54c902aa7"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"64359cb57813c85a35a25539c9c99acfbfe268f6","unresolved":false,"context_lines":[{"line_number":398,"context_line":"    endpoint \u003d endpoint.rstrip(\u0027/\u0027)"},{"line_number":399,"context_line":"    url_bits \u003d endpoint.split(\u0027/\u0027)"},{"line_number":400,"context_line":"    # regex to match \u0027v1\u0027 or \u0027v2.0\u0027 etc"},{"line_number":401,"context_line":"    if len(url_bits) \u003e 3 and re.match(\u0027v\\d+\\.?\\d*\u0027, url_bits[-1]):"},{"line_number":402,"context_line":"        version \u003d float(url_bits[-1].lstrip(\u0027v\u0027))"},{"line_number":403,"context_line":"        endpoint \u003d \u0027/\u0027.join(url_bits[:-1])"},{"line_number":404,"context_line":"    return endpoint, version"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_55ca7b6f","line":401,"in_reply_to":"da20952f_3cd7b4c0","updated":"2015-09-03 12:22:51.000000000","message":"Done","commit_id":"6a60f891d59f16641fbfb865fd6866b54c902aa7"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"03dc95e933295ff6c75b1b87d35cd851e426b904","unresolved":false,"context_lines":[{"line_number":398,"context_line":"    # Get rid of trailing \u0027/\u0027 if present"},{"line_number":399,"context_line":"    endpoint \u003d endpoint.rstrip(\u0027/\u0027)"},{"line_number":400,"context_line":"    url_parts \u003d urlparse.urlparse(endpoint)"},{"line_number":401,"context_line":"    (scheme, netloc, path, params, query, fragment) \u003d url_parts"},{"line_number":402,"context_line":"    path \u003d path.lstrip(\u0027/\u0027)"},{"line_number":403,"context_line":"    # regex to match \u0027v1\u0027 or \u0027v2.0\u0027 etc"},{"line_number":404,"context_line":"    if re.match(\u0027v\\d+\\.?\\d*\u0027, path):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_f5814f90","line":401,"updated":"2015-09-03 12:32:12.000000000","message":"nit: we don\u0027t use \u0027params\u0027, \u0027query\u0027 or \u0027fragment\u0027, can we replace them with a double underscore? ie\n\n(scheme, netloc, path, __, __, __) \u003d url_parts","commit_id":"8c261af26f6a8b1089b835a2c23a5d152b77150b"},{"author":{"_account_id":14676,"name":"Kairat Kushaev","email":"kkushaev@mirantis.com","username":"kairat_kushaev"},"change_message_id":"98983fa013f6fb7657c04cc0a3c67c060b741a39","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    version \u003d None"},{"line_number":398,"context_line":"    # Get rid of trailing \u0027/\u0027 if present"},{"line_number":399,"context_line":"    endpoint \u003d endpoint.rstrip(\u0027/\u0027)"},{"line_number":400,"context_line":"    url_parts \u003d urlparse.urlparse(endpoint)"},{"line_number":401,"context_line":"    (scheme, netloc, path, __, __, __) \u003d url_parts"},{"line_number":402,"context_line":"    path \u003d path.lstrip(\u0027/\u0027)"},{"line_number":403,"context_line":"    # regex to match \u0027v1\u0027 or \u0027v2.0\u0027 etc"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba15a1d1_5d56fdce","line":400,"updated":"2015-09-16 15:54:40.000000000","message":"If endpoint is not correct then we receive some non-user friendly message like: Value Error: bla-bla-bla. I am wondering if users will get the error from this message.","commit_id":"19480df10a98165597d33eea360cbfe7460e3309"}],"glanceclient/tests/unit/test_client.py":[{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"6cbdc634da5e124f1ac1dbdd6014183c2d5b038d","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def test_endpoint_with_version_string_hostname(self):"},{"line_number":49,"context_line":"        gc \u003d client.Client(1, \"http://v1.example.com\")"},{"line_number":50,"context_line":"        self.assertEqual(\"http://v1.example.com\", gc.http_client.endpoint)"},{"line_number":51,"context_line":"        self.assertIsInstance(gc, v1.client.Client)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_3c1c9412","line":51,"updated":"2015-09-03 11:13:32.000000000","message":"Its probably easy to add a couple more tests here, eg:\n\n\nhttp://v1.example.com/v2 \n\nhttp://v1.example.com/v2.1\n\nhttp://v2.example.com/v1\n\netc","commit_id":"6a60f891d59f16641fbfb865fd6866b54c902aa7"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"64359cb57813c85a35a25539c9c99acfbfe268f6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def test_endpoint_with_version_string_hostname(self):"},{"line_number":49,"context_line":"        gc \u003d client.Client(1, \"http://v1.example.com\")"},{"line_number":50,"context_line":"        self.assertEqual(\"http://v1.example.com\", gc.http_client.endpoint)"},{"line_number":51,"context_line":"        self.assertIsInstance(gc, v1.client.Client)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_95b7b3f4","line":51,"in_reply_to":"da20952f_3c1c9412","updated":"2015-09-03 12:22:51.000000000","message":"Done","commit_id":"6a60f891d59f16641fbfb865fd6866b54c902aa7"}]}
