)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"c37440920fbfd2b2ed6bdfa23dfb091b715fe4f8","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mauro Stettler \u003cmauro.stettler@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-03 11:55:33 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Closes-Bug: 1325591 (ceilometer cannot communicate with swift if endpoint uri does not start with \u0027/v1\u0027)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I579b1cf450f16853ac49f1d248a64a179e6443d9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_d40b1d8c","line":7,"updated":"2014-06-03 15:54:08.000000000","message":"-1: please read the guideline about openstack project commit message format: https://wiki.openstack.org/wiki/Gerrit_Workflow#Committing_Changes\n\ncheers","commit_id":"ee1a0e4092fb98b32505d4dd67e46a477dfb4fb2"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"926901dd844fb8ba977f407d2613e3ddcf3161dd","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Mauro Stettler \u003cmauro.stettler@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-03 11:55:33 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Closes-Bug: 1325591 (ceilometer cannot communicate with swift if endpoint uri does not start with \u0027/v1\u0027)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I579b1cf450f16853ac49f1d248a64a179e6443d9"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1ae5cdf2_484dae3d","line":7,"in_reply_to":"1ae5cdf2_d40b1d8c","updated":"2014-06-03 18:05:29.000000000","message":"yeah, the several tips al least:\n\n1) it should start with one short-line description (\u003c50 symbols, only important stuff, without dot in the end of line)\n\n2) please fit 80 symbols margin all other lines\n\n3) other lines might contain descriptive paragraphs\n\n4) the next section usually contains bug/BP info - like Closes-Bug, etc.\n\n5) the last section *should* contain change id\n\nCheers!","commit_id":"ee1a0e4092fb98b32505d4dd67e46a477dfb4fb2"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"b8a534dce81557289bec48d04ef2acba1be4da51","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Corrects a flaw in the treatment of swift endpoints"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When keystone has a registered swift endpoint of which the url does not"},{"line_number":10,"context_line":"start"},{"line_number":11,"context_line":"with \u0027/v1\u0027, the object-store pollster is not able to use it correctly."},{"line_number":12,"context_line":"This commit fixes it\u0027s behaviour to provide more flexibility in endpoint"},{"line_number":13,"context_line":"urls."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1ae5cdf2_ba7f46aa","line":10,"updated":"2014-06-04 04:00:11.000000000","message":"nit: it is odd that only single word in a line","commit_id":"00b4bb348ee4a86608faf00da12a85dd33a13abd"}],"ceilometer/objectstore/swift.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"c37440920fbfd2b2ed6bdfa23dfb091b715fe4f8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        for t in cache[self.CACHE_KEY_TENANT]:"},{"line_number":74,"context_line":"            api_method \u003d \u0027%s_account\u0027 % self.METHOD"},{"line_number":75,"context_line":"            yield (t.id, getattr(swift, api_method)"},{"line_number":76,"context_line":"                                (endpoint, ksclient.auth_token))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"class ObjectsPollster(_Base):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_f439f9f2","line":76,"updated":"2014-06-03 15:54:08.000000000","message":"-1: the problem is that, ceilometer has to use http://hostname:port/v1/AUTH_tenantId such format to access swift, so if the endpoint is not the correct format, it will fail. Another problem is that, since tenantid is no longer configurable, maybe we need to do something other effort to ensure the tenant in endpoint has the right privilege. So I think maybe we\u0027d better not remove the neaten_url method\n\nI think may be the root cause is that the urlpase.urljoin treat the /v1/ as the root path of the host, so it would remove everything behind hostname:port, if we change the /v1/ to v1/, may be it can work properly in your environment, just try it","commit_id":"ee1a0e4092fb98b32505d4dd67e46a477dfb4fb2"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"0c3a3b2299aed8481f55acd2c03e347f3438aa58","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def _neaten_url(endpoint, tenant_id):"},{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5f13940c","line":83,"updated":"2014-06-04 02:55:42.000000000","message":"-1: I think maybe you\u0027re trying to handle such scenario: endpoint\u003dhttp://host:port//////v1, but I think such scenario is weird and may not work properly for swift itself. Correct me if I\u0027m wrong","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"b7ae75cba4cfef940bea6741b9621d5a1ff18b6c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def _neaten_url(endpoint, tenant_id):"},{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_951fbd07","line":83,"in_reply_to":"1ae5cdf2_557295ad","updated":"2014-06-04 04:21:52.000000000","message":"Do you mean the last scenario of the 4? It doesn\u0027t raise an exception, but the problem is that it just replaces \u0027/swift\u0027 with \u0027/v1\u0027, instead of appending \u0027/v1\u0027 to \u0027/swift\u0027.","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"2ca9dbaf6c5475b84fb42b66f25cdab389cd3ed6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def _neaten_url(endpoint, tenant_id):"},{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_fa062e85","line":83,"in_reply_to":"1ae5cdf2_5f13940c","updated":"2014-06-04 03:50:00.000000000","message":"I\u0027m trying to handle both cases of:\n\n- http://host:port/\n- http://host:port\n\nI want to have only one trailing \u0027/\u0027 in both cases, so I first remove all trailing \u0027/\u0027 and add one. Is there a better pythonic way to do that?\n\nI need to have the trailing slash in the first parameter for urlparse.urljoin to join them correctly.","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"e83a36436b821a34fe60eb30dfd3bb37ca2623ce","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def _neaten_url(endpoint, tenant_id):"},{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_557295ad","line":83,"in_reply_to":"1ae5cdf2_5f13940c","updated":"2014-06-04 04:13:57.000000000","message":"if in this scenario, I guess it will raise exception in urlparse.urljoin()","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"53ee5ffba62f83df839535b925a79e3fa9c14866","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def _neaten_url(endpoint, tenant_id):"},{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_ef1aed6d","line":83,"in_reply_to":"1ae5cdf2_95125d55","updated":"2014-06-04 06:39:38.000000000","message":"@Mauro Stettler\t\n\noh, I see, and test with \n\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port/swift/v1\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/swift/v1/\u0027\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port/swift/v1/\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/swift/v1/v1/\u0027","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"9c37ba89df507af837fa05b582165c3fdab7be00","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def _neaten_url(endpoint, tenant_id):"},{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_95125d55","line":83,"in_reply_to":"1ae5cdf2_ba566628","updated":"2014-06-04 04:03:39.000000000","message":"sorry, i wasn\u0027t clear. the problem is if there is a uri prefix after the hostname:\n\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port/\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/v1/\u0027\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/v1/\u0027\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port/swift/\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/swift/v1/\u0027\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port/swift\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/v1/\u0027","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"1247f3cc4305b841dfde32e8b6fcacc1924a76c0","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def _neaten_url(endpoint, tenant_id):"},{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_ba566628","line":83,"in_reply_to":"1ae5cdf2_fa062e85","updated":"2014-06-04 03:59:19.000000000","message":"urljoin will handle both cases:\n\n    \u003e\u003e\u003e import six.moves.urllib.parse as urlparse\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port/\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/v1/\u0027\n    \u003e\u003e\u003e urlparse.urljoin(\u0027http://host:port\u0027, \u0027v1/\u0027)\n    \u0027http://host:port/v1/\u0027","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"e83a36436b821a34fe60eb30dfd3bb37ca2623ce","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class ObjectsPollster(_Base):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_356d09cd","line":84,"updated":"2014-06-04 04:13:57.000000000","message":"Are there just only these two situation? if so, \n\nv1_identifier \u003d \u0027/swift/v1/\u0027 if \u0027/swift/v1/\u0027 in endpoint else \u0027/v1/\u0027\nreturn urlparse.urljoin(endpoint,\n                        v1_identifier + cfg.CONF.reseller_prefix + tenant_id)\n\ncan this be a choice?","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"b7ae75cba4cfef940bea6741b9621d5a1ff18b6c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        \"\"\"Transform the registered url to standard and valid format."},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        return urlparse.urljoin(endpoint.split(\u0027/v1\u0027)[0].rstrip(\u0027/\u0027) + \u0027/\u0027,"},{"line_number":84,"context_line":"                                \u0027v1/\u0027 + cfg.CONF.reseller_prefix + tenant_id)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class ObjectsPollster(_Base):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_3525095c","line":84,"in_reply_to":"1ae5cdf2_356d09cd","updated":"2014-06-04 04:21:52.000000000","message":"Thanks for the suggestion. I thought it would be better to provide as much flexibility as possible, so I would like to allow any prefix before the \u0027/v1\u0027, not only \u0027/swift\u0027.","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"}],"ceilometer/tests/objectstore/test_swift.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"0c3a3b2299aed8481f55acd2c03e347f3438aa58","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_neaten_url(self):"},{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_9f1fdc07","line":136,"updated":"2014-06-04 02:55:42.000000000","message":"nit: the trailing space is not necessary","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"9c37ba89df507af837fa05b582165c3fdab7be00","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_neaten_url(self):"},{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b51bd971","line":136,"in_reply_to":"1ae5cdf2_5a3f22d6","updated":"2014-06-04 04:03:39.000000000","message":"you are right:) thanks","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"1247f3cc4305b841dfde32e8b6fcacc1924a76c0","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_neaten_url(self):"},{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5a3f22d6","line":136,"in_reply_to":"1ae5cdf2_5a8722d7","updated":"2014-06-04 03:59:19.000000000","message":"then just remove the trailing comma too :)","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"2ca9dbaf6c5475b84fb42b66f25cdab389cd3ed6","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_neaten_url(self):"},{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5a8722d7","line":136,"in_reply_to":"1ae5cdf2_9f1fdc07","updated":"2014-06-04 03:50:00.000000000","message":"flake8 complains if I don\u0027t have the trailing space:\n\n    ceilometer/tests/objectstore/test_swift.py:136:56: E231 missing whitespace after \u0027,\u0027\n                              \u0027http://127.0.0.1:8080/swift\u0027,]","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"0c3a3b2299aed8481f55acd2c03e347f3438aa58","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            self.assertEqual(standard_url,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_dc2a528f","line":138,"updated":"2014-06-04 02:55:42.000000000","message":"nit: this line can be moved to the place before the for loop","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"2ca9dbaf6c5475b84fb42b66f25cdab389cd3ed6","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            self.assertEqual(standard_url,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_7a6f7e2b","line":138,"in_reply_to":"1ae5cdf2_dc2a528f","updated":"2014-06-04 03:50:00.000000000","message":"Done","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"0c3a3b2299aed8481f55acd2c03e347f3438aa58","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            self.assertEqual(standard_url,"},{"line_number":142,"context_line":"                             swift._Base._neaten_url(test_endpoint,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_1c203aab","line":139,"updated":"2014-06-04 02:55:42.000000000","message":"nit: /v1/ + AUTH_ can directly be /v1/AUTH_","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"2ca9dbaf6c5475b84fb42b66f25cdab389cd3ed6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            self.assertEqual(standard_url,"},{"line_number":142,"context_line":"                             swift._Base._neaten_url(test_endpoint,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_da725210","line":139,"in_reply_to":"1ae5cdf2_1c203aab","updated":"2014-06-04 03:50:00.000000000","message":"Done","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"0c3a3b2299aed8481f55acd2c03e347f3438aa58","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            self.assertEqual(standard_url,"},{"line_number":142,"context_line":"                             swift._Base._neaten_url(test_endpoint,"},{"line_number":143,"context_line":"                                                     test_tenant_id))"},{"line_number":144,"context_line":"            self.assertEqual(standard_url,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5fa9d4dd","line":141,"updated":"2014-06-04 02:55:42.000000000","message":"tiny nit: the code style looks not very good (personally), it can be:\n\n    url \u003d swift._Base._neaten_url(test_endpoint + \u0027/v1\u0027, test_tenant_id)\n    self.assertEqual(standard_url, url)","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"2ca9dbaf6c5475b84fb42b66f25cdab389cd3ed6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/\u0027 + \u0027AUTH_\u0027 + test_tenant_id"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"            self.assertEqual(standard_url,"},{"line_number":142,"context_line":"                             swift._Base._neaten_url(test_endpoint,"},{"line_number":143,"context_line":"                                                     test_tenant_id))"},{"line_number":144,"context_line":"            self.assertEqual(standard_url,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_fac9ce26","line":141,"in_reply_to":"1ae5cdf2_5fa9d4dd","updated":"2014-06-04 03:50:00.000000000","message":"Done","commit_id":"2a8ffb570b7fb01d3de133c282ede52cb6722e8c"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"a419be31ede3c1dbd63035b7c7097c13b152400b","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_neaten_url(self):"},{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":138,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/AUTH_\u0027 + test_tenant_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_2f285585","line":136,"updated":"2014-06-04 06:18:20.000000000","message":"nit: remove trailing comma and space","commit_id":"00b4bb348ee4a86608faf00da12a85dd33a13abd"},{"author":{"_account_id":10789,"name":"Mauro Stettler","email":"mauro.stettler@gmail.com","username":"replay"},"change_message_id":"b88a7067f5d5cea93794854dca668137b02be2bb","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def test_neaten_url(self):"},{"line_number":135,"context_line":"        test_endpoints \u003d [\u0027http://127.0.0.1:8080\u0027,"},{"line_number":136,"context_line":"                          \u0027http://127.0.0.1:8080/swift\u0027, ]"},{"line_number":137,"context_line":"        test_tenant_id \u003d \u0027a7fd1695fa154486a647e44aa99a1b9b\u0027"},{"line_number":138,"context_line":"        for test_endpoint in test_endpoints:"},{"line_number":139,"context_line":"            standard_url \u003d test_endpoint + \u0027/v1/AUTH_\u0027 + test_tenant_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_af97058f","line":136,"in_reply_to":"1ae5cdf2_2f285585","updated":"2014-06-04 06:26:37.000000000","message":"Fixed in Patch set 6, cheers","commit_id":"00b4bb348ee4a86608faf00da12a85dd33a13abd"}]}
